[PATCH] Use right address space size in InstCombineCompares

Eli Friedman eli.friedman at gmail.com
Mon Sep 30 13:48:20 PDT 2013


LGTM.

-Eli


On Fri, Sep 27, 2013 at 3:48 PM, Matt Arsenault
<Matthew.Arsenault at amd.com>wrote:

> The test's output doesn't change, but this ensures this is actually hit
> with a different address space.
>
> http://llvm-reviews.chandlerc.com/D1778
>
> Files:
>   lib/Transforms/InstCombine/InstCombineCompares.cpp
>   test/Transforms/InstCombine/load-cmp.ll
>
> Index: lib/Transforms/InstCombine/InstCombineCompares.cpp
> ===================================================================
> --- lib/Transforms/InstCombine/InstCombineCompares.cpp
> +++ lib/Transforms/InstCombine/InstCombineCompares.cpp
> @@ -394,9 +394,12 @@
>    // If the index is larger than the pointer size of the target, truncate
> the
>    // index down like the GEP would do implicitly.  We don't have to do
> this for
>    // an inbounds GEP because the index can't be out of range.
> -  if (!GEP->isInBounds() &&
> -      Idx->getType()->getPrimitiveSizeInBits() >
> TD->getPointerSizeInBits())
> -    Idx = Builder->CreateTrunc(Idx, TD->getIntPtrType(Idx->getContext()));
> +  if (!GEP->isInBounds()) {
> +    Type *IntPtrTy = TD->getIntPtrType(GEP->getType());
> +    unsigned PtrSize = IntPtrTy->getIntegerBitWidth();
> +    if (Idx->getType()->getPrimitiveSizeInBits() > PtrSize)
> +      Idx = Builder->CreateTrunc(Idx, IntPtrTy);
> +  }
>
>    // If the comparison is only true for one or two elements, emit direct
>    // comparisons.
> Index: test/Transforms/InstCombine/load-cmp.ll
> ===================================================================
> --- test/Transforms/InstCombine/load-cmp.ll
> +++ test/Transforms/InstCombine/load-cmp.ll
> @@ -1,8 +1,12 @@
>  ; RUN: opt -instcombine -S < %s | FileCheck -check-prefix=NODL %s
> -; RUN: opt -instcombine -S -default-data-layout="p:32:32:32-n8:16:32:64"
> < %s | FileCheck -check-prefix=P32 %s
> +; RUN: opt -instcombine -S
> -default-data-layout="p:32:32:32-p1:16:16:16-n8:16:32:64" < %s | FileCheck
> -check-prefix=P32 %s
>
>  @G16 = internal constant [10 x i16] [i16 35, i16 82, i16 69, i16 81, i16
> 85,
>                                       i16 73, i16 82, i16 69, i16 68, i16
> 0]
> +
> + at G16_as1 = internal addrspace(1) constant [10 x i16] [i16 35, i16 82, i16
> 69, i16 81, i16 85,
> +                                                      i16 73, i16 82, i16
> 69, i16 68, i16 0]
> +
>  @GD = internal constant [6 x double]
>     [double -10.0, double 1.0, double 4.0, double 2.0, double -20.0,
> double -40.0]
>
> @@ -56,6 +60,18 @@
>  ; P32-NEXT: ret i1 %R
>  }
>
> +define i1 @test1_noinbounds_as1(i32 %x) {
> +  %p = getelementptr [10 x i16] addrspace(1)* @G16_as1, i16 0, i32 %x
> +  %q = load i16 addrspace(1)* %p
> +  %r = icmp eq i16 %q, 0
> +  ret i1 %r
> +
> +; P32-LABEL: @test1_noinbounds_as1(
> +; P32-NEXT: trunc i32 %x to i16
> +; P32-NEXT: %r = icmp eq i16 %1, 9
> +; P32-NEXT: ret i1 %r
> +}
> +
>  define i1 @test2(i32 %X) {
>    %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
>    %Q = load i16* %P
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130930/0ecdb824/attachment.html>


More information about the llvm-commits mailing list