diff options
| author | bors <bors@rust-lang.org> | 2020-01-03 22:03:20 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-01-03 22:03:20 +0000 |
| commit | e845e691c988303ea54cb9de9639a8577b5a9d6b (patch) | |
| tree | a7da310c2ebd20fff955193d1890595fb549f4f1 | |
| parent | c5840f9d252c2f5cc16698dbf385a29c5de3ca07 (diff) | |
| parent | 971aa2bd6218fb6c843db965f7da70586865171d (diff) | |
| download | rust-e845e691c988303ea54cb9de9639a8577b5a9d6b.tar.gz rust-e845e691c988303ea54cb9de9639a8577b5a9d6b.zip | |
Auto merge of #67829 - michaelwoerister:try-to-fix-pgo-branch-weights-test, r=Mark-Simulacrum
Attempt to fix intermittent failures of pgo-branch-weights test. This PR tries to fix the intermittent failures of the pgo-branch-weights test (https://github.com/rust-lang/rust/issues/67746). The failing instances show no `!prof` annotations in LLVM IR. One possible cause is that the instrumented binary did not record anything. This is something I've occasionally seen happen for similarly small programs when using GNU ld as linker. The linker would not properly append the instruction counter sections, leading to most counters being dropped. This PR makes the test use the Gold linker instead. It also makes each command exit immediately on failure so we can pinpoint the failure source better, should there still be a problem. r? @Mark-Simulacrum
| -rw-r--r-- | src/test/run-make-fulldeps/pgo-branch-weights/Makefile | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/test/run-make-fulldeps/pgo-branch-weights/Makefile b/src/test/run-make-fulldeps/pgo-branch-weights/Makefile index edb4006313a..c13297b3a61 100644 --- a/src/test/run-make-fulldeps/pgo-branch-weights/Makefile +++ b/src/test/run-make-fulldeps/pgo-branch-weights/Makefile @@ -15,21 +15,29 @@ ifdef IS_MSVC COMMON_FLAGS=-Cpanic=abort endif +# For some very small programs GNU ld seems to not properly handle +# instrumentation sections correctly. Neither Gold nor LLD have that problem. +ifeq ($(UNAME),Linux) +ifneq (,$(findstring x86,$(TARGET))) +COMMON_FLAGS=-Clink-args=-fuse-ld=gold +endif +endif + + 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 + $(RUSTC) $(COMMON_FLAGS) opaque.rs || exit 1 # Compile the test program with instrumentation - mkdir -p "$(TMPDIR)"/prof_data_dir + mkdir -p "$(TMPDIR)/prof_data_dir" || exit 1 $(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 + -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O -Ccodegen-units=1 || exit 1 + $(RUSTC) $(COMMON_FLAGS) main.rs -Cprofile-generate="$(TMPDIR)/prof_data_dir" -O || exit 1 # The argument below generates to the expected branch weights $(call RUN,main aaaaaaaaaaaa2bbbbbbbbbbbb2bbbbbbbbbbbbbbbbcc) || exit 1 - "$(LLVM_BIN_DIR)"/llvm-profdata merge \ - -o "$(TMPDIR)"/prof_data_dir/merged.profdata \ - "$(TMPDIR)"/prof_data_dir + "$(LLVM_BIN_DIR)/llvm-profdata" merge \ + -o "$(TMPDIR)/prof_data_dir/merged.profdata" \ + "$(TMPDIR)/prof_data_dir" || exit 1 $(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 + -Cprofile-use="$(TMPDIR)/prof_data_dir/merged.profdata" -O \ + -Ccodegen-units=1 --emit=llvm-ir || exit 1 + cat "$(TMPDIR)/interesting.ll" | "$(LLVM_FILECHECK)" filecheck-patterns.txt |
