]> granicus.if.org Git - clang/commitdiff
[MachineOutliner] Outline from linkonceodrs by default in LTO when -moutline is passed
authorJessica Paquette <jpaquette@apple.com>
Mon, 25 Jun 2018 17:36:05 +0000 (17:36 +0000)
committerJessica Paquette <jpaquette@apple.com>
Mon, 25 Jun 2018 17:36:05 +0000 (17:36 +0000)
Pass -enable-linkonceodr-outlining by default when LTO is enabled.

The outliner shouldn't compete with any sort of linker deduplication
on linkonceodr functions when LTO is enabled. Therefore, this behaviour
should be the default.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@335504 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/Clang.cpp
test/Driver/aarch64-outliner.c

index 248c460aa0e58e34de5e86b640731ccb3e1fc479..5cb37967235b39315cd8022648abbc431c19e50e 100644 (file)
@@ -1482,6 +1482,14 @@ void Clang::AddAArch64TargetArgs(const ArgList &Args,
     if (A->getOption().matches(options::OPT_moutline)) {
       CmdArgs.push_back("-mllvm");
       CmdArgs.push_back("-enable-machine-outliner");
+
+      // The outliner shouldn't compete with linkers that dedupe linkonceodr
+      // functions in LTO. Enable that behaviour by default when compiling with
+      // LTO.
+      if (getToolChain().getDriver().isUsingLTO()) {
+        CmdArgs.push_back("-mllvm");
+        CmdArgs.push_back("-enable-linkonceodr-outlining");
+      }
     }
   }
 }
index 311ee59901397312646416cbad01e809a0fc023a..dd2ae2a66c75c20ead635267b1241fbf2432ea24 100644 (file)
@@ -3,3 +3,7 @@
 // ON: "-mllvm" "-enable-machine-outliner"
 // RUN: %clang -target aarch64 -moutline -mno-outline -S %s -### 2>&1 | FileCheck %s -check-prefix=OFF
 // OFF-NOT: "-mllvm" "-enable-machine-outliner"
+// RUN: %clang -target aarch64 -moutline -flto=thin -S %s -### 2>&1 | FileCheck %s -check-prefix=FLTO
+// FLTO: "-mllvm" "-enable-linkonceodr-outlining"
+// RUN: %clang -target aarch64 -moutline -flto=full -S %s -### 2>&1 | FileCheck %s -check-prefix=TLTO
+// TLTO: "-mllvm" "-enable-linkonceodr-outlining"