[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