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

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 1 13:38:05 PDT 2016


Thanks! r277382.

On Fri, Jul 29, 2016 at 10:51 AM, David Majnemer
<david.majnemer at gmail.com> wrote:
> 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> 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
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list