Stabilize linker-plugin based LTO.
This commit is contained in:
parent
a54b5c7a64
commit
04f425d2c3
13 changed files with 61 additions and 59 deletions
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
// no-prefer-dynamic
|
||||
// only-msvc
|
||||
// compile-flags: -Z cross-lang-lto
|
||||
// compile-flags: -C linker-plugin-lto
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
// no-prefer-dynamic
|
||||
// ignore-tidy-linelength
|
||||
// compile-flags: -C no-prepopulate-passes -C panic=abort -Z cross-lang-lto -Cpasses=name-anon-globals
|
||||
// compile-flags: -C no-prepopulate-passes -C panic=abort -C linker-plugin-lto -Cpasses=name-anon-globals
|
||||
|
||||
#![crate_type = "staticlib"]
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
all: cpp-executable rust-executable
|
||||
|
||||
cpp-executable:
|
||||
$(RUSTC) -Zcross-lang-lto=on -o $(TMPDIR)/librustlib-xlto.a -Copt-level=2 -Ccodegen-units=1 ./rustlib.rs
|
||||
$(RUSTC) -Clinker-plugin-lto=on -o $(TMPDIR)/librustlib-xlto.a -Copt-level=2 -Ccodegen-units=1 ./rustlib.rs
|
||||
$(CLANG) -flto=thin -fuse-ld=lld -L $(TMPDIR) -lrustlib-xlto -o $(TMPDIR)/cmain ./cmain.c -O3
|
||||
# Make sure we don't find a call instruction to the function we expect to
|
||||
# always be inlined.
|
||||
|
|
@ -20,6 +20,6 @@ cpp-executable:
|
|||
rust-executable:
|
||||
$(CLANG) ./clib.c -flto=thin -c -o $(TMPDIR)/clib.o -O2
|
||||
(cd $(TMPDIR); $(AR) crus ./libxyz.a ./clib.o)
|
||||
$(RUSTC) -Zcross-lang-lto=on -L$(TMPDIR) -Copt-level=2 -Clinker=$(CLANG) -Clink-arg=-fuse-ld=lld ./main.rs -o $(TMPDIR)/rsmain
|
||||
$(RUSTC) -Clinker-plugin-lto=on -L$(TMPDIR) -Copt-level=2 -Clinker=$(CLANG) -Clink-arg=-fuse-ld=lld ./main.rs -o $(TMPDIR)/rsmain
|
||||
llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -e "call.*c_never_inlined"
|
||||
llvm-objdump -d $(TMPDIR)/rsmain | $(CGREP) -v -e "call.*c_always_inlined"
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
ifndef IS_WINDOWS
|
||||
|
||||
# This test makes sure that we don't loose upstream object files when compiling
|
||||
# staticlibs with -Zcross-lang-lto
|
||||
# staticlibs with -C linker-plugin-lto
|
||||
|
||||
all: staticlib.rs upstream.rs
|
||||
$(RUSTC) upstream.rs -Z cross-lang-lto -Ccodegen-units=1
|
||||
$(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1
|
||||
|
||||
# Check No LTO
|
||||
$(RUSTC) staticlib.rs -Z cross-lang-lto -Ccodegen-units=1 -L. -o $(TMPDIR)/staticlib.a
|
||||
$(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -L. -o $(TMPDIR)/staticlib.a
|
||||
(cd $(TMPDIR); $(LD_LIB_PATH_ENVVAR)=$(REAL_LD_LIBRARY_PATH) llvm-ar x ./staticlib.a)
|
||||
# Make sure the upstream object file was included
|
||||
ls $(TMPDIR)/upstream.*.rcgu.o
|
||||
|
|
@ -20,8 +20,8 @@ all: staticlib.rs upstream.rs
|
|||
rm $(TMPDIR)/*
|
||||
|
||||
# Check ThinLTO
|
||||
$(RUSTC) upstream.rs -Z cross-lang-lto -Ccodegen-units=1 -Clto=thin
|
||||
$(RUSTC) staticlib.rs -Z cross-lang-lto -Ccodegen-units=1 -Clto=thin -L. -o $(TMPDIR)/staticlib.a
|
||||
$(RUSTC) upstream.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin
|
||||
$(RUSTC) staticlib.rs -C linker-plugin-lto -Ccodegen-units=1 -Clto=thin -L. -o $(TMPDIR)/staticlib.a
|
||||
(cd $(TMPDIR); $(LD_LIB_PATH_ENVVAR)=$(REAL_LD_LIBRARY_PATH) llvm-ar x ./staticlib.a)
|
||||
ls $(TMPDIR)/upstream.*.rcgu.o
|
||||
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@ ifndef IS_WINDOWS
|
|||
|
||||
# This test makes sure that the object files we generate are actually
|
||||
# LLVM bitcode files (as used by linker LTO plugins) when compiling with
|
||||
# -Z cross-lang-lto.
|
||||
# -Clinker-plugin-lto.
|
||||
|
||||
# this only succeeds for bitcode files
|
||||
ASSERT_IS_BITCODE_OBJ=($(LD_LIB_PATH_ENVVAR)=$(REAL_LD_LIBRARY_PATH) llvm-bcanalyzer $(1))
|
||||
EXTRACT_OBJS=(cd $(TMPDIR); rm -f ./*.o; $(LD_LIB_PATH_ENVVAR)=$(REAL_LD_LIBRARY_PATH) llvm-ar x $(1))
|
||||
|
||||
BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Z cross-lang-lto=on -Ccodegen-units=1
|
||||
BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Z cross-lang-lto=on -Ccodegen-units=1 --emit=obj
|
||||
BUILD_LIB=$(RUSTC) lib.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1
|
||||
BUILD_EXE=$(RUSTC) main.rs -Copt-level=2 -Clinker-plugin-lto -Ccodegen-units=1 --emit=obj
|
||||
|
||||
all: staticlib staticlib-fat-lto staticlib-thin-lto rlib exe cdylib rdylib
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue