[PATCH] Driver: use new gold/ld64 plugin flags with LTO-requiring passes.
Peter Collingbourne
peter at pcc.me.uk
Tue Mar 17 15:41:00 PDT 2015
Hi rafael,
http://reviews.llvm.org/D8402
Files:
lib/Driver/Tools.cpp
test/Driver/fsanitize.c
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1560,6 +1560,15 @@
std::string CPU = getCPUName(Args, ToolChain.getTriple());
if (!CPU.empty())
CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=mcpu=") + CPU));
+
+ // If a sanitizer needs LTO, turn on the relevant passes.
+ if (ToolChain.getSanitizerArgs().needsLTO()) {
+ CmdArgs.push_back("-plugin-opt=lowerbitsets");
+
+ // Disable most optimizations unless LTO was specifically requested.
+ if (!Args.hasFlag(options::OPT_flto, options::OPT_fno_lto, false))
+ CmdArgs.push_back("-plugin-opt=disable-opt");
+ }
}
static void getX86TargetFeatures(const Driver & D,
@@ -5850,6 +5859,18 @@
CmdArgs.push_back(TmpPath);
}
+ // If a sanitizer needs LTO, turn on the relevant passes.
+ if (getToolChain().getSanitizerArgs().needsLTO()) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-lowerbitsets");
+
+ // Disable most optimizations unless LTO was specifically requested.
+ if (!Args.hasFlag(options::OPT_flto, options::OPT_fno_lto, false)) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-disable-opt");
+ }
+ }
+
// Derived from the "link" spec.
Args.AddAllArgs(CmdArgs, options::OPT_static);
if (!Args.hasArg(options::OPT_static))
Index: test/Driver/fsanitize.c
===================================================================
--- test/Driver/fsanitize.c
+++ test/Driver/fsanitize.c
@@ -209,6 +209,15 @@
// CHECK-CFI-UCAST: -emit-llvm-bc{{.*}}-fsanitize=cfi-unrelated-cast
// CHECK-CFI-VPTR: -emit-llvm-bc{{.*}}-fsanitize=cfi-vptr
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=cfi %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-LINK-LINUX
+// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=cfi %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-LINK-DARWIN
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=cfi -flto %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-LINK-LINUX-LTO
+// RUN: %clang -target x86_64-apple-darwin10 -fsanitize=cfi -flto %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-LINK-DARWIN-LTO
+// CHECK-CFI-LINK-LINUX: "-plugin-opt=lowerbitsets" "-plugin-opt=disable-opt"
+// CHECK-CFI-LINK-DARWIN: "-mllvm" "-lowerbitsets" "-mllvm" "-disable-opt"
+// CHECK-CFI-LINK-LINUX-LTO-NOT: "-plugin-opt=disable-opt"
+// CHECK-CFI-LINK-DARWIN-LTO-NOT: "-mllvm" "-disable-opt"
+
// RUN: %clang_cl -fsanitize=address -c -MDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
// RUN: %clang_cl -fsanitize=address -c -MTd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
// RUN: %clang_cl -fsanitize=address -c -LDd -### -- %s 2>&1 | FileCheck %s -check-prefix=CHECK-ASAN-DEBUGRTL
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8402.22140.patch
Type: text/x-patch
Size: 2810 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150317/613629fe/attachment.bin>
More information about the cfe-commits
mailing list