mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 15:23:46 +00:00
36 lines
1.4 KiB
Makefile
36 lines
1.4 KiB
Makefile
# needs-profiler-support
|
|
# ignore-windows-gnu
|
|
# ignore-cross-compile
|
|
|
|
# FIXME(mati865): MinGW GCC miscompiles compiler-rt profiling library but with Clang it works
|
|
# properly. Since we only have GCC on the CI ignore the test for now.
|
|
|
|
include ../tools.mk
|
|
|
|
# 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.
|
|
$(RUSTC) $(COMMON_FLAGS) opaque.rs || exit 1
|
|
# Compile the test program with instrumentation
|
|
mkdir -p "$(TMPDIR)/prof_data_dir" || exit 1
|
|
$(RUSTC) $(COMMON_FLAGS) interesting.rs \
|
|
-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" || exit 1
|
|
$(RUSTC) $(COMMON_FLAGS) interesting.rs \
|
|
-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
|