summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-04-14 18:30:13 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-04-14 18:30:13 +0000
commitd863f6f250e0cd459abb3a48ed9227634ed9774b (patch)
tree3280f80d2bb9fba2187e399c0fcb1039cac78f10
parent8d2aff07dacbd19f270d15e4f24d6525190334be (diff)
downloadbcm5719-llvm-d863f6f250e0cd459abb3a48ed9227634ed9774b.tar.gz
bcm5719-llvm-d863f6f250e0cd459abb3a48ed9227634ed9774b.zip
IR: Change clang to set -preserve-bc-uselistorder
Change `clang` to set `-preserve-bc-uselistorder` for the driver options `-emit-llvm` and `-save-temps`. The former is useful for reproducing results from `clang` in `opt` or `llc`, while the latter prevents `-save-temps` from affecting the output. This is part of PR5680. `-preserve-bc-uselistorder=true` is currently on by default, but a follow-up commit in LLVM will reverse it. llvm-svn: 234920
-rw-r--r--clang/lib/Driver/Tools.cpp9
-rw-r--r--clang/test/Driver/preserve-uselistorder.c9
-rw-r--r--clang/test/Driver/save-temps.c2
3 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 1e34d7f403a..2d2526c4bdf 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -2678,6 +2678,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
assert(JA.getType() == types::TY_PP_Asm &&
"Unexpected output type!");
}
+
+ // Preserve use-list order by default when emitting bitcode, so that
+ // loading the bitcode up in 'opt' or 'llc' and running passes gives the
+ // same result as running passes here. For LTO, we don't need to preserve
+ // the use-list order, since serialization to bitcode is part of the flow.
+ if (JA.getType() == types::TY_LLVM_BC) {
+ CmdArgs.push_back("-mllvm");
+ CmdArgs.push_back("-preserve-bc-uselistorder");
+ }
}
// We normally speed up the clang process a bit by skipping destructors at
diff --git a/clang/test/Driver/preserve-uselistorder.c b/clang/test/Driver/preserve-uselistorder.c
new file mode 100644
index 00000000000..ac022300f2e
--- /dev/null
+++ b/clang/test/Driver/preserve-uselistorder.c
@@ -0,0 +1,9 @@
+// RUN: %clang -target x86_64-apple-darwin -emit-llvm -arch x86_64 %s -### 2>&1 \
+// RUN: | FileCheck %s
+// CHECK: "-emit-llvm-bc"
+// CHECK: "-preserve-bc-uselistorder"
+
+// RUN: %clang -target x86_64-apple-darwin -flto -arch x86_64 %s -### 2>&1 \
+// RUN: | FileCheck -check-prefix=LTO %s
+// LTO: "-emit-llvm-bc"
+// LTO-NOT: "-preserve-bc-uselistorder"
diff --git a/clang/test/Driver/save-temps.c b/clang/test/Driver/save-temps.c
index 438d748932b..0b1a17f34f5 100644
--- a/clang/test/Driver/save-temps.c
+++ b/clang/test/Driver/save-temps.c
@@ -1,6 +1,7 @@
// RUN: %clang -target x86_64-apple-darwin -save-temps -arch x86_64 %s -### 2>&1 \
// RUN: | FileCheck %s
// CHECK: "-o" "save-temps.i"
+// CHECK: "-preserve-bc-uselistorder"
// CHECK: "-disable-llvm-optzns"
// CHECK: "-o" "save-temps.bc"
// CHECK: "-o" "save-temps.s"
@@ -12,6 +13,7 @@
// RUN: %clang -target x86_64-apple-darwin -save-temps=cwd -arch x86_64 %s -### 2>&1 \
// RUN: | FileCheck %s -check-prefix=CWD
// CWD: "-o" "save-temps.i"
+// CWD: "-preserve-bc-uselistorder"
// CWD: "-disable-llvm-optzns"
// CWD: "-o" "save-temps.bc"
// CWD: "-o" "save-temps.s"
OpenPOWER on IntegriCloud