[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