From ad5b15379ea0b0f29be79d521a710928413448d7 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 30 Aug 2009 21:02:36 +0000 Subject: [PATCH] consolodate various GEP tests into getelementptr.ll using filecheck. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80514 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Transforms/InstCombine/getelementptr-2.ll | 21 ---- .../InstCombine/getelementptr-setcc.ll | 31 ----- .../InstCombine/getelementptr-seteq.ll | 13 --- test/Transforms/InstCombine/getelementptr.ll | 106 ++++++++++++++++++ .../InstCombine/getelementptr_cast.ll | 11 -- .../InstCombine/getelementptr_const.ll | 15 --- .../InstCombine/getelementptr_index.ll | 9 -- .../InstCombine/getelementptr_promote.ll | 58 ---------- 8 files changed, 106 insertions(+), 158 deletions(-) delete mode 100644 test/Transforms/InstCombine/getelementptr-2.ll delete mode 100644 test/Transforms/InstCombine/getelementptr-setcc.ll delete mode 100644 test/Transforms/InstCombine/getelementptr-seteq.ll delete mode 100644 test/Transforms/InstCombine/getelementptr_cast.ll delete mode 100644 test/Transforms/InstCombine/getelementptr_const.ll delete mode 100644 test/Transforms/InstCombine/getelementptr_index.ll delete mode 100644 test/Transforms/InstCombine/getelementptr_promote.ll diff --git a/test/Transforms/InstCombine/getelementptr-2.ll b/test/Transforms/InstCombine/getelementptr-2.ll deleted file mode 100644 index 4cffbcd4bcd..00000000000 --- a/test/Transforms/InstCombine/getelementptr-2.ll +++ /dev/null @@ -1,21 +0,0 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep load -; PR4748 -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" -target triple = "i386-apple-darwin9" - %struct.B = type { double } - %struct.A = type { %struct.B, i32, i32 } - -define i32 @_Z4funcv(%struct.A* %a) { -entry: - %g3 = getelementptr %struct.A* %a, i32 0, i32 1 - store i32 10, i32* %g3, align 4 - - %g4 = getelementptr %struct.A* %a, i32 0, i32 0 - - %new_a = bitcast %struct.B* %g4 to %struct.A* - - %g5 = getelementptr %struct.A* %new_a, i32 0, i32 1 - %a_a = load i32* %g5, align 4 - ret i32 %a_a -} - diff --git a/test/Transforms/InstCombine/getelementptr-setcc.ll b/test/Transforms/InstCombine/getelementptr-setcc.ll deleted file mode 100644 index c90390ac1e6..00000000000 --- a/test/Transforms/InstCombine/getelementptr-setcc.ll +++ /dev/null @@ -1,31 +0,0 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ -; RUN: not grep getelementptr - -define i1 @test1(i16* %P, i32 %I, i32 %J) { - %X = getelementptr inbounds i16* %P, i32 %I ; [#uses=1] - %Y = getelementptr inbounds i16* %P, i32 %J ; [#uses=1] - %C = icmp ult i16* %X, %Y ; [#uses=1] - ret i1 %C -} - -define i1 @test2(i16* %P, i32 %I) { - %X = getelementptr inbounds i16* %P, i32 %I ; [#uses=1] - %C = icmp ult i16* %X, %P ; [#uses=1] - ret i1 %C -} - -define i32 @test3(i32* %P, i32 %A, i32 %B) { - %tmp.4 = getelementptr inbounds i32* %P, i32 %A ; [#uses=1] - %tmp.9 = getelementptr inbounds i32* %P, i32 %B ; [#uses=1] - %tmp.10 = icmp eq i32* %tmp.4, %tmp.9 ; [#uses=1] - %tmp.11 = zext i1 %tmp.10 to i32 ; [#uses=1] - ret i32 %tmp.11 -} - -define i32 @test4(i32* %P, i32 %A, i32 %B) { - %tmp.4 = getelementptr inbounds i32* %P, i32 %A ; [#uses=1] - %tmp.6 = icmp eq i32* %tmp.4, %P ; [#uses=1] - %tmp.7 = zext i1 %tmp.6 to i32 ; [#uses=1] - ret i32 %tmp.7 -} - diff --git a/test/Transforms/InstCombine/getelementptr-seteq.ll b/test/Transforms/InstCombine/getelementptr-seteq.ll deleted file mode 100644 index 2cd6f77b89f..00000000000 --- a/test/Transforms/InstCombine/getelementptr-seteq.ll +++ /dev/null @@ -1,13 +0,0 @@ -; Test folding of constantexpr geps into normal geps. -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {icmp eq i64 %X, -1} -; PR2235 - -%S = type { i32, [ 100 x i32] } - -define i1 @test(i64 %X, %S* %P) { - %A = getelementptr inbounds %S* %P, i32 0, i32 1, i64 %X - %B = getelementptr inbounds %S* %P, i32 0, i32 0 - %C = icmp eq i32* %A, %B - ret i1 %C -} - diff --git a/test/Transforms/InstCombine/getelementptr.ll b/test/Transforms/InstCombine/getelementptr.ll index 833f6a8ed5a..3953ee3b383 100644 --- a/test/Transforms/InstCombine/getelementptr.ll +++ b/test/Transforms/InstCombine/getelementptr.ll @@ -1,6 +1,12 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | FileCheck %s +target datalayout = "e-p:64:64" + %pair = type { i32, i32 } +%struct.B = type { double } +%struct.A = type { %struct.B, i32, i32 } + + @Global = constant [10 x i8] c"helloworld" ; Test noop elimination @@ -98,3 +104,103 @@ define i1 @test11({ i32, i32 }* %X) { ; CHECK: @test11 ; CHECK: icmp eq %pair* %X, null } + + +; PR4748 +define i32 @test12(%struct.A* %a) { +entry: + %g3 = getelementptr %struct.A* %a, i32 0, i32 1 + store i32 10, i32* %g3, align 4 + + %g4 = getelementptr %struct.A* %a, i32 0, i32 0 + + %new_a = bitcast %struct.B* %g4 to %struct.A* + + %g5 = getelementptr %struct.A* %new_a, i32 0, i32 1 + %a_a = load i32* %g5, align 4 + ret i32 %a_a +; CHECK: @test12 +; CHECK: getelementptr %struct.A* %a, i64 0, i32 1 +; CHECK-NEXT: store i32 10, i32* %g3 +; CHECK-NEXT: ret i32 10 +} + + +; PR2235 +%S = type { i32, [ 100 x i32] } +define i1 @test13(i64 %X, %S* %P) { + %A = getelementptr inbounds %S* %P, i32 0, i32 1, i64 %X + %B = getelementptr inbounds %S* %P, i32 0, i32 0 + %C = icmp eq i32* %A, %B + ret i1 %C +; CHECK: @test13 +; CHECK: %C = icmp eq i64 %X, -1 +} + + +@G = external global [3 x i8] ; <[3 x i8]*> [#uses=1] +define i8* @test14(i32 %Idx) { + %idx = zext i32 %Idx to i64 ; [#uses=1] + %tmp = getelementptr i8* getelementptr ([3 x i8]* @G, i32 0, i32 0), i64 %idx + ret i8* %tmp +; CHECK: @test14 +; CHECK: getelementptr [3 x i8]* @G, i64 0, i64 %idx +} + + +; Test folding of constantexpr geps into normal geps. +@Array = external global [40 x i32] ; <[40 x i32]*> [#uses=2] +define i32 *@test15(i64 %X) { + %A = getelementptr i32* getelementptr ([40 x i32]* @Array, i64 0, i64 0), i64 %X + ret i32* %A +; CHECK: @test15 +; CHECK: getelementptr [40 x i32]* @Array, i64 0, i64 %X +} + + +define i32* @test16(i32* %X, i32 %Idx) { + %R = getelementptr i32* %X, i32 %Idx + ret i32* %R +; CHECK: @test16 +; CHECK: sext i32 %Idx to i64 +} + + +define i1 @test17(i16* %P, i32 %I, i32 %J) { + %X = getelementptr inbounds i16* %P, i32 %I + %Y = getelementptr inbounds i16* %P, i32 %J + %C = icmp ult i16* %X, %Y + ret i1 %C +; CHECK: @test17 +; CHECK: %C = icmp slt i32 %I, %J +} + +define i1 @test18(i16* %P, i32 %I) { + %X = getelementptr inbounds i16* %P, i32 %I + %C = icmp ult i16* %X, %P + ret i1 %C +; CHECK: @test18 +; CHECK: %C = icmp slt i32 %I, 0 +} + +define i32 @test19(i32* %P, i32 %A, i32 %B) { + %tmp.4 = getelementptr inbounds i32* %P, i32 %A + %tmp.9 = getelementptr inbounds i32* %P, i32 %B + %tmp.10 = icmp eq i32* %tmp.4, %tmp.9 + %tmp.11 = zext i1 %tmp.10 to i32 + ret i32 %tmp.11 +; CHECK: @test19 +; CHECK: icmp eq i32 %A, %B +} + +define i32 @test20(i32* %P, i32 %A, i32 %B) { + %tmp.4 = getelementptr inbounds i32* %P, i32 %A + %tmp.6 = icmp eq i32* %tmp.4, %P + %tmp.7 = zext i1 %tmp.6 to i32 + ret i32 %tmp.7 +; CHECK: @test20 +; CHECK: icmp eq i32 %A, 0 +} + + + diff --git a/test/Transforms/InstCombine/getelementptr_cast.ll b/test/Transforms/InstCombine/getelementptr_cast.ll deleted file mode 100644 index 1d2fcce13d3..00000000000 --- a/test/Transforms/InstCombine/getelementptr_cast.ll +++ /dev/null @@ -1,11 +0,0 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ -; RUN: notcast {} {getelementptr.*} - -@G = external global [3 x i8] ; <[3 x i8]*> [#uses=1] - -define i8* @foo(i32 %Idx) { - %gep.upgrd.1 = zext i32 %Idx to i64 ; [#uses=1] - %tmp = getelementptr i8* getelementptr ([3 x i8]* @G, i32 0, i32 0), i64 %gep.upgrd.1 ; [#uses=1] - ret i8* %tmp -} - diff --git a/test/Transforms/InstCombine/getelementptr_const.ll b/test/Transforms/InstCombine/getelementptr_const.ll deleted file mode 100644 index 823ff5efde9..00000000000 --- a/test/Transforms/InstCombine/getelementptr_const.ll +++ /dev/null @@ -1,15 +0,0 @@ -; Test folding of constantexpr geps into normal geps. -; RUN: llvm-as < %s | opt -instcombine -gvn -instcombine | \ -; RUN: llvm-dis | not grep getelementptr - -@Array = external global [40 x i32] ; <[40 x i32]*> [#uses=2] - -define i32 @test(i64 %X) { - %A = getelementptr i32* getelementptr ([40 x i32]* @Array, i64 0, i64 0), i64 %X ; [#uses=1] - %B = getelementptr [40 x i32]* @Array, i64 0, i64 %X ; [#uses=1] - %a = ptrtoint i32* %A to i32 ; [#uses=1] - %b = ptrtoint i32* %B to i32 ; [#uses=1] - %c = sub i32 %a, %b ; [#uses=1] - ret i32 %c -} - diff --git a/test/Transforms/InstCombine/getelementptr_index.ll b/test/Transforms/InstCombine/getelementptr_index.ll deleted file mode 100644 index 556096516f9..00000000000 --- a/test/Transforms/InstCombine/getelementptr_index.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep trunc - -target datalayout = "e-p:32:32" - -define i32* @test(i32* %X, i64 %Idx) { - %R = getelementptr i32* %X, i64 %Idx ; [#uses=1] - ret i32* %R -} - diff --git a/test/Transforms/InstCombine/getelementptr_promote.ll b/test/Transforms/InstCombine/getelementptr_promote.ll deleted file mode 100644 index 811c5a95916..00000000000 --- a/test/Transforms/InstCombine/getelementptr_promote.ll +++ /dev/null @@ -1,58 +0,0 @@ -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep getelementptr | grep {, i64} - -; Instcombine should promote the getelementptr index up to the target's -; pointer size, making the conversion explicit, which helps expose it to -; other optimizations. - -target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128" -target triple = "x86_64-apple-darwin8" - -define i64 @test(i64* %first, i32 %count) nounwind { -entry: - %first_addr = alloca i64* ; [#uses=2] - %count_addr = alloca i32 ; [#uses=2] - %retval = alloca i64 ; [#uses=2] - %n = alloca i32 ; [#uses=5] - %result = alloca i64 ; [#uses=4] - %0 = alloca i64 ; [#uses=2] - %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] - store i64* %first, i64** %first_addr - store i32 %count, i32* %count_addr - store i64 0, i64* %result, align 8 - store i32 0, i32* %n, align 4 - br label %bb1 - -bb: ; preds = %bb1 - %1 = load i64** %first_addr, align 8 ; [#uses=1] - %2 = load i32* %n, align 4 ; [#uses=1] - %3 = bitcast i32 %2 to i32 ; [#uses=1] - %4 = getelementptr i64* %1, i32 %3 ; [#uses=1] - %5 = load i64* %4, align 8 ; [#uses=1] - %6 = lshr i64 %5, 4 ; [#uses=1] - %7 = load i64* %result, align 8 ; [#uses=1] - %8 = add i64 %6, %7 ; [#uses=1] - store i64 %8, i64* %result, align 8 - %9 = load i32* %n, align 4 ; [#uses=1] - %10 = add i32 %9, 1 ; [#uses=1] - store i32 %10, i32* %n, align 4 - br label %bb1 - -bb1: ; preds = %bb, %entry - %11 = load i32* %n, align 4 ; [#uses=1] - %12 = load i32* %count_addr, align 4 ; [#uses=1] - %13 = icmp slt i32 %11, %12 ; [#uses=1] - %14 = zext i1 %13 to i8 ; [#uses=1] - %toBool = icmp ne i8 %14, 0 ; [#uses=1] - br i1 %toBool, label %bb, label %bb2 - -bb2: ; preds = %bb1 - %15 = load i64* %result, align 8 ; [#uses=1] - store i64 %15, i64* %0, align 8 - %16 = load i64* %0, align 8 ; [#uses=1] - store i64 %16, i64* %retval, align 8 - br label %return - -return: ; preds = %bb2 - %retval3 = load i64* %retval ; [#uses=1] - ret i64 %retval3 -} -- 2.34.1