[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