[llvm] r277114 - [EarlyCSE] Correctly handle simplified, but live, instructions
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 29 10:13:09 PDT 2016
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