Rollup merge of #128363 - Oneirical:not-to-be-undertestimated, r=jieyouxu
Migrate `pdb-buildinfo-cl-cmd` and `pgo-indirect-call-promotion` `run-make` tests to rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). Please try: try-job: x86_64-msvc try-job: x86_64-mingw try-job: i686-msvc try-job: i686-mingw try-job: x86_64-gnu-llvm-17 try-job: aarch64-apple
This commit is contained in:
commit
a36bf74d66
@ -204,6 +204,7 @@ const KNOWN_DIRECTIVE_NAMES: &[&str] = &[
|
||||
"only-watchos",
|
||||
"only-windows",
|
||||
"only-windows-gnu",
|
||||
"only-windows-msvc",
|
||||
"only-x86",
|
||||
"only-x86_64",
|
||||
"only-x86_64-fortanix-unknown-sgx",
|
||||
|
@ -16,8 +16,6 @@ run-make/macos-deployment-target/Makefile
|
||||
run-make/min-global-align/Makefile
|
||||
run-make/native-link-modifier-bundle/Makefile
|
||||
run-make/no-alloc-shim/Makefile
|
||||
run-make/pdb-buildinfo-cl-cmd/Makefile
|
||||
run-make/pgo-indirect-call-promotion/Makefile
|
||||
run-make/remap-path-prefix-dwarf/Makefile
|
||||
run-make/reproducible-build/Makefile
|
||||
run-make/rlib-format-packed-bundled-libs/Makefile
|
||||
|
@ -1,16 +0,0 @@
|
||||
include ../tools.mk
|
||||
|
||||
# only-windows-msvc
|
||||
|
||||
# tests if the pdb contains the following information in the LF_BUILDINFO:
|
||||
# 1. the commandline args to compile it (cmd)
|
||||
# 2. full path to the compiler (cl)
|
||||
|
||||
# we just do a stringsearch on the pdb, as these need to show up at least once, as the LF_BUILDINFO is created for each cgu
|
||||
# actual parsing would be better, but this is a simple and good enough solution for now
|
||||
|
||||
all:
|
||||
$(RUSTC_ORIGINAL) main.rs -g --crate-name my_crate_name --crate-type bin -C metadata=dc9ef878b0a48666 --out-dir $(TMPDIR)
|
||||
cat '$(TMPDIR)/my_crate_name.pdb' | grep -F '$(RUSTC_ORIGINAL)'
|
||||
# using a file containing the string so I don't have problems with escaping quotes and spaces
|
||||
cat '$(TMPDIR)/my_crate_name.pdb' | grep -f 'stringlist.txt'
|
39
tests/run-make/pdb-buildinfo-cl-cmd/rmake.rs
Normal file
39
tests/run-make/pdb-buildinfo-cl-cmd/rmake.rs
Normal file
@ -0,0 +1,39 @@
|
||||
// Check if the pdb file contains the following information in the LF_BUILDINFO:
|
||||
// 1. full path to the compiler (cl)
|
||||
// 2. the commandline args to compile it (cmd)
|
||||
// This is because these used to be missing in #96475.
|
||||
// See https://github.com/rust-lang/rust/pull/113492
|
||||
|
||||
//@ only-windows-msvc
|
||||
// Reason: pdb files are unique to this architecture
|
||||
|
||||
use run_make_support::{assert_contains, bstr, env_var, rfs, rustc};
|
||||
|
||||
fn main() {
|
||||
rustc()
|
||||
.input("main.rs")
|
||||
.arg("-g")
|
||||
.crate_name("my_crate_name")
|
||||
.crate_type("bin")
|
||||
.metadata("dc9ef878b0a48666")
|
||||
.run();
|
||||
let tests = [
|
||||
&env_var("RUSTC"),
|
||||
r#""main.rs""#,
|
||||
r#""-g""#,
|
||||
r#""--crate-name""#,
|
||||
r#""my_crate_name""#,
|
||||
r#""--crate-type""#,
|
||||
r#""bin""#,
|
||||
r#""-Cmetadata=dc9ef878b0a48666""#,
|
||||
];
|
||||
for test in tests {
|
||||
assert_pdb_contains(test);
|
||||
}
|
||||
}
|
||||
|
||||
fn assert_pdb_contains(needle: &str) {
|
||||
let needle = needle.as_bytes();
|
||||
use bstr::ByteSlice;
|
||||
assert!(&rfs::read("my_crate_name.pdb").find(needle).is_some());
|
||||
}
|
@ -1 +0,0 @@
|
||||
"main.rs" "-g" "--crate-name" "my_crate_name" "--crate-type" "bin" "-C" "metadata=dc9ef878b0a48666" "--out-dir"
|
@ -1,23 +0,0 @@
|
||||
# needs-profiler-support
|
||||
# ignore-cross-compile
|
||||
|
||||
include ../tools.mk
|
||||
|
||||
all:
|
||||
# We don't compile `opaque` with either optimizations or instrumentation.
|
||||
# We don't compile `opaque` with either optimizations or instrumentation.
|
||||
$(RUSTC) $(COMMON_FLAGS) opaque.rs
|
||||
# Compile the test program with instrumentation
|
||||
mkdir -p "$(TMPDIR)"/prof_data_dir
|
||||
$(RUSTC) $(COMMON_FLAGS) interesting.rs \
|
||||
-Cprofile-generate="$(TMPDIR)"/prof_data_dir -O -Ccodegen-units=1
|
||||
$(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)"/prof_data_dir -O
|
||||
# The argument below generates to the expected branch weights
|
||||
$(call RUN,main) || exit 1
|
||||
"$(LLVM_BIN_DIR)"/llvm-profdata merge \
|
||||
-o "$(TMPDIR)"/prof_data_dir/merged.profdata \
|
||||
"$(TMPDIR)"/prof_data_dir
|
||||
$(RUSTC) $(COMMON_FLAGS) interesting.rs \
|
||||
-Cprofile-use="$(TMPDIR)"/prof_data_dir/merged.profdata -O \
|
||||
-Ccodegen-units=1 --emit=llvm-ir
|
||||
cat "$(TMPDIR)"/interesting.ll | "$(LLVM_FILECHECK)" filecheck-patterns.txt
|
33
tests/run-make/pgo-indirect-call-promotion/rmake.rs
Normal file
33
tests/run-make/pgo-indirect-call-promotion/rmake.rs
Normal file
@ -0,0 +1,33 @@
|
||||
// This test checks that indirect call promotion is performed. The test
|
||||
// programs calls the same function a thousand times through a function pointer.
|
||||
// Only PGO data provides the information that it actually always is the same
|
||||
// function. We verify that the indirect call promotion pass inserts a check
|
||||
// whether it can make a direct call instead of the indirect call.
|
||||
// See https://github.com/rust-lang/rust/pull/66631
|
||||
|
||||
//@ needs-profiler-support
|
||||
// Reason: llvm_profdata is used
|
||||
//@ ignore-cross-compile
|
||||
// Reason: the compiled binary is executed
|
||||
|
||||
use run_make_support::{llvm_filecheck, llvm_profdata, rfs, run, rustc};
|
||||
|
||||
fn main() {
|
||||
// We don't compile `opaque` with either optimizations or instrumentation.
|
||||
rustc().input("opaque.rs").run();
|
||||
// Compile the test program with instrumentation
|
||||
rfs::create_dir("prof_data_dir");
|
||||
rustc().input("interesting.rs").profile_generate("prof_data_dir").opt().codegen_units(1).run();
|
||||
rustc().input("main.rs").profile_generate("prof_data_dir").opt().run();
|
||||
// The argument below generates to the expected branch weights
|
||||
run("main");
|
||||
llvm_profdata().merge().output("prof_data_dir/merged.profdata").input("prof_data_dir").run();
|
||||
rustc()
|
||||
.input("interesting.rs")
|
||||
.profile_use("prof_data_dir/merged.profdata")
|
||||
.opt()
|
||||
.codegen_units(1)
|
||||
.emit("llvm-ir")
|
||||
.run();
|
||||
llvm_filecheck().patterns("filecheck-patterns.txt").stdin(rfs::read("interesting.ll")).run();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user