diff options
author | Geoff Berry <gberry@codeaurora.org> | 2017-03-02 16:16:47 +0000 |
---|---|---|
committer | Geoff Berry <gberry@codeaurora.org> | 2017-03-02 16:16:47 +0000 |
commit | 484d7565832d54d3cb23aedb2789d6973a1ae0c8 (patch) | |
tree | 7b7f7c0194e078518183263091e54b24c8a5cc27 | |
parent | b7f6fe46587a5f9b58b521e298f2e756a3cc6c91 (diff) | |
download | bcm5719-llvm-484d7565832d54d3cb23aedb2789d6973a1ae0c8.tar.gz bcm5719-llvm-484d7565832d54d3cb23aedb2789d6973a1ae0c8.zip |
Re-apply "[GVNHoist] Move GVNHoist to function simplification part of pipeline."
This re-applies r289696, which caused TSan perf regression, which has
since been addressed in separate changes (see PR for details).
See PR31382.
llvm-svn: 296759
-rw-r--r-- | llvm/lib/Transforms/IPO/PassManagerBuilder.cpp | 4 | ||||
-rw-r--r-- | llvm/test/Transforms/GVNHoist/hoist-inline.ll | 38 |
2 files changed, 40 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp index 59605d58084..5938d4499c2 100644 --- a/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -244,8 +244,6 @@ void PassManagerBuilder::populateFunctionPassManager( FPM.add(createCFGSimplificationPass()); FPM.add(createSROAPass()); FPM.add(createEarlyCSEPass()); - if(EnableGVNHoist) - FPM.add(createGVNHoistPass()); FPM.add(createLowerExpectIntrinsicPass()); } @@ -290,6 +288,8 @@ void PassManagerBuilder::addFunctionSimplificationPasses( // Break up aggregate allocas, using SSAUpdater. MPM.add(createSROAPass()); MPM.add(createEarlyCSEPass()); // Catch trivial redundancies + if(EnableGVNHoist) + MPM.add(createGVNHoistPass()); // Speculative execution if the target has divergent branches; otherwise nop. MPM.add(createSpeculativeExecutionIfHasBranchDivergencePass()); MPM.add(createJumpThreadingPass()); // Thread jumps. diff --git a/llvm/test/Transforms/GVNHoist/hoist-inline.ll b/llvm/test/Transforms/GVNHoist/hoist-inline.ll new file mode 100644 index 00000000000..7d761486ab1 --- /dev/null +++ b/llvm/test/Transforms/GVNHoist/hoist-inline.ll @@ -0,0 +1,38 @@ +; RUN: opt -S -O2 < %s | FileCheck %s + +; Check that the inlined loads are hoisted. +; CHECK-LABEL: define i32 @fun( +; CHECK-LABEL: entry: +; CHECK: load i32, i32* @A +; CHECK: if.then: + +@A = external global i32 +@B = external global i32 +@C = external global i32 + +define i32 @loadA() { + %a = load i32, i32* @A + ret i32 %a +} + +define i32 @fun(i1 %c) { +entry: + br i1 %c, label %if.then, label %if.else + +if.then: + store i32 1, i32* @B + %call1 = call i32 @loadA() + store i32 2, i32* @C + br label %if.endif + +if.else: + store i32 2, i32* @C + %call2 = call i32 @loadA() + store i32 1, i32* @B + br label %if.endif + +if.endif: + %ret = phi i32 [ %call1, %if.then ], [ %call2, %if.else ] + ret i32 %ret +} + |