[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