[llvm] r293629 - [InstCombine] Make sure that LHS and RHS have the same type in

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 31 10:21:41 PST 2017


David, it was suggested this be merged to 4.0. What do you think?

Thanks,
Hans

On Tue, Jan 31, 2017 at 6:04 AM, Silviu Baranga via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: sbaranga
> Date: Tue Jan 31 08:04:15 2017
> New Revision: 293629
>
> URL: http://llvm.org/viewvc/llvm-project?rev=293629&view=rev
> Log:
> [InstCombine] Make sure that LHS and RHS have the same type in
> transformToIndexedCompare
>
> If they don't have the same type, the size of the constant
> index would need to be adjusted (and this wouldn't be always
> possible).
>
> Alternatively we could try the analysis with the initial
> RHS value, which would guarantee that the two sides have
> the same type. However it is unlikely that in practice this
> would pass our transformation requirements.
>
> Fixes PR31808 (https://llvm.org/bugs/show_bug.cgi?id=31808).
>
>
> Modified:
>     llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
>     llvm/trunk/test/Transforms/InstCombine/indexed-gep-compares.ll
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp?rev=293629&r1=293628&r2=293629&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCompares.cpp Tue Jan 31 08:04:15 2017
> @@ -884,6 +884,10 @@ static Instruction *transformToIndexedCo
>    if (!GEPLHS->hasAllConstantIndices())
>      return nullptr;
>
> +  // Make sure the pointers have the same type.
> +  if (GEPLHS->getType() != RHS->getType())
> +    return nullptr;
> +
>    Value *PtrBase, *Index;
>    std::tie(PtrBase, Index) = getAsConstantIndexedAddress(GEPLHS, DL);
>
>
> Modified: llvm/trunk/test/Transforms/InstCombine/indexed-gep-compares.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/indexed-gep-compares.ll?rev=293629&r1=293628&r2=293629&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/indexed-gep-compares.ll (original)
> +++ llvm/trunk/test/Transforms/InstCombine/indexed-gep-compares.ll Tue Jan 31 08:04:15 2017
> @@ -188,3 +188,20 @@ bb10:
>
>
>  declare i32 @__gxx_personality_v0(...)
> +
> +define i1 @test8(i64* %in, i64 %offset) {
> +entry:
> +
> + %ld = load i64, i64* %in, align 8
> + %casti8 = inttoptr i64 %ld to i8*
> + %gepi8 = getelementptr inbounds i8, i8* %casti8, i64 %offset
> + %cast = bitcast i8* %gepi8 to i32**
> + %ptrcast = inttoptr i64 %ld to i32**
> + %gepi32 = getelementptr inbounds i32*, i32** %ptrcast, i64 1
> + %cmp = icmp eq i32** %gepi32, %cast
> + ret i1 %cmp
> +
> +
> +; CHECK-LABEL: @test8(
> +; CHECK-NOT: icmp eq i32 %{{[0-9A-Za-z.]+}}, 1
> +}
>
>
> _______________________________________________
> 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