[llvm] r277114 - [EarlyCSE] Correctly handle simplified, but live, instructions

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 29 10:51:58 PDT 2016


Yes.

On Friday, July 29, 2016, Hans Wennborg <hans at chromium.org> wrote:

> Should we merge this to 3.9?
>
> Thanks,
> Hans
>
> On Thu, Jul 28, 2016 at 10:39 PM, David Majnemer via llvm-commits
> <llvm-commits at lists.llvm.org <javascript:;>> wrote:
> > Author: majnemer
> > Date: Fri Jul 29 00:39:21 2016
> > New Revision: 277114
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=277114&view=rev
> > Log:
> > [EarlyCSE] Correctly handle simplified, but live, instructions
> >
> > Some instructions may have their uses replaced with a symbolic constant.
> > However, the instruction may still have side effects which percludes it
> > from being removed from the function.  EarlyCSE treated such an
> > instruction as if it were removed, resulting in PR28763.
> >
> > Modified:
> >     llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp
> >     llvm/trunk/test/Transforms/EarlyCSE/basic.ll
> >
> > Modified: llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=277114&r1=277113&r2=277114&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp (original)
> > +++ llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp Fri Jul 29 00:39:21
> 2016
> > @@ -582,6 +582,7 @@ bool EarlyCSE::processNode(DomTreeNode *
> >      // its simpler value.
> >      if (Value *V = SimplifyInstruction(Inst, DL, &TLI, &DT, &AC)) {
> >        DEBUG(dbgs() << "EarlyCSE Simplify: " << *Inst << "  to: " << *V
> << '\n');
> > +      bool Killed = false;
> >        if (!Inst->use_empty()) {
> >          Inst->replaceAllUsesWith(V);
> >          Changed = true;
> > @@ -589,11 +590,12 @@ bool EarlyCSE::processNode(DomTreeNode *
> >        if (isInstructionTriviallyDead(Inst, &TLI)) {
> >          Inst->eraseFromParent();
> >          Changed = true;
> > +        Killed = true;
> >        }
> > -      if (Changed) {
> > +      if (Changed)
> >          ++NumSimplify;
> > +      if (Killed)
> >          continue;
> > -      }
> >      }
> >
> >      // If this is a simple instruction that we can value number,
> process it.
> >
> > Modified: llvm/trunk/test/Transforms/EarlyCSE/basic.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/EarlyCSE/basic.ll?rev=277114&r1=277113&r2=277114&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/Transforms/EarlyCSE/basic.ll (original)
> > +++ llvm/trunk/test/Transforms/EarlyCSE/basic.ll Fri Jul 29 00:39:21 2016
> > @@ -276,3 +276,17 @@ define void @dse_neg2(i32 *%P) {
> >    ret void
> >  }
> >
> > + at c = external global i32, align 4
> > +declare i32 @reads_c(i32 returned)
> > +define void @pr28763() {
> > +entry:
> > +; CHECK-LABEL: @pr28763(
> > +; CHECK: store i32 0, i32* @c, align 4
> > +; CHECK: call i32 @reads_c(i32 0)
> > +; CHECK: store i32 2, i32* @c, align 4
> > +  %load = load i32, i32* @c, align 4
> > +  store i32 0, i32* @c, align 4
> > +  %call = call i32 @reads_c(i32 0)
> > +  store i32 2, i32* @c, align 4
> > +  ret void
> > +}
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org <javascript:;>
> > 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/20160729/4c1c34fd/attachment.html>


More information about the llvm-commits mailing list