summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2016-04-20 13:01:37 +0000
committerTeresa Johnson <tejohnson@google.com>2016-04-20 13:01:37 +0000
commitd3ded4a4413997c6fb7c6461e37a1bf327b4a78e (patch)
treeda116d53fe32758aa97090572ae03d4cc40a5523
parent6b2362619284d0e68b6d7a8ab93dc397c35a6ba0 (diff)
downloadbcm5719-llvm-d3ded4a4413997c6fb7c6461e37a1bf327b4a78e.tar.gz
bcm5719-llvm-d3ded4a4413997c6fb7c6461e37a1bf327b4a78e.zip
[gold-plugin] Disable name for values other than GlobalValue
Summary: Applies Mehdi's optimization (r263086) to disable value names other than for GlobalValues to LTO/ThinLTO performed via the gold-plugin, in the same manner as it is applied in libLTO. Reviewers: rafael, joker-eph Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D19269 llvm-svn: 266871
-rw-r--r--llvm/test/tools/gold/X86/strip_names.ll35
-rw-r--r--llvm/tools/gold/gold-plugin.cpp6
2 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/tools/gold/X86/strip_names.ll b/llvm/test/tools/gold/X86/strip_names.ll
new file mode 100644
index 00000000000..cd1d9f82444
--- /dev/null
+++ b/llvm/test/tools/gold/X86/strip_names.ll
@@ -0,0 +1,35 @@
+; RUN: llvm-as %s -o %t.o
+
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: --plugin-opt=emit-llvm \
+; RUN: -shared %t.o -o %t2.o
+; RUN: llvm-dis %t2.o -o - | FileCheck %s
+
+; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \
+; RUN: --plugin-opt=emit-llvm \
+; RUN: --plugin-opt=discard-value-names \
+; RUN: -shared %t.o -o %t2.o
+; RUN: llvm-dis %t2.o -o - | FileCheck ---check-prefix=NONAME %s
+
+; CHECK: @GlobalValueName
+; CHECK: @foo(i32 %in)
+; CHECK: somelabel:
+; CHECK: %GV = load i32, i32* @GlobalValueName
+; CHECK: %add = add i32 %in, %GV
+; CHECK: ret i32 %add
+
+; NONAME: @GlobalValueName
+; NONAME: @foo(i32)
+; NONAME-NOT: somelabel:
+; NONAME: %2 = load i32, i32* @GlobalValueName
+; NONAME: %3 = add i32 %0, %2
+; NONAME: ret i32 %3
+
+@GlobalValueName = global i32 0
+
+define i32 @foo(i32 %in) {
+somelabel:
+ %GV = load i32, i32* @GlobalValueName
+ %add = add i32 %in, %GV
+ ret i32 %add
+}
diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp
index 1c78d2fc745..d32ad76eb2d 100644
--- a/llvm/tools/gold/gold-plugin.cpp
+++ b/llvm/tools/gold/gold-plugin.cpp
@@ -167,8 +167,10 @@ namespace options {
static unsigned Parallelism = 0;
#ifdef NDEBUG
static bool DisableVerify = true;
+ static bool DiscardValueNames = true;
#else
static bool DisableVerify = false;
+ static bool DiscardValueNames = false;
#endif
static std::string obj_path;
static std::string extra_library_path;
@@ -225,6 +227,8 @@ namespace options {
message(LDPL_FATAL, "Invalid parallelism level: %s", opt_ + 5);
} else if (opt == "disable-verify") {
DisableVerify = true;
+ } else if (opt == "discard-value-names") {
+ DiscardValueNames = true;
} else {
// Save this option to pass to the code generator.
// ParseCommandLineOptions() expects argv[0] to be program name. Lazily
@@ -1114,6 +1118,7 @@ static void thinLTOBackendTask(claimed_file &F, const void *View,
raw_fd_ostream *OS, unsigned TaskID) {
// Need to use a separate context for each task
LLVMContext Context;
+ Context.setDiscardValueNames(options::DiscardValueNames);
Context.enableDebugTypeODRUniquing(); // Merge debug info types.
Context.setDiagnosticHandler(diagnosticHandlerForContext, nullptr, true);
@@ -1236,6 +1241,7 @@ static ld_plugin_status allSymbolsReadHook(raw_fd_ostream *ApiFile) {
}
LLVMContext Context;
+ Context.setDiscardValueNames(options::DiscardValueNames);
Context.enableDebugTypeODRUniquing(); // Merge debug info types.
Context.setDiagnosticHandler(diagnosticHandlerForContext, nullptr, true);
OpenPOWER on IntegriCloud