From: Duncan P. N. Exon Smith Date: Tue, 14 Apr 2015 18:30:13 +0000 (+0000) Subject: IR: Change clang to set -preserve-bc-uselistorder X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae0b51468670976611006a1ab4b945d45b46d0c2;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234920 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 1e34d7f403..2d2526c4bd 100644 --- a/lib/Driver/Tools.cpp +++ b/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/test/Driver/preserve-uselistorder.c b/test/Driver/preserve-uselistorder.c new file mode 100644 index 0000000000..ac022300f2 --- /dev/null +++ b/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/test/Driver/save-temps.c b/test/Driver/save-temps.c index 438d748932..0b1a17f34f 100644 --- a/test/Driver/save-temps.c +++ b/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"