[llvm] r270135 - [InstCombine] Avoid combining the bitcast of a var that is used as both address and result of load instructions

Eric Christopher via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 28 20:16:13 PDT 2016


Hi Carrot,

I've reverted this and the previous patch here:

Committing to https://llvm.org/svn/llvm-project/llvm/trunk ...
D test/Transforms/InstCombine/pr25342.ll
D test/Transforms/InstCombine/pr27703.ll
M lib/Transforms/InstCombine/InstCombineCasts.cpp
M lib/Transforms/InstCombine/InstCombineInternal.h
Committed r274094

as was discussed in http://reviews.llvm.org/D20847.

Thanks1

-eric

On Thu, May 19, 2016 at 2:13 PM Guozhi Wei via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: carrot
> Date: Thu May 19 16:07:01 2016
> New Revision: 270135
>
> URL: http://llvm.org/viewvc/llvm-project?rev=270135&view=rev
> Log:
> [InstCombine] Avoid combining the bitcast of a var that is used as both
> address and result of load instructions
>
> This patch fixes https://llvm.org/bugs/show_bug.cgi?id=27703.
>
> If there is a sequence of one or more load instructions, each loaded value
> is used as address of later load instruction, bitcast is necessary to
> change the value type, don't optimize it.
>
>
> Added:
>     llvm/trunk/test/Transforms/InstCombine/pr27703.ll
> Modified:
>     llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp?rev=270135&r1=270134&r2=270135&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp Thu May 19
> 16:07:01 2016
> @@ -1820,6 +1820,13 @@ Instruction *InstCombiner::optimizeBitCa
>
>        auto *LI = dyn_cast<LoadInst>(IncValue);
>        if (LI) {
> +        // If there is a sequence of one or more load instructions, each
> loaded
> +        // value is used as address of later load instruction, bitcast is
> +        // necessary to change the value type, don't optimize it. For
> +        // simplicity we give up if the load address comes from another
> load.
> +        Value *Addr = LI->getOperand(0);
> +        if (Addr == &CI || isa<LoadInst>(Addr))
> +          return nullptr;
>          if (LI->hasOneUse() && LI->isSimple())
>            continue;
>          // If a LoadInst has more than one use, changing the type of
> loaded
>
> Added: llvm/trunk/test/Transforms/InstCombine/pr27703.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr27703.ll?rev=270135&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/pr27703.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/pr27703.ll Thu May 19 16:07:01
> 2016
> @@ -0,0 +1,20 @@
> +; RUN: opt < %s -instcombine -S | FileCheck %s
> +
> +define void @mem() {
> +bb:
> +  br label %bb6
> +
> +bb6:
> +  %.0 = phi i8** [ undef, %bb ], [ %t2, %bb6 ]
> +  %tmp = load i8*, i8** %.0, align 8
> +  %bc = bitcast i8* %tmp to i8**
> +  %t1 = load i8*, i8** %bc, align 8
> +  %t2 = bitcast i8* %t1 to i8**
> +  br label %bb6
> +
> +bb206:
> +  ret void
> +; CHECK: phi
> +; CHECK: bitcast
> +; CHECK: load
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> 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/20160629/f9635bf9/attachment.html>


More information about the llvm-commits mailing list