// This test checks the -Zremark-dir flag, which writes LLVM // optimization remarks to the YAML format. When using PGO (Profile // Guided Optimization), the Hotness attribute should be included in // the output remark files. // See https://github.com/rust-lang/rust/pull/114439 //@ needs-profiler-support //@ ignore-cross-compile use run_make_support::{ has_extension, has_prefix, invalid_utf8_contains, llvm_profdata, run, rustc, shallow_find_files, }; fn main() { rustc().profile_generate("profdata").opt().input("foo.rs").output("foo").run(); run("foo"); // The profdata filename is a long sequence of numbers, fetch it by prefix and extension // to keep the test working even if the filename changes. let profdata_files = shallow_find_files("profdata", |path| { has_prefix(path, "default") && has_extension(path, "profraw") }); let profdata_file = profdata_files.get(0).unwrap(); llvm_profdata().merge().output("merged.profdata").input(profdata_file).run(); rustc() .profile_use("merged.profdata") .opt() .input("foo.rs") .arg("-Cremark=all") .arg("-Zremark-dir=profiles") .run(); // Check that PGO hotness is included in the remark files let remark_files = shallow_find_files("profiles", |path| { has_prefix(path, "foo") && has_extension(path, "yaml") }); assert!(!remark_files.is_empty()); for file in remark_files { if !file.to_str().unwrap().contains("codegen") { invalid_utf8_contains(file, "Hotness") }; } }