[llvm] r300200 - Re-apply "[GVNHoist] Move GVNHoist to function simplification part of pipeline."

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Sun Apr 23 09:45:26 PDT 2017


If this does turn out to be the problematic commit, I'll ask that we do 
not re-enable GVNHoist without some llvm-dev discussion of what we've 
done to test it. I've literally lost track of the number of times this 
has been enabled and disabled by now.  There's clearly a problem here; 
it's time we discuss it and what needs done to address it going forward.

Philip

On 04/21/2017 08:24 PM, Chandler Carruth via llvm-commits wrote:
> FYI and just as a heads up, we're seeing buggy hoisting leading to 
> null pointers being accessed, and this commit is in the range and 
> seems very likely to be responsible. We're working on getting this 
> isolated enough to be sure, but wanted to mention it in case anyone 
> else is similarly looking at issues after this commit.
>
> On Thu, Apr 13, 2017 at 8:49 AM Geoff Berry via llvm-commits 
> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>
>     Author: gberry
>     Date: Thu Apr 13 10:36:25 2017
>     New Revision: 300200
>
>     URL: http://llvm.org/viewvc/llvm-project?rev=300200&view=rev
>     Log:
>     Re-apply "[GVNHoist] Move GVNHoist to function simplification part
>     of pipeline."
>
>     This reverts commit r296872 now that PR32153 has been fixed.
>
>     Added:
>         llvm/trunk/test/Transforms/GVNHoist/hoist-inline.ll
>     Modified:
>         llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
>
>     Modified: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=300200&r1=300199&r2=300200&view=diff
>     ==============================================================================
>     --- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp (original)
>     +++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp Thu Apr
>     13 10:36:25 2017
>     @@ -245,8 +245,6 @@ void PassManagerBuilder::populateFunctio
>        FPM.add(createCFGSimplificationPass());
>        FPM.add(createSROAPass());
>        FPM.add(createEarlyCSEPass());
>     -  if (EnableGVNHoist)
>     -    FPM.add(createGVNHoistPass());
>        FPM.add(createLowerExpectIntrinsicPass());
>      }
>
>     @@ -291,6 +289,8 @@ void PassManagerBuilder::addFunctionSimp
>        // 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.
>
>     Added: llvm/trunk/test/Transforms/GVNHoist/hoist-inline.ll
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVNHoist/hoist-inline.ll?rev=300200&view=auto
>     ==============================================================================
>     --- llvm/trunk/test/Transforms/GVNHoist/hoist-inline.ll (added)
>     +++ llvm/trunk/test/Transforms/GVNHoist/hoist-inline.ll Thu Apr 13
>     10:36:25 2017
>     @@ -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:
>     +
>     + at A = external global i32
>     + at B = external global i32
>     + at 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
>     +}
>     +
>
>
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170423/00755fd1/attachment.html>


More information about the llvm-commits mailing list