[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