-fsplit-machine-functions is an optimization in codegen phase. when -flto is use, clang generate IR bitcode in .o files, and linker will call into these codegen optimization passes. Current clang driver doesn't pass this option to linker when both -fsplit-machine-functions and -flto are used, so the optimization is silently ignored. My fix generates linker option -plugin-opt=-split-machine-functions for this case. It allows the linker to pass "split-machine-functions" to code generator to turn on that optimization. It works for both gold and lld. Reviewed By: hoy, wenlei Differential Revision: https://reviews.llvm.org/D121969
13 lines
884 B
C
13 lines
884 B
C
// Test -fsplit-machine-functions option pass-through with lto
|
|
// RUN: %clang -### -target x86_64-unknown-linux -flto -fsplit-machine-functions %s 2>&1 | FileCheck %s -check-prefix=CHECK-PASS
|
|
|
|
// Test no pass-through to ld without lto
|
|
// RUN: %clang -### -target x86_64-unknown-linux -fsplit-machine-functions %s 2>&1 | FileCheck %s -check-prefix=CHECK-NOPASS
|
|
|
|
// Test the mix of -fsplit-machine-functions and -fno-split-machine-functions
|
|
// RUN: %clang -### -target x86_64-unknown-linux -flto -fsplit-machine-functions -fno-split-machine-functions %s 2>&1 | FileCheck %s -check-prefix=CHECK-NOPASS
|
|
// RUN: %clang -### -target x86_64-unknown-linux -flto -fno-split-machine-functions -fsplit-machine-functions %s 2>&1 | FileCheck %s -check-prefix=CHECK-PASS
|
|
|
|
// CHECK-PASS: "-plugin-opt=-split-machine-functions"
|
|
// CHECK-NOPASS-NOT: "-plugin-opt=-split-machine-functions"
|