diff options
author | Tanya Lattner <tonic@nondot.org> | 2008-03-09 08:16:40 +0000 |
---|---|---|
committer | Tanya Lattner <tonic@nondot.org> | 2008-03-09 08:16:40 +0000 |
commit | 76806b6a434ad5477727d3733d18fe309a1281fe (patch) | |
tree | 52f42bc2ac7b48d2e9f86d81304d55c8c777daa5 /test/Transforms/InstCombine | |
parent | 90b347dc90a0f002ac5ac1e990991f98371f730b (diff) |
Remove llvm-upgrade and update tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48103 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstCombine')
48 files changed, 799 insertions, 726 deletions
diff --git a/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll b/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll index 1c93d2457d..4ebbe2470f 100644 --- a/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll +++ b/test/Transforms/InstCombine/2002-05-14-TouchDeletedInst.ll @@ -6,6 +6,8 @@ ; ; RUN: llvm-as < %s | opt -instcombine ; +; END. + @.LC0 = internal global [21 x i8] c"hbMakeCodeLengths(1)\00" ; <[21 x i8]*> [#uses=1] @.LC1 = internal global [21 x i8] c"hbMakeCodeLengths(2)\00" ; <[21 x i8]*> [#uses=1] diff --git a/test/Transforms/InstCombine/2003-07-21-ExternalConstant.ll b/test/Transforms/InstCombine/2003-07-21-ExternalConstant.ll index 14140018f9..09732d3f63 100644 --- a/test/Transforms/InstCombine/2003-07-21-ExternalConstant.ll +++ b/test/Transforms/InstCombine/2003-07-21-ExternalConstant.ll @@ -11,7 +11,7 @@ ; ; Extra code: ; RUN: llvm-as < %s | opt -instcombine -; +; END. target datalayout = "e-p:32:32" @silly = external constant i32 ; <i32*> [#uses=1] diff --git a/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll b/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll index 836d1eb27a..afb573b6ef 100644 --- a/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll +++ b/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll @@ -11,7 +11,7 @@ ; ; RUN: llvm-as < %s -o - | opt -instcombine | llvm-dis | \ ; RUN: notcast .*int - +; END. define i1 @lt_signed_to_large_unsigned(i8 %SB) { %Y = sext i8 %SB to i32 ; <i32> [#uses=1] %C = icmp ult i32 %Y, 1024 ; <i1> [#uses=1] diff --git a/test/Transforms/InstCombine/2006-04-01-InfLoop.ll b/test/Transforms/InstCombine/2006-04-01-InfLoop.ll index 1a26b63c5d..6ea3d11120 100644 --- a/test/Transforms/InstCombine/2006-04-01-InfLoop.ll +++ b/test/Transforms/InstCombine/2006-04-01-InfLoop.ll @@ -1,4 +1,5 @@ ; RUN: llvm-as < %s | opt -instcombine -disable-output +; END. %struct.DecRefPicMarking_s = type { i32, i32, i32, i32, i32, %struct.DecRefPicMarking_s* } %struct.datapartition = type { %typedef.Bitstream*, %typedef.DecodingEnvironment, i32 (%struct.syntaxelement*, %struct.img_par*, %struct.inp_par*, %struct.datapartition*)* } %struct.img_par = type { i32, i32, i32, i32, i32*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [16 x [16 x i16]], [6 x [32 x i32]], [16 x [16 x i32]], [4 x [12 x [4 x [4 x i32]]]], [16 x i32], i32**, i32*, i32***, i32**, i32, i32, i32, i32, %typedef.Slice*, %struct.macroblock*, i32, i32, i32, i32, i32, i32, i32**, %struct.DecRefPicMarking_s*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [3 x i32], i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32***, i32***, i32****, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %struct.timeb, %struct.timeb, i32, i32, i32, i32, i32, i32, i32, i32 } diff --git a/test/Transforms/InstCombine/2006-05-04-DemandedBitCrash.ll b/test/Transforms/InstCombine/2006-05-04-DemandedBitCrash.ll index 4506bf0a4e..1b9df405c5 100644 --- a/test/Transforms/InstCombine/2006-05-04-DemandedBitCrash.ll +++ b/test/Transforms/InstCombine/2006-05-04-DemandedBitCrash.ll @@ -1,4 +1,5 @@ ; RUN: llvm-as < %s | opt -instcombine -disable-output +; END. define void @test() { bb38.i: diff --git a/test/Transforms/InstCombine/2006-05-06-Infloop.ll b/test/Transforms/InstCombine/2006-05-06-Infloop.ll index b1c48ecba7..ec67d7178e 100644 --- a/test/Transforms/InstCombine/2006-05-06-Infloop.ll +++ b/test/Transforms/InstCombine/2006-05-06-Infloop.ll @@ -1,4 +1,5 @@ ; RUN: llvm-as < %s | opt -instcombine -disable-output +; END. %struct.gs_matrix = type { float, i32, float, i32, float, i32, float, i32, float, i32, float, i32 } %struct.gx_bitmap = type { i8*, i32, i32, i32 } %struct.gx_device = type { i32, %struct.gx_device_procs*, i8*, i32, i32, float, float, i32, i16, i32, i32 } diff --git a/test/Transforms/InstCombine/2006-09-11-EmptyStructCrash.ll b/test/Transforms/InstCombine/2006-09-11-EmptyStructCrash.ll index 7ed59c2fd5..bf9252a349 100644 --- a/test/Transforms/InstCombine/2006-09-11-EmptyStructCrash.ll +++ b/test/Transforms/InstCombine/2006-09-11-EmptyStructCrash.ll @@ -1,5 +1,6 @@ ; PR905 ; RUN: llvm-as < %s | opt -instcombine -disable-output +; END. %RPYTHON_EXCEPTION = type { %RPYTHON_EXCEPTION_VTABLE* } %RPYTHON_EXCEPTION_VTABLE = type { %RPYTHON_EXCEPTION_VTABLE*, i32, i32, %RPyOpaque_RuntimeTypeInfo*, %arraytype_Char*, %functiontype_12* } diff --git a/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll b/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll index 16dbd2196e..1508a523b7 100644 --- a/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll +++ b/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll @@ -1,5 +1,6 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep {icmp sgt} +; END. target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" %struct.point = type { i32, i32 } diff --git a/test/Transforms/InstCombine/2006-12-08-Select-ICmp.ll b/test/Transforms/InstCombine/2006-12-08-Select-ICmp.ll index cc36d64dfa..e4aade7b8e 100644 --- a/test/Transforms/InstCombine/2006-12-08-Select-ICmp.ll +++ b/test/Transforms/InstCombine/2006-12-08-Select-ICmp.ll @@ -1,4 +1,5 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep select +; END. target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" diff --git a/test/Transforms/InstCombine/2006-12-10-ICmp-GEP-GEP.ll b/test/Transforms/InstCombine/2006-12-10-ICmp-GEP-GEP.ll index 08ebe6ad3a..15f73622d6 100644 --- a/test/Transforms/InstCombine/2006-12-10-ICmp-GEP-GEP.ll +++ b/test/Transforms/InstCombine/2006-12-10-ICmp-GEP-GEP.ll @@ -1,5 +1,6 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep -v {icmp ult i32} +; END. target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" diff --git a/test/Transforms/InstCombine/2006-12-15-Range-Test.ll b/test/Transforms/InstCombine/2006-12-15-Range-Test.ll index 585257c779..67bc84c404 100644 --- a/test/Transforms/InstCombine/2006-12-15-Range-Test.ll +++ b/test/Transforms/InstCombine/2006-12-15-Range-Test.ll @@ -2,6 +2,7 @@ ; RUN: grep icmp | count 1 ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep {icmp ugt} | count 1 +; END. target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" diff --git a/test/Transforms/InstCombine/2006-12-23-Select-Cmp-Cmp.ll b/test/Transforms/InstCombine/2006-12-23-Select-Cmp-Cmp.ll index e653aa1e2c..695aea46ee 100644 --- a/test/Transforms/InstCombine/2006-12-23-Select-Cmp-Cmp.ll +++ b/test/Transforms/InstCombine/2006-12-23-Select-Cmp-Cmp.ll @@ -1,6 +1,7 @@ ; For PR1065. This causes an assertion in instcombine if a select with two cmp ; operands is encountered. ; RUN: llvm-as < %s | opt -instcombine -disable-output +; END. target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" diff --git a/test/Transforms/InstCombine/CPP_min_max.llx b/test/Transforms/InstCombine/CPP_min_max.llx index 2818fa779a..785b91e79e 100644 --- a/test/Transforms/InstCombine/CPP_min_max.llx +++ b/test/Transforms/InstCombine/CPP_min_max.llx @@ -1,6 +1,5 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep select | not grep {i32\\*} -; END. ; This testcase corresponds to PR362, which notices that this horrible code ; is generated by the C++ front-end and LLVM optimizers, which has lots of @@ -9,28 +8,27 @@ ; Instcombine should propagate the load through the select instructions to ; allow elimination of the extra stuff by the mem2reg pass. -implementation ; Functions: - -void %_Z5test1RiS_(int* %x, int* %y) { +define void @_Z5test1RiS_(i32* %x, i32* %y) { entry: - %tmp.1.i = load int* %y ; <int> [#uses=1] - %tmp.3.i = load int* %x ; <int> [#uses=1] - %tmp.4.i = setlt int %tmp.1.i, %tmp.3.i ; <bool> [#uses=1] - %retval.i = select bool %tmp.4.i, int* %y, int* %x ; <int*> [#uses=1] - %tmp.4 = load int* %retval.i ; <int> [#uses=1] - store int %tmp.4, int* %x - ret void + %tmp.1.i = load i32* %y ; <i32> [#uses=1] + %tmp.3.i = load i32* %x ; <i32> [#uses=1] + %tmp.4.i = icmp slt i32 %tmp.1.i, %tmp.3.i ; <i1> [#uses=1] + %retval.i = select i1 %tmp.4.i, i32* %y, i32* %x ; <i32*> [#uses=1] + %tmp.4 = load i32* %retval.i ; <i32> [#uses=1] + store i32 %tmp.4, i32* %x + ret void } -void %_Z5test2RiS_(int* %x, int* %y) { +define void @_Z5test2RiS_(i32* %x, i32* %y) { entry: - %tmp.0 = alloca int ; <int*> [#uses=2] - %tmp.2 = load int* %x ; <int> [#uses=2] - store int %tmp.2, int* %tmp.0 - %tmp.3.i = load int* %y ; <int> [#uses=1] - %tmp.4.i = setlt int %tmp.2, %tmp.3.i ; <bool> [#uses=1] - %retval.i = select bool %tmp.4.i, int* %y, int* %tmp.0 ; <int*> [#uses=1] - %tmp.6 = load int* %retval.i ; <int> [#uses=1] - store int %tmp.6, int* %y - ret void + %tmp.0 = alloca i32 ; <i32*> [#uses=2] + %tmp.2 = load i32* %x ; <i32> [#uses=2] + store i32 %tmp.2, i32* %tmp.0 + %tmp.3.i = load i32* %y ; <i32> [#uses=1] + %tmp.4.i = icmp slt i32 %tmp.2, %tmp.3.i ; <i1> [#uses=1] + %retval.i = select i1 %tmp.4.i, i32* %y, i32* %tmp.0 ; <i32*> [#uses=1] + %tmp.6 = load i32* %retval.i ; <i32> [#uses=1] + store i32 %tmp.6, i32* %y + ret void } + diff --git a/test/Transforms/InstCombine/GEPIdxCanon.ll b/test/Transforms/InstCombine/GEPIdxCanon.ll index bf0ab79841..9f84c01a3a 100644 --- a/test/Transforms/InstCombine/GEPIdxCanon.ll +++ b/test/Transforms/InstCombine/GEPIdxCanon.ll @@ -1,9 +1,10 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -gcse -instcombine | \ +; RUN: llvm-as < %s | opt -instcombine -gcse -instcombine | \ ; RUN: llvm-dis | not grep getelementptr -bool %test(int* %A) { - %B = getelementptr int* %A, int 1 - %C = getelementptr int* %A, uint 1 - %V = seteq int* %B, %C - ret bool %V +define i1 @test(i32* %A) { + %B = getelementptr i32* %A, i32 1 ; <i32*> [#uses=1] + %C = getelementptr i32* %A, i64 1 ; <i32*> [#uses=1] + %V = icmp eq i32* %B, %C ; <i1> [#uses=1] + ret i1 %V } + diff --git a/test/Transforms/InstCombine/IntPtrCast.ll b/test/Transforms/InstCombine/IntPtrCast.ll index 7ff71c86b7..e24d199f8c 100644 --- a/test/Transforms/InstCombine/IntPtrCast.ll +++ b/test/Transforms/InstCombine/IntPtrCast.ll @@ -1,9 +1,9 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | notcast -target endian = little -target pointersize = 32 +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | notcast +target datalayout = "e-p:32:32" -int *%test(int *%P) { - %V = cast int* %P to int - %P2 = cast int %V to int* - ret int* %P2 +define i32* @test(i32* %P) { + %V = ptrtoint i32* %P to i32 ; <i32> [#uses=1] + %P2 = inttoptr i32 %V to i32* ; <i32*> [#uses=1] + ret i32* %P2 } + diff --git a/test/Transforms/InstCombine/JavaCompare.ll b/test/Transforms/InstCombine/JavaCompare.ll index 4ed064c674..db62991211 100644 --- a/test/Transforms/InstCombine/JavaCompare.ll +++ b/test/Transforms/InstCombine/JavaCompare.ll @@ -1,15 +1,15 @@ ; This is the sequence of stuff that the Java front-end expands for a single ; <= comparison. Check to make sure we turn it into a <= (only) -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep -v {icmp sle} | not grep #uses -bool %le(int %A, int %B) { - %c1 = setgt int %A, %B; - %tmp = select bool %c1, int 1, int 0; - %c2 = setlt int %A, %B; - %result = select bool %c2, int -1, int %tmp; - %c3 = setle int %result, 0; - ret bool %c3; +define i1 @le(i32 %A, i32 %B) { + %c1 = icmp sgt i32 %A, %B ; <i1> [#uses=1] + %tmp = select i1 %c1, i32 1, i32 0 ; <i32> [#uses=1] + %c2 = icmp slt i32 %A, %B ; <i1> [#uses=1] + %result = select i1 %c2, i32 -1, i32 %tmp ; <i32> [#uses=1] + %c3 = icmp sle i32 %result, 0 ; <i1> [#uses=1] + ret i1 %c3 } diff --git a/test/Transforms/InstCombine/add.ll b/test/Transforms/InstCombine/add.ll index df99e96f5f..b4795147c6 100644 --- a/test/Transforms/InstCombine/add.ll +++ b/test/Transforms/InstCombine/add.ll @@ -1,251 +1,270 @@ ; This test makes sure that add instructions are properly eliminated. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep -v OK | not grep add -; END. -implementation - -int %test1(int %A) { - %B = add int %A, 0 - ret int %B +define i32 @test1(i32 %A) { + %B = add i32 %A, 0 ; <i32> [#uses=1] + ret i32 %B } -int %test2(int %A) { - %B = add int %A, 5 - %C = add int %B, -5 - ret int %C +define i32 @test2(i32 %A) { + %B = add i32 %A, 5 ; <i32> [#uses=1] + %C = add i32 %B, -5 ; <i32> [#uses=1] + ret i32 %C } -int %test3(int %A) { - %B = add int %A, 5 - %C = sub int %B, 5 ;; This should get converted to an add - ret int %C +define i32 @test3(i32 %A) { + %B = add i32 %A, 5 ; <i32> [#uses=1] + ;; This should get converted to an add + %C = sub i32 %B, 5 ; <i32> [#uses=1] + ret i32 %C } -int %test4(int %A, int %B) { - %C = sub int 0, %A - %D = add int %B, %C ; D = B + -A = B - A - ret int %D +define i32 @test4(i32 %A, i32 %B) { + %C = sub i32 0, %A ; <i32> [#uses=1] + ; D = B + -A = B - A + %D = add i32 %B, %C ; <i32> [#uses=1] + ret i32 %D } -int %test5(int %A, int %B) { - %C = sub int 0, %A - %D = add int %C, %B ; D = -A + B = B - A - ret int %D +define i32 @test5(i32 %A, i32 %B) { + %C = sub i32 0, %A ; <i32> [#uses=1] + ; D = -A + B = B - A + %D = add i32 %C, %B ; <i32> [#uses=1] + ret i32 %D } -int %test6(int %A) { - %B = mul int 7, %A - %C = add int %B, %A ; C = 7*A+A == 8*A == A << 3 - ret int %C +define i32 @test6(i32 %A) { + %B = mul i32 7, %A ; <i32> [#uses=1] + ; C = 7*A+A == 8*A == A << 3 + %C = add i32 %B, %A ; <i32> [#uses=1] + ret i32 %C } -int %test7(int %A) { - %B = mul int 7, %A - %C = add int %A, %B ; C = A+7*A == 8*A == A << 3 - ret int %C +define i32 @test7(i32 %A) { + %B = mul i32 7, %A ; <i32> [#uses=1] + ; C = A+7*A == 8*A == A << 3 + %C = add i32 %A, %B ; <i32> [#uses=1] + ret i32 %C } ; (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 -int %test8(int %A, int %B) { - %A1 = and int %A, 7 - %B1 = and int %B, 128 - %C = add int %A1, %B1 - ret int %C +define i32 @test8(i32 %A, i32 %B) { + %A1 = and i32 %A, 7 ; <i32> [#uses=1] + %B1 = and i32 %B, 128 ; <i32> [#uses=1] + %C = add i32 %A1, %B1 ; <i32> [#uses=1] + ret i32 %C } -int %test9(int %A) { - %B = shl int %A, ubyte 4 - %C = add int %B, %B ; === shl int %A, 5 - ret int %C +define i32 @test9(i32 %A) { + %B = shl i32 %A, 4 ; <i32> [#uses=2] + ; === shl int %A, 5 + %C = add i32 %B, %B ; <i32> [#uses=1] + ret i32 %C } -bool %test10(ubyte %A, ubyte %b) { - %B = add ubyte %A, %b - %c = setne ubyte %B, 0 ; === A != -b - ret bool %c +define i1 @test10(i8 %A, i8 %b) { + %B = add i8 %A, %b ; <i8> [#uses=1] + ; === A != -b + %c = icmp ne i8 %B, 0 ; <i1> [#uses=1] + ret i1 %c } -bool %test11(ubyte %A) { - %B = add ubyte %A, 255 - %c = setne ubyte %B, 0 ; === A != 1 - ret bool %c +define i1 @test11(i8 %A) { + %B = add i8 %A, -1 ; <i8> [#uses=1] + ; === A != 1 + %c = icmp ne i8 %B, 0 ; <i1> [#uses=1] + ret i1 %c } -int %test12(int %A, int %B) { - %C_OK = add int %B, %A ; Should be transformed into shl A, 1 - br label %X -X: - %D = add int %C_OK, %A - ret int %D +define i32 @test12(i32 %A, i32 %B) { + ; Should be transformed into shl A, 1 + %C_OK = add i32 %B, %A ; <i32> [#uses=1] + br label %X + +X: ; preds = %0 + %D = add i32 %C_OK, %A ; <i32> [#uses=1] + ret i32 %D } -int %test13(int %A, int %B, int %C) { - %D_OK = add int %A, %B - %E_OK = add int %D_OK, %C - %F = add int %E_OK, %A ;; shl A, 1 - ret int %F +define i32 @test13(i32 %A, i32 %B, i32 %C) { + %D_OK = add i32 %A, %B ; <i32> [#uses=1] + %E_OK = add i32 %D_OK, %C ; <i32> [#uses=1] + ;; shl A, 1 + %F = add i32 %E_OK, %A ; <i32> [#uses=1] + ret i32 %F } -uint %test14(uint %offset, uint %difference) { - %tmp.2 = and uint %difference, 3 - %tmp.3_OK = add uint %tmp.2, %offset - %tmp.5.mask = and uint %difference, 4294967292 - %tmp.8 = add uint %tmp.3_OK, %tmp.5.mask ; == add %offset, %difference - ret uint %tmp.8 +define i32 @test14(i32 %offset, i32 %difference) { + %tmp.2 = and i32 %difference, 3 ; <i32> [#uses=1] + %tmp.3_OK = add i32 %tmp.2, %offset ; <i32> [#uses=1] + %tmp.5.mask = and i32 %difference, -4 ; <i32> [#uses=1] + ; == add %offset, %difference + %tmp.8 = add i32 %tmp.3_OK, %tmp.5.mask ; <i32> [#uses=1] + ret i32 %tmp.8 } -ubyte %test15(ubyte %A) { - %B = add ubyte %A, 192 ; Does not effect result - %C = and ubyte %B, 16 ; Only one bit set - ret ubyte %C +define i8 @test15(i8 %A) { + ; Does not effect result + %B = add i8 %A, -64 ; <i8> [#uses=1] + ; Only one bit set + %C = and i8 %B, 16 ; <i8> [#uses=1] + ret i8 %C } -ubyte %test16(ubyte %A) { - %B = add ubyte %A, 16 ; Turn this into a XOR - %C = and ubyte %B, 16 ; Only one bit set - ret ubyte %C +define i8 @test16(i8 %A) { + ; Turn this into a XOR + %B = add i8 %A, 16 ; <i8> [#uses=1] + ; Only one bit set + %C = and i8 %B, 16 ; <i8> [#uses=1] + ret i8 %C } -int %test17(int %A) { - %B = xor int %A, -1 - %C = add int %B, 1 ; == sub int 0, %A - ret int %C +define i32 @test17(i32 %A) { + %B = xor i32 %A, -1 ; <i32> [#uses=1] + ; == sub int 0, %A + %C = add i32 %B, 1 ; <i32> [#uses=1] + ret i32 %C } -ubyte %test18(ubyte %A) { - %B = xor ubyte %A, 255 - %C = add ubyte %B, 17 ; == sub ubyte 16, %A - ret ubyte %C +define i8 @test18(i8 %A) { + %B = xor i8 %A, -1 ; <i8> [#uses=1] + ; == sub ubyte 16, %A + %C = add i8 %B, 17 ; <i8> [#uses=1] + ret i8 %C } -int %test19(bool %C) { - %A = select bool %C, int 1000, int 10 - %V = add int %A, 123 - ret int %V +define i32 @test19(i1 %C) { + %A = select i1 %C, i32 1000, i32 10 ; <i32> [#uses=1] + %V = add i32 %A, 123 ; <i32> [#uses=1] + ret i32 %V } -int %test20(int %x) { - %tmp.2 = xor int %x, -2147483648 +define i32 @test20(i32 %x) { + %tmp.2 = xor i32 %x, -2147483648 ; <i32> [#uses=1] ;; Add of sign bit -> xor of sign bit. - %tmp.4 = add int %tmp.2, -2147483648 - ret int %tmp.4 + %tmp.4 = add i32 %tmp.2, -2147483648 ; <i32> [#uses=1] + ret i32 %tmp.4 } -bool %test21(uint %x) { - %t = add uint %x, 4 - %y = seteq uint %t, 123 - ret bool %y +define i1 @test21(i32 %x) { + %t = add i32 %x, 4 ; <i32> [#uses=1] + %y = icmp eq i32 %t, 123 ; <i1> [#uses=1] + ret i1 %y } -int %test22(uint %V) { - %V2 = add uint %V, 10 - switch uint %V2, label %Default [ - uint 20, label %Lab1 - uint 30, label %Lab2 - ] -Default: - ret int 123 -Lab1: - ret int 12312 -Lab2: - ret int 1231231 +define i32 @test22(i32 %V) { + %V2 = add i32 %V, 10 ; <i32> [#uses=1] + switch i32 %V2, label %Default [ + i32 20, label %Lab1 + i32 30, label %Lab2 + ] + +Default: ; preds = %0 + ret i32 123 + +Lab1: ; preds = %0 + ret i32 12312 + +Lab2: ; preds = %0 + ret i32 1231231 } -int %test23(bool %C, int %a) { +define i32 @test23(i1 %C, i32 %a) { entry: - br bool %C, label %endif, label %else + br i1 %C, label %endif, label %else -else: +else: ; preds = %entry br label %endif -endif: - %b.0 = phi int [ 0, %entry ], [ 1, %else ] - %tmp.4 = add int %b.0, 1 - ret int %tmp.4 +endif: ; preds = %else, %entry + %b.0 = phi i32 [ 0, %entry ], [ 1, %else ] ; <i32> [#uses=1] + %tmp.4 = add i32 %b.0, 1 ; <i32> [#uses=1] + ret i32 %tmp.4 } -int %test24(int %A) { - %B = add int %A, 1 - %C = shl int %B, ubyte 1 - %D = sub int %C, 2 - ret int %D ;; A << 1 +define i32 @test24(i32 %A) { + %B = add i32 %A, 1 ; <i32> [#uses=1] + %C = shl i32 %B, 1 ; <i32> [#uses=1] + %D = sub i32 %C, 2 ; <i32> [#uses=1] + ret i32 %D } -long %test25(long %Y) { - %tmp.4 = shl long %Y, ubyte 2 - %tmp.12 = shl long %Y, ubyte 2 - %tmp.8 = add long %tmp.4, %tmp.12 ;; Y << 3 - ret long %tmp.8 +define i64 @test25(i64 %Y) { + %tmp.4 = shl i64 %Y, 2 ; <i64> [#uses=1] + %tmp.12 = shl i64 %Y, 2 ; <i64> [#uses=1] + %tmp.8 = add i64 %tmp.4, %tmp.12 ; <i64> [#uses=1] + ret i64 %tmp.8 } -int %test26(int %A, int %B) { - %C = add int %A, %B - %D = sub int %C, %B - ret int %D +define i32 @test26(i32 %A, i32 %B) { + %C = add i32 %A, %B ; <i32> [#uses=1] + %D = sub i32 %C, %B ; <i32> [#uses=1] + ret i32 %D } -int %test27(bool %C, int %X, int %Y) { - %A = add int %X, %Y - %B = add int %Y, 123 - %C = select bool %C, int %A, int %B ;; Fold add through select. - %D = sub int %C, %Y - ret int %D +define i32 @test27(i1 %C, i32 %X, i32 %Y) { + %A = add i32 %X, %Y ; <i32> [#uses=1] + %B = add i32 %Y, 123 ; <i32> [#uses=1] + ;; Fold add through select. + %C.upgrd.1 = select i1 %C, i32 %A, i32 %B ; <i32> [#uses=1] + %D = sub i32 %C.upgrd.1, %Y ; <i32> [#uses=1] + ret i32 %D } -int %test28(int %X) { - %Y = add int %X, 1234 - %Z = sub int 42, %Y - ret int %Z +define i32 @test28(i32 %X) { + %Y = add i32 %X, 1234 ; <i32> [#uses=1] + %Z = sub i32 42, %Y ; <i32> [#uses=1] + ret i32 %Z } -uint %test29(uint %X, uint %x) { - %tmp.2 = sub uint %X, %x - %tmp.2.mask = and uint %tmp.2, 63 ; <uint> [#uses=1] - %tmp.6 = add uint %tmp.2.mask, %x ; <uint> [#uses=1] - %tmp.7 = and uint %tmp.6, 63 ; <uint> [#uses=1] - %tmp.9 = and uint %tmp.2, 4294967232 ; <uint> [#uses=1] - %tmp.10 = or uint %tmp.7, %tmp.9 ; <uint> [#uses=1] - ret uint %tmp.10 +define i32 @test29(i32 %X, i32 %x) { + %tmp.2 = sub i32 %X, %x ; <i32> [#uses=2] + %tmp.2.mask = and i32 %tmp.2, 63 ; <i32> [#uses=1] + %tmp.6 = add i32 %tmp.2.mask, %x ; <i32> [#uses=1] + %tmp.7 = and i32 %tmp.6, 63 ; <i32> [#uses=1] + %tmp.9 = and i32 %tmp.2, -64 ; <i32> [#uses=1] + %tmp.10 = or i32 %tmp.7, %tmp.9 ; <i32> [#uses=1] + ret i32 %tmp.10 } -long %test30(long %x) { - %tmp.2 = xor long %x, -9223372036854775808 +define i64 @test30(i64 %x) { + %tmp.2 = xor i64 %x, -9223372036854775808 ; <i64> [#uses=1] ;; Add of sign bit -> xor of sign bit. - %tmp.4 = add long %tmp.2, -9223372036854775808 - ret long %tmp.4 + %tmp.4 = add i64 %tmp.2, -9223372036854775808 ; <i64> [#uses=1] + ret i64 %tmp.4 } -int %test31(int %A) { - %B = add int %A, 4 - %C = mul int %B, 5 - %D = sub int %C, 20 - ret int %D +define i32 @test31(i32 %A) { + %B = add i32 %A, 4 ; <i32> [#uses=1] + %C = mul i32 %B, 5 ; <i32> [#uses=1] + %D = sub i32 %C, 20 ; <i32> [#uses=1] + ret i32 %D } -int %test32(int %A) { - %B = add int %A, 4 - %C = shl int %B, ubyte 2 - %D = sub int %C, 16 - ret int %D +define i32 @test32(i32 %A) { + %B = add i32 %A, 4 ; <i32> [#uses=1] + %C = shl i32 %B, 2 ; <i32> [#uses=1] + %D = sub i32 %C, 16 ; <i32> [#uses=1] + ret i32 %D } -ubyte %test33(ubyte %A) { ;; OR A, 1 - %B = and ubyte %A, 254 - %C = add ubyte %B, 1 - ret ubyte %C +define i8 @test33(i8 %A) { + %B = and i8 %A, -2 ; <i8> [#uses=1] + %C = add i8 %B, 1 ; <i8> [#uses=1] + ret i8 %C } -ubyte %test34(ubyte %A) { - %B = add ubyte %A, 64 ;; dead - %C = and ubyte %B, 12 - ret ubyte %C +define i8 @test34(i8 %A) { + %B = add i8 %A, 64 ; <i8> [#uses=1] + %C = and i8 %B, 12 ; <i8> [#uses=1] + ret i8 %C } -int %test35(int %a) { ;; -> -1 - %tmpnot = xor int %a, -1 - %tmp2 = add int %tmpnot, %a - ret int %tmp2 +define i32 @test35(i32 %a) { + %tmpnot = xor i32 %a, -1 ; <i32> [#uses=1] + %tmp2 = add i32 %tmpnot, %a ; <i32> [#uses=1] + ret i32 %tmp2 } diff --git a/test/Transforms/InstCombine/alloca.ll b/test/Transforms/InstCombine/alloca.ll index 43e4e3249a..95d0f094ae 100644 --- a/test/Transforms/InstCombine/alloca.ll +++ b/test/Transforms/InstCombine/alloca.ll @@ -1,29 +1,31 @@ ; Zero byte allocas should be deleted. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep alloca ; END. -declare void %use(...) -void %test() { - %X = alloca [0 x int] - call void(...)* %use([0 x int] *%X) - %Y = alloca int, uint 0 - call void(...)* %use(int* %Y) - %Z = alloca {} - call void(...)* %use({}* %Z) - ret void +declare void @use(...) + +define void @test() { + %X = alloca [0 x i32] ; <[0 x i32]*> [#uses=1] + call void (...)* @use( [0 x i32]* %X ) + %Y = alloca i32, i32 0 ; <i32*> [#uses=1] + call void (...)* @use( i32* %Y ) + %Z = alloca { } ; <{ }*> [#uses=1] + call void (...)* @use( { }* %Z ) + ret void } -void %test2() { - %A = alloca int ;; dead. - store int 123, int* %A - ret void +define void @test2() { + %A = alloca i32 ; <i32*> [#uses=1] + store i32 123, i32* %A + ret void } -void %test3() { - %A = alloca {int} ;; dead. - %B = getelementptr {int}* %A, int 0, uint 0 - store int 123, int* %B - ret void +define void @test3() { + %A = alloca { i32 } ; <{ i32 }*> [#uses=1] + %B = getelementptr { i32 }* %A, i32 0, i32 0 ; <i32*> [#uses=1] + store i32 123, i32* %B + ret void } + diff --git a/test/Transforms/InstCombine/and-compare.ll b/test/Transforms/InstCombine/and-compare.ll index 8969f98fc1..d2f2753f88 100644 --- a/test/Transforms/InstCombine/and-compare.ll +++ b/test/Transforms/InstCombine/and-compare.ll @@ -1,11 +1,11 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep and | count 1 ; Should be optimized to one and. -bool %test1(uint %a, uint %b) { - %tmp1 = and uint %a, 65280 - %tmp3 = and uint %b, 65280 - %tmp = setne uint %tmp1, %tmp3 - ret bool %tmp +define i1 @test1(i32 %a, i32 %b) { + %tmp1 = and i32 %a, 65280 ; <i32> [#uses=1] + %tmp3 = and i32 %b, 65280 ; <i32> [#uses=1] + %tmp = icmp ne i32 %tmp1, %tmp3 ; <i1> [#uses=1] + ret i1 %tmp } diff --git a/test/Transforms/InstCombine/and-or-and.ll b/test/Transforms/InstCombine/and-or-and.ll index ea7a87fe3b..04d475ccd8 100644 --- a/test/Transforms/InstCombine/and-or-and.ll +++ b/test/Transforms/InstCombine/and-or-and.ll @@ -9,48 +9,53 @@ ; ; Which corresponds to test1. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep {or } -; END. - -int %test1(int %X, int %Y) { - %A = and int %X, 7 - %B = and int %Y, 8 - %C = or int %A, %B - %D = and int %C, 7 ;; This cannot include any bits from %Y! - ret int %D + +define i32 @test1(i32 %X, i32 %Y) { + %A = and i32 %X, 7 ; <i32> [#uses=1] + %B = and i32 %Y, 8 ; <i32> [#uses=1] + %C = or i32 %A, %B ; <i32> [#uses=1] + ;; This cannot include any bits from %Y! + %D = and i32 %C, 7 ; <i32> [#uses=1] + ret i32 %D } -int %test2(int %X, ubyte %Y) { - %B = cast ubyte %Y to int - %C = or int %X, %B - %D = and int %C, 65536 ;; This cannot include any bits from %Y! - ret int %D +define i32 @test2(i32 %X, i8 %Y) { + %B = zext i8 %Y to i32 ; <i32> [#uses=1] + %C = or i32 %X, %B ; <i32> [#uses=1] + ;; This cannot include any bits from %Y! + %D = and i32 %C, 65536 ; <i32> [#uses=1] + ret i32 %D } -int %test3(int %X, int %Y) { - %B = shl int %Y, ubyte 1 - %C = or int %X, %B - %D = and int %C, 1 ;; This cannot include any bits from %Y! - ret int %D +define i32 @test3(i32 %X, i32 %Y) { + %B = shl i32 %Y, 1 ; <i32> [#uses=1] + %C = or i32 %X, %B ; <i32> [#uses=1] + ;; This cannot include any bits from %Y! + %D = and i32 %C, 1 ; <i32> [#uses=1] + ret i32 %D } -uint %test4(uint %X, uint %Y) { - %B = shr uint %Y, ubyte 31 - %C = or uint %X, %B - %D = and uint %C, 2 ;; This cannot include any bits from %Y! - ret uint %D +define i32 @test4(i32 %X, i32 %Y) { + %B = lshr i32 %Y, 31 ; <i32> [#uses=1] + %C = or i32 %X, %B ; <i32> [#uses=1] + ;; This cannot include any bits from %Y! + %D = and i32 %C, 2 ; <i32> [#uses=1] + ret i32 %D } -int %or_test1(int %X, int %Y) { - %A = and int %X, 1 - %B = or int %A, 1 ;; This cannot include any bits from X! - ret int %B +define i32 @or_test1(i32 %X, i32 %Y) { + %A = and i32 %X, 1 ; <i32> [#uses=1] + ;; This cannot include any bits from X! + %B = or i32 %A, 1 ; <i32> [#uses=1] + ret i32 %B } -ubyte %or_test2(ubyte %X, ubyte %Y) { - %A = shl ubyte %X, ubyte 7 - %B = or ubyte %A, 128 ;; This cannot include any bits from X! - ret ubyte %B +define i8 @or_test2(i8 %X, i8 %Y) { + %A = shl i8 %X, 7 ; <i8> [#uses=1] + ;; This cannot include any bits from X! + %B = or i8 %A, -128 ; <i8> [#uses=1] + ret i8 %B } diff --git a/test/Transforms/InstCombine/and.ll b/test/Transforms/InstCombine/and.ll index 7b08975877..edab47e87c 100644 --- a/test/Transforms/InstCombine/and.ll +++ b/test/Transforms/InstCombine/and.ll @@ -1,229 +1,255 @@ ; This test makes sure that these instructions are properly eliminated. ; -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep and -; END. +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep and -implementation - -int %test1(int %A) { - %B = and int %A, 0 ; zero result - ret int %B +define i32 @test1(i32 %A) { + ; zero result + %B = and i32 %A, 0 ; <i32> [#uses=1] + ret i32 %B } -int %test2(int %A) { - %B = and int %A, -1 ; noop - ret int %B +define i32 @test2(i32 %A) { + ; noop + %B = and i32 %A, -1 ; <i32> [#uses=1] + ret i32 %B } -bool %test3(bool %A) { - %B = and bool %A, false ; always = false - ret bool %B +define i1 @test3(i1 %A) { + ; always = false + %B = and i1 %A, false ; <i1> [#uses=1] + ret i1 %B } -bool %test4(bool %A) { - %B = and bool %A, true ; noop - ret bool %B +define i1 @test4(i1 %A) { + ; noop + %B = and i1 %A, true ; <i1> [#uses=1] + ret i1 %B } -int %test5(int %A) { - %B = and int %A, %A - ret int %B +define i32 @test5(i32 %A) { + %B = and i32 %A, %A ; <i32> [#uses=1] + ret i32 %B } -bool %test6(bool %A) { - %B = and bool %A, %A - ret bool %B +define i1 @test6(i1 %A) { + %B = and i1 %A, %A ; <i1> [#uses=1] + ret i1 %B } -int %test7(int %A) { ; A & ~A == 0 - %NotA = xor int %A, -1 - %B = and int %A, %NotA - ret int %B +; A & ~A == 0 +define i32 @test7(i32 %A) { + %NotA = xor i32 %A, -1 ; <i32> [#uses=1] + %B = and i32 %A, %NotA ; <i32> [#uses=1] + ret i32 %B } -ubyte %test8(ubyte %A) { ; AND associates - %B = and ubyte %A, 3 - %C = and ubyte %B, 4 - ret ubyte %C +; AND associates +define i8 @test8(i8 %A) { + %B = and i8 %A, 3 ; <i8> [#uses=1] + %C = and i8 %B, 4 ; <i8> [#uses=1] + ret i8 %C } -bool %test9(int %A) { - %B = and int %A, -2147483648 ; Test of sign bit, convert to setle %A, 0 - %C = setne int %B, 0 - ret bool %C +define i1 @test9(i32 %A) { + ; Test of sign bit, convert to setle %A, 0 + %B = and i32 %A, -2147483648 ; <i32> [#uses=1] + %C = icmp ne i32 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -bool %test9(uint %A) { - %B = and uint %A, 2147483648 ; Test of sign bit, convert to setle %A, 0 - %C = setne uint %B, 0 - ret bool %C +define i1 @test9a(i32 %A) { + ; Test of sign bit, convert to setle %A, 0 + %B = and i32 %A, -2147483648 ; <i32> [#uses=1] + %C = icmp ne i32 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -uint %test10(uint %A) { - %B = and uint %A, 12 - %C = xor uint %B, 15 - %D = and uint %C, 1 ; (X ^ C1) & C2 --> (X & C2) ^ (C1&C2) - ret uint %D +define i32 @test10(i32 %A) { + %B = and i32 %A, 12 ; <i32> [#uses=1] + %C = xor i32 %B, 15 ; <i32> [#uses=1] + ; (X ^ C1) & C2 --> (X & C2) ^ (C1&C2) + %D = and i32 %C, 1 ; <i32> [#uses=1] + ret i32 %D } -uint %test11(uint %A, uint* %P) { - %B = or uint %A, 3 - %C = xor uint %B, 12 - store uint %C, uint* %P ; additional use of C - %D = and uint %C, 3 ; %C = and uint %B, 3 --> 3 - ret uint %D +define i32 @test11(i32 %A, i32* %P) { + %B = or i32 %A, 3 ; <i32> [#uses=1] + %C = xor i32 %B, 12 ; <i32> [#uses=2] + ; additional use of C + store i32 %C, i32* %P + ; %C = and uint %B, 3 --> 3 + %D = and i32 %C, 3 ; <i32> [#uses=1] + ret i32 %D } -bool %test12(uint %A, uint %B) { - %C1 = setlt uint %A, %B - %C2 = setle uint %A, %B - %D = and bool %C1, %C2 ; (A < B) & (A <= B) === (A < B) - ret bool %D +define i1 @test12(i32 %A, i32 %B) { + %C1 = icmp ult i32 %A, %B ; <i1> [#uses=1] + %C2 = icmp ule i32 %A, %B ; <i1> [#uses=1] + ; (A < B) & (A <= B) === (A < B) + %D = and i1 %C1, %C2 ; <i1> [#uses=1] + ret i1 %D } -bool %test13(uint %A, uint %B) { - %C1 = setlt uint %A, %B - %C2 = setgt uint %A, %B - %D = and bool %C1, %C2 ; (A < B) & (A > B) === false - ret bool %D +define i1 @test13(i32 %A, i32 %B) { + %C1 = icmp ult i32 %A, %B ; <i1> [#uses=1] + %C2 = icmp ugt i32 %A, %B ; <i1> [#uses=1] + ; (A < B) & (A > B) === false + %D = and i1 %C1, %C2 ; <i1> [#uses=1] + ret i1 %D } -bool %test14(ubyte %A) { - %B = and ubyte %A, 128 - %C = setne ubyte %B, 0 - ret bool %C +define i1 @test14(i8 %A) { + %B = and i8 %A, -128 ; <i8> [#uses=1] + %C = icmp ne i8 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -ubyte %test15(ubyte %A) { - %B = shr ubyte %A, ubyte 7 - %C = and ubyte %B, 2 ; Always equals zero - ret ubyte %C +define i8 @test15(i8 %A) { + %B = lshr i8 %A, 7 ; <i8> [#uses=1] + ; Always equals zero + %C = and i8 %B, 2 ; <i8> [#uses=1] + ret i8 %C } -ubyte %test16(ubyte %A) { - %B = shl ubyte %A, ubyte 2 - %C = and ubyte %B, 3 - ret ubyte %C +define i8 @test16(i8 %A) { + %B = shl i8 %A, 2 ; <i8> [#uses=1] + %C = and i8 %B, 3 ; <i8> [#uses=1] + ret i8 %C } -sbyte %test17(sbyte %X, sbyte %Y) { ;; ~(~X & Y) --> (X | ~Y) - %B = xor sbyte %X, -1 - %C = and sbyte %B, %Y - %D = xor sbyte %C, -1 - ret sbyte %D +;; ~(~X & Y) --> (X | ~Y) +define i8 @test17(i8 %X, i8 %Y) { + %B = xor i8 %X, -1 ; <i8> [#uses=1] + %C = and i8 %B, %Y ; <i8> [#uses=1] + %D = xor i8 %C, -1 ; <i8> [#uses=1] + ret i8 %D } -bool %test18(int %A) { - %B = and int %A, -128 - %C = setne int %B, 0 ;; C >= 128 - ret bool %C +define i1 @test18(i32 %A) { + %B = and i32 %A, -128 ; <i32> [#uses=1] + ;; C >= 128 + %C = icmp ne i32 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -bool %test18a(ubyte %A) { - %B = and ubyte %A, 254 - %C = seteq ubyte %B, 0 - ret bool %C +define i1 @test18a(i8 %A) { + %B = and i8 %A, -2 ; <i8> [#uses=1] + %C = icmp eq i8 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -int %test19(int %A) { - %B = shl int %A, ubyte 3 - %C = and int %B, -2 ;; Clearing a zero bit - ret int %C +define i32 @test19(i32 %A) { + %B = shl i32 %A, 3 ; <i32> [#uses=1] + ;; Clearing a zero bit + %C = and i32 %B, -2 ; <i32> [#uses=1] + ret i32 %C } -ubyte %test20(ubyte %A) { - %C = shr ubyte %A, ubyte 7 - %D = and ubyte %C, 1 ;; Unneeded - ret ubyte %D +define i8 @test20(i8 %A) { + %C = lshr i8 %A, 7 ; <i8> [#uses=1] + ;; Unneeded + %D = and i8 %C, 1 ; <i8> [#uses=1] + ret i8 %D } -bool %test22(int %A) { - %B = seteq int %A, 1 - %C = setge int %A, 3 - %D = and bool %B, %C ;; False - ret bool %D +define i1 @test22(i32 %A) { + %B = icmp eq i32 %A, 1 ; <i1> [#uses=1] + %C = icmp sge i32 %A, 3 ; <i1> [#uses=1] + ;; false + %D = and i1 %B, %C ; <i1> [#uses=1] + ret i1 %D } -bool %test23(int %A) { - %B = setgt int %A, 1 - %C = setle int %A, 2 - %D = and bool %B, %C ;; A == 2 - ret bool %D +define i1 @test23(i32 %A) { + %B = icmp sgt i32 %A, 1 ; <i1> [#uses=1] + %C = icmp sle i32 %A, 2 ; <i1> [#uses=1] + ;; A == 2 + %D = and i1 %B, %C ; <i1> [#uses=1] + ret i1 %D } -bool %test24(int %A) { - %B = setgt int %A, 1 - %C = setne int %A, 2 - %D = and bool %B, %C ;; A > 2 - ret bool %D +define i1 @test24(i32 %A) { + %B = icmp sgt i32 %A, 1 ; <i1> [#uses=1] + %C = icmp ne i32 %A, 2 ; <i1> [#uses=1] + ;; A > 2 + %D = and i1 %B, %C ; <i1> [#uses=1] + ret i1 %D } -bool %test25(int %A) { - %B = setge int %A, 50 - %C = setlt int %A, 100 - %D = and bool %B, %C ;; (A-50) <u 50 - ret bool %D +define i1 @test25(i32 %A) { + %B = icmp sge i32 %A, 50 ; <i1> [#uses=1] + %C = icmp slt i32 %A, 100 ; <i1> [#uses=1] + ;; (A-50) <u 50 + %D = and i1 %B, %C ; <i1> [#uses=1] + ret i1 %D } -bool %test26(int %A) { - %B = setne int %A, 50 - %C = setne int %A, 51 - %D = and bool %B, %C ;; (A-50) > 1 - ret bool %D +define i1 @test26(i32 %A) { + %B = icmp ne i32 %A, 50 ; <i1> [#uses=1] + %C = icmp ne i32 %A, 51 ; <i1> [#uses=1] + ;; (A-50) > 1 + %D = and i1 %B, %C ; <i1> [#uses=1] + ret i1 %D } -ubyte %test27(ubyte %A) { - %B = and ubyte %A, 4 - %C = sub ubyte %B, 16 - %D = and ubyte %C, 240 ;; 0xF0 - %E = add ubyte %D, 16 - ret ubyte %E +define i8 @test27(i8 %A) { + %B = and i8 %A, 4 ; <i8> [#uses=1] + %C = sub i8 %B, 16 ; <i8> [#uses=1] + ;; 0xF0 + %D = and i8 %C, -16 ; <i8> [#uses=1] + %E = add i8 %D, 16 ; <i8> [#uses=1] + ret i8 %E } -int %test28(int %X) { ;; This is juse a zero extending shr. - %Y = shr int %X, ubyte 24 ;; Sign extend - %Z = and int %Y, 255 ;; Mask out sign bits - ret int %Z +;; This is juse a zero extending shr. +define i32 @test28(i32 %X) { + ;; Sign extend + %Y = ashr i32 %X, 24 ; <i32> [#uses=1] + ;; Mask out sign bits + %Z = and i32 %Y, 255 ; <i32> [#uses=1] + ret i32 %Z } -int %test29(ubyte %X) { - %Y = cast ubyte %X to int - %Z = and int %Y, 255 ;; Zero extend makes this unneeded. - ret int %Z +define i32 @test29(i8 %X) { + %Y = zext i8 %X to i32 ; <i32> [#uses=1] + ;; Zero extend makes this unneeded. + %Z = and i32 %Y, 255 ; <i32> [#uses=1] + ret i32 %Z } -int %test30(bool %X) { - %Y = cast bool %X to int - %Z = and int %Y, 1 - ret int %Z +define i32 @test30(i1 %X) { + %Y = zext i1 %X to i32 ; <i32> [#uses=1] + %Z = and i32 %Y, 1 ; <i32> [#uses=1] + ret i32 %Z } -uint %test31(bool %X) { - %Y = cast bool %X to uint - %Z = shl uint %Y, ubyte 4 - %A = and uint %Z, 16 - ret uint %A +define i32 @test31(i1 %X) { + %Y = zext i1 %X to i32 ; <i32> [#uses=1] + %Z = shl i32 %Y, 4 ; <i32> [#uses=1] + %A = and i32 %Z, 16 ; <i32> [#uses=1] + ret i32 %A } -uint %test32(uint %In) { - %Y = and uint %In, 16 - %Z = shr uint %Y, ubyte 2 - %A = and uint %Z, 1 - ret uint %A +define i32 @test32(i32 %In) { + %Y = and i32 %In, 16 ; <i32> [#uses=1] + %Z = lshr i32 %Y, 2 ; <i32> [#uses=1] + %A = and i32 %Z, 1 ; <i32> [#uses=1] + ret i32 %A } -uint %test33(uint %b) { ;; Code corresponding to one-bit bitfield ^1. - %tmp.4.mask = and uint %b, 1 - %tmp.10 = xor uint %tmp.4.mask, 1 - %tmp.12 = and uint %b, 4294967294 - %tmp.13 = or uint %tmp.12, %tmp.10 - ret uint %tmp.13 +;; Code corresponding to one-bit bitfield ^1. +define i32 @test33(i32 %b) { + %tmp.4.mask = and i32 %b, 1 ; <i32> [#uses=1] + %tmp.10 = xor i32 %tmp.4.mask, 1 ; <i32> [#uses=1] + %tmp.12 = and i32 %b, -2 ; <i32> [#uses=1] + %tmp.13 = or i32 %tmp.12, %tmp.10 ; <i32> [#uses=1] + ret i32 %tmp.13 } -int %test34(int %A, int %B) { - %tmp.2 = or int %B, %A - %tmp.4 = and int %tmp.2, %B - ret int %tmp.4 +define i32 @test34(i32 %A, i32 %B) { + %tmp.2 = or i32 %B, %A ; <i32> [#uses=1] + %tmp.4 = and i32 %tmp.2, %B ; <i32> [#uses=1] + ret i32 %tmp.4 } diff --git a/test/Transforms/InstCombine/bit-tracking.ll b/test/Transforms/InstCombine/bit-tracking.ll index 2575ae5520..d090c69d7f 100644 --- a/test/Transforms/InstCombine/bit-tracking.ll +++ b/test/Transforms/InstCombine/bit-tracking.ll @@ -1,26 +1,26 @@ ; This file contains various testcases that require tracking whether bits are ; set or cleared by various instructions. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -instcombine | llvm-dis |\ +; RUN: llvm-as < %s | opt -instcombine -instcombine | llvm-dis |\ ; RUN: not grep %ELIM ; Reduce down to a single XOR -int %test3(int %B) { - %ELIMinc = and int %B, 1 - %tmp.5 = xor int %ELIMinc, 1 - %ELIM7 = and int %B, -2 - %tmp.8 = or int %tmp.5, %ELIM7 - ret int %tmp.8 +define i32 @test3(i32 %B) { + %ELIMinc = and i32 %B, 1 ; <i32> [#uses=1] + %tmp.5 = xor i32 %ELIMinc, 1 ; <i32> [#uses=1] + %ELIM7 = and i32 %B, -2 ; <i32> [#uses=1] + %tmp.8 = or i32 %tmp.5, %ELIM7 ; <i32> [#uses=1] + ret i32 %tmp.8 } ; Finally, a bigger case where we chain things together. This corresponds to ; incrementing a single-bit bitfield, which should become just an xor. -int %test4(int %B) { - %ELIM3 = shl int %B, ubyte 31 - %ELIM4 = shr int %ELIM3, ubyte 31 - %inc = add int %ELIM4, 1 - %ELIM5 = and int %inc, 1 - %ELIM7 = and int %B, -2 - %tmp.8 = or int %ELIM5, %ELIM7 - ret int %tmp.8 +define i32 @test4(i32 %B) { + %ELIM3 = shl i32 %B, 31 ; <i32> [#uses=1] + %ELIM4 = ashr i32 %ELIM3, 31 ; <i32> [#uses=1] + %inc = add i32 %ELIM4, 1 ; <i32> [#uses=1] + %ELIM5 = and i32 %inc, 1 ; <i32> [#uses=1] + %ELIM7 = and i32 %B, -2 ; <i32> [#uses=1] + %tmp.8 = or i32 %ELIM5, %ELIM7 ; <i32> [#uses=1] + ret i32 %tmp.8 } diff --git a/test/Transforms/InstCombine/bittest.ll b/test/Transforms/InstCombine/bittest.ll index 1ba42895a1..ad4f2363e0 100644 --- a/test/Transforms/InstCombine/bittest.ll +++ b/test/Transforms/InstCombine/bittest.ll @@ -1,29 +1,30 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -simplifycfg | llvm-dis |\ +; RUN: llvm-as < %s | opt -instcombine -simplifycfg | llvm-dis |\ ; RUN: not grep {call void %abort} -%b_rec.0 = external global int +@b_rec.0 = external global i32 ; <i32*> [#uses=2] -void %_Z12h000007_testv(uint *%P) { +define void @_Z12h000007_testv(i32* %P) { entry: - %tmp.2 = load int* %b_rec.0 ; <int> [#uses=1] - %tmp.9 = or int %tmp.2, -989855744 ; <int> [#uses=2] - %tmp.16 = and int %tmp.9, -805306369 ; <int> [#uses=2] - %tmp.17 = and int %tmp.9, -973078529 ; <int> [#uses=1] - store int %tmp.17, int* %b_rec.0 - %tmp.17.shrunk = cast int %tmp.16 to uint ; <uint> [#uses=1] - %tmp.22 = and uint %tmp.17.shrunk, 3221225472 ; <uint> [#uses=1] - %tmp.23 = seteq uint %tmp.22, 3221225472 ; <bool> [#uses=1] - br bool %tmp.23, label %endif.0, label %then.0 + %tmp.2 = load i32* @b_rec.0 ; <i32> [#uses=1] + %tmp.9 = or i32 %tmp.2, -989855744 ; <i32> [#uses=2] + %tmp.16 = and i32 %tmp.9, -805306369 ; <i32> [#uses=2] + %tmp.17 = and i32 %tmp.9, -973078529 ; <i32> [#uses=1] + store i32 %tmp.17, i32* @b_rec.0 + %tmp.17.shrunk = bitcast i32 %tmp.16 to i32 ; <i32> [#uses=1] + %tmp.22 = and i32 %tmp.17.shrunk, -1073741824 ; <i32> [#uses=1] + %tmp.23 = icmp eq i32 %tmp.22, -1073741824 ; <i1> [#uses=1] + br i1 %tmp.23, label %endif.0, label %then.0 then.0: ; preds = %entry - tail call void %abort( ) + tail call void @abort( ) unreachable endif.0: ; preds = %entry - %tmp.17.shrunk2 = cast int %tmp.16 to uint ; <uint> [#uses=1] - %tmp.27.mask = and uint %tmp.17.shrunk2, 100663295 ; <uint> [#uses=1] - store uint %tmp.27.mask, uint* %P + %tmp.17.shrunk2 = bitcast i32 %tmp.16 to i32 ; <i32> [#uses=1] + %tmp.27.mask = and i32 %tmp.17.shrunk2, 100663295 ; <i32> [#uses=1] + store i32 %tmp.27.mask, i32* %P ret void } -declare void %abort() +declare void @abort() + diff --git a/test/Transforms/InstCombine/bswap-fold.ll b/test/Transforms/InstCombine/bswap-fold.ll index 8dad43fa73..3d354a1021 100644 --- a/test/Transforms/InstCombine/bswap-fold.ll +++ b/test/Transforms/InstCombine/bswap-fold.ll @@ -1,28 +1,29 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep ret | count 3 -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep call.*bswap -bool %test1(ushort %tmp2) { - %tmp10 = call ushort %llvm.bswap.i16( ushort %tmp2 ) - %tmp = seteq ushort %tmp10, 1 - ret bool %tmp +define i1 @test1(i16 %tmp2) { + %tmp10 = call i16 @llvm.bswap.i16( i16 %tmp2 ) ; <i16> [#uses=1] + %tmp = icmp eq i16 %tmp10, 1 ; <i1> [#uses=1] + ret i1 %tmp } -bool %test2(uint %tmp) { - %tmp34 = tail call uint %llvm.bswap.i32( uint %tmp ) - %tmp = seteq uint %tmp34, 1 - ret bool %tmp +define i1 @test2(i32 %tmp) { + %tmp34 = tail call i32 @llvm.bswap.i32( i32 %tmp ) ; <i32> [#uses=1] + %tmp.upgrd.1 = icmp eq i32 %tmp34, 1 ; <i1> [#uses=1] + ret i1 %tmp.upgrd.1 } -declare uint %llvm.bswap.i32(uint) +declare i32 @llvm.bswap.i32(i32) -bool %test3(ulong %tmp) { - %tmp34 = tail call ulong %llvm.bswap.i64( ulong %tmp ) - %tmp = seteq ulong %tmp34, 1 - ret bool %tmp +define i1 @test3(i64 %tmp) { + %tmp34 = tail call i64 @llvm.bswap.i64( i64 %tmp ) ; <i64> [#uses=1] + %tmp.upgrd.2 = icmp eq i64 %tmp34, 1 ; <i1> [#uses=1] + ret i1 %tmp.upgrd.2 } -declare ulong %llvm.bswap.i64(ulong) +declare i64 @llvm.bswap.i64(i64) + +declare i16 @llvm.bswap.i16(i16) -declare ushort %llvm.bswap.i16(ushort) diff --git a/test/Transforms/InstCombine/bswap.ll b/test/Transforms/InstCombine/bswap.ll index d8be73c45e..5db4e73a54 100644 --- a/test/Transforms/InstCombine/bswap.ll +++ b/test/Transforms/InstCombine/bswap.ll @@ -1,62 +1,57 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep {call.*llvm.bswap} | count 5 -; END. -uint %test1(uint %i) { - %tmp1 = shr uint %i, ubyte 24 ; <uint> [#uses=1] - %tmp3 = shr uint %i, ubyte 8 ; <uint> [#uses=1] - %tmp4 = and uint %tmp3, 65280 ; <uint> [#uses=1] - %tmp5 = or uint %tmp1, %tmp4 ; <uint> [#uses=1] - %tmp7 = shl uint %i, ubyte 8 ; <uint> [#uses=1] - %tmp8 = and uint %tmp7, 16711680 ; <uint> [#uses=1] - %tmp9 = or uint %tmp5, %tmp8 ; <uint> [#uses=1] - %tmp11 = shl uint %i, ubyte 24 ; <uint> [#uses=1] - %tmp12 = or uint %tmp9, %tmp11 ; <uint> [#uses=1] - ret uint %tmp12 +define i32 @test1(i32 %i) { + %tmp1 = lshr i32 %i, 24 ; <i32> [#uses=1] + %tmp3 = lshr i32 %i, 8 ; <i32> [#uses=1] + %tmp4 = and i32 %tmp3, 65280 ; <i32> [#uses=1] + %tmp5 = or i32 %tmp1, %tmp4 ; <i32> [#uses=1] + %tmp7 = shl i32 %i, 8 ; <i32> [#uses=1] + %tmp8 = and i32 %tmp7, 16711680 ; <i32> [#uses=1] + %tmp9 = or i32 %tmp5, %tmp8 ; <i32> [#uses=1] + %tmp11 = shl i32 %i, 24 ; <i32> [#uses=1] + %tmp12 = or i32 %tmp9, %tmp11 ; <i32> [#uses=1] + ret i32 %tmp12 } -uint %test2(uint %arg) { - %tmp2 = shl uint %arg, ubyte 24 ; <uint> [#uses=1] - %tmp4 = shl uint %arg, ubyte 8 ; <uint> [#uses=1] - %tmp5 = and uint %tmp4, 16711680 ; <uint> [#uses=1] - %tmp6 = or uint %tmp2, %tmp5 ; <uint> [#uses=1] - %tmp8 = shr uint %arg, ubyte 8 ; <uint> [#uses=1] - %tmp9 = and uint %tmp8, 65280 ; <uint> [#uses=1] - %tmp10 = or uint %tmp6, %tmp9 ; <uint> [#uses=1] - %tmp12 = shr uint %arg, ubyte 24 ; <uint> [#uses=1] - %tmp14 = or uint %tmp10, %tmp12 ; <uint> [#uses=1] - ret uint %tmp14 +define i32 @test2(i32 %arg) { + %tmp2 = shl i32 %arg, 24 ; <i32> [#uses=1] + %tmp4 = shl i32 %arg, 8 ; <i32> [#uses=1] + %tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1] + %tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1] + %tmp8 = lshr i32 %arg, 8 ; <i32> [#uses=1] + %tmp9 = and i32 %tmp8, 65280 ; <i32> [#uses=1] + %tmp10 = or i32 %tmp6, %tmp9 ; <i32> [#uses=1] + %tmp12 = lshr i32 %arg, 24 ; <i32> [#uses=1] + %tmp14 = or i32 %tmp10, %tmp12 ; <i32> [#uses=1] + ret i32 %tmp14 } -ushort %test3(ushort %s) { - %tmp2 = shr ushort %s, ubyte 8 - %tmp4 = shl ushort %s, ubyte 8 - %tmp5 = or ushort %tmp2, %tmp4 - ret ushort %tmp5 +define i16 @test3(i16 %s) { + %tmp2 = lshr i16 %s, 8 ; <i16> [#uses=1] + %tmp4 = shl i16 %s, 8 ; <i16> [#uses=1] + %tmp5 = or i16 %tmp2, %tmp4 ; <i16> [#uses=1] + ret i16 %tmp5 } -ushort %test4(ushort %s) { - %tmp2 = shr ushort %s, ubyte 8 - %tmp4 = shl ushort %s, ubyte 8 - %tmp5 = or ushort %tmp4, %tmp2 - ret ushort %tmp5 +define i16 @test4(i16 %s) { + %tmp2 = lshr i16 %s, 8 ; <i16> [#uses=1] + %tmp4 = shl i16 %s, 8 ; <i16> [#uses=1] + %tmp5 = or i16 %tmp4, %tmp2 ; <i16> [#uses=1] + ret i16 %tmp5 } -; unsigned short test5(unsigned short a) { -; return ((a & 0xff00) >> 8 | (a & 0x00ff) << 8); -;} -ushort %test5(ushort %a) { - %tmp = zext ushort %a to int - %tmp1 = and int %tmp, 65280 - %tmp2 = ashr int %tmp1, ubyte 8 - %tmp2 = trunc int %tmp2 to short - %tmp4 = and int %tmp, 255 - %tmp5 = shl int %tmp4, ubyte 8 - %tmp5 = trunc int %tmp5 to short - %tmp = or short %tmp2, %tmp5 - %tmp6 = bitcast short %tmp to ushort - %tmp6 = zext ushort %tmp6 to int - %retval = trunc int %tmp6 to ushort - ret ushort %retval +define i16 @test5(i16 %a) { + %tmp = zext i16 %a to i32 ; <i32> [#uses=2] + %tmp1 = and i32 %tmp, 65280 ; <i32> [#uses=1] + %tmp2 = ashr i32 %tmp1, 8 ; <i32> [#uses=1] + %tmp2.upgrd.1 = trunc i32 %tmp2 to i16 ; <i16> [#uses=1] + %tmp4 = and i32 %tmp, 255 ; <i32> [#uses=1] + %tmp5 = shl i32 %tmp4, 8 ; <i32> [#uses=1] + %tmp5.upgrd.2 = trunc i32 %tmp5 to i16 ; <i16> [#uses=1] + %tmp.upgrd.3 = or i16 %tmp2.upgrd.1, %tmp5.upgrd.2 ; <i16> [#uses=1] + %tmp6 = bitcast i16 %tmp.upgrd.3 to i16 ; <i16> [#uses=1] + %tmp6.upgrd.4 = zext i16 %tmp6 to i32 ; <i32> [#uses=1] + %retval = trunc i32 %tmp6.upgrd.4 to i16 ; <i16> [#uses=1] + ret i16 %retval } - diff --git a/test/Transforms/InstCombine/call-cast-target.ll b/test/Transforms/InstCombine/call-cast-target.ll index 6d964905aa..1a02514d1a 100644 --- a/test/Transforms/InstCombine/call-cast-target.ll +++ b/test/Transforms/InstCombine/call-cast-target.ll @@ -1,16 +1,14 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep call | not grep bitcast -target endian = little -target pointersize = 32 +target datalayout = "e-p:32:32" target triple = "i686-pc-linux-gnu" -implementation ; Functions: - -int %main() { +define i32 @main() { entry: - %tmp = call int cast (sbyte* (int*)* %ctime to int (int*)*)( int* null ) - ret int %tmp + %tmp = call i32 bitcast (i8* (i32*)* @ctime to i32 (i32*)*)( i32* null ) ; <i32> [#uses=1] + ret i32 %tmp } -declare sbyte* %ctime(int*) +declare i8* @ctime(i32*) + diff --git a/test/Transforms/InstCombine/call-intrinsics.ll b/test/Transforms/InstCombine/call-intrinsics.ll index e8549981e1..e1c60570f1 100644 --- a/test/Transforms/InstCombine/call-intrinsics.ll +++ b/test/Transforms/InstCombine/call-intrinsics.ll @@ -1,17 +1,19 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis +; RUN: llvm-as < %s | opt -instcombine | llvm-dis -declare void %llvm.memmove.i32(sbyte*, sbyte*, uint, uint) -declare void %llvm.memcpy.i32(sbyte*, sbyte*, uint, uint) -declare void %llvm.memset.i32(sbyte*, ubyte, uint, uint) +@X = global i8 0 ; <i8*> [#uses=3] +@Y = global i8 12 ; <i8*> [#uses=2] -%X = global sbyte 0 -%Y = global sbyte 12 +declare void @llvm.memmove.i32(i8*, i8*, i32, i32) -void %zero_byte_test() { - ; These process zero bytes, so they are a noop. - call void %llvm.memmove.i32(sbyte* %X, sbyte* %Y, uint 0, uint 100) - call void %llvm.memcpy.i32(sbyte* %X, sbyte* %Y, uint 0, uint 100) - call void %llvm.memset.i32(sbyte* %X, ubyte 123, uint 0, uint 100) - ret void +declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) + +declare void @llvm.memset.i32(i8*, i8, i32, i32) + +define void @zero_byte_test() { + ; These process zero bytes, so they are a noop. + call void @llvm.memmove.i32( i8* @X, i8* @Y, i32 0, i32 100 ) + call void @llvm.memcpy.i32( i8* @X, i8* @Y, i32 0, i32 100 ) + call void @llvm.memset.i32( i8* @X, i8 123, i32 0, i32 100 ) + ret void } diff --git a/test/Transforms/InstCombine/canonicalize_branch.ll b/test/Transforms/InstCombine/canonicalize_branch.ll index 032e293188..79f02e7320 100644 --- a/test/Transforms/InstCombine/canonicalize_branch.ll +++ b/test/Transforms/InstCombine/canonicalize_branch.ll @@ -1,28 +1,36 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ -; RUN: not grep {setne\|setle\|setge} - -int %test1(uint %X, uint %Y) { - %C = setne uint %X, %Y - br bool %C, label %T, label %F -T: - ret int 12 -F: - ret int 123 +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ +; RUN: not grep {icmp ne\|icmp ule\|icmp uge} + +define i32 @test1(i32 %X, i32 %Y) { + %C = icmp ne i32 %X, %Y ; <i1> [#uses=1] + br i1 %C, label %T, label %F + +T: ; preds = %0 + ret i32 12 + +F: ; preds = %0 + ret i32 123 } -int %test2(uint %X, uint %Y) { - %C = setle uint %X, %Y - br bool %C, label %T, label %F -T: - ret int 12 -F: - ret int 123 +define i32 @test2(i32 %X, i32 %Y) { + %C = icmp ule i32 %X, %Y ; <i1> [#uses=1] + br i1 %C, label %T, label %F + +T: ; preds = %0 + ret i32 12 + +F: ; preds = %0 + ret i32 123 } -int %test3(uint %X, uint %Y) { - %C = setge uint %X, %Y - br bool %C, label %T, label %F -T: - ret int 12 -F: - ret int 123 + +define i32 @test3(i32 %X, i32 %Y) { + %C = icmp uge i32 %X, %Y ; <i1> [#uses=1] + br i1 %C, label %T, label %F + +T: ; preds = %0 + ret i32 12 + +F: ; preds = %0 + ret i32 123 } + diff --git a/test/Transforms/InstCombine/cast-and-cast.ll b/test/Transforms/InstCombine/cast-and-cast.ll index 8da9d3370d..f90cb7499a 100644 --- a/test/Transforms/InstCombine/cast-and-cast.ll +++ b/test/Transforms/InstCombine/cast-and-cast.ll @@ -1,16 +1,17 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep bitcast -bool %test1(uint %val) { - %t1 = bitcast uint %val to int - %t2 = and int %t1, 1 - %t3 = trunc int %t2 to bool - ret bool %t3 +define i1 @test1(i32 %val) { + %t1 = bitcast i32 %val to i32 ; <i32> [#uses=1] + %t2 = and i32 %t1, 1 ; <i32> [#uses=1] + %t3 = trunc i32 %t2 to i1 ; <i1> [#uses=1] + ret i1 %t3 } -short %test1(uint %val) { - %t1 = bitcast uint %val to int - %t2 = and int %t1, 1 - %t3 = trunc int %t2 to short - ret short %t3 +define i16 @test1.upgrd.1(i32 %val) { + %t1 = bitcast i32 %val to i32 ; <i32> [#uses=1] + %t2 = and i32 %t1, 1 ; <i32> [#uses=1] + %t3 = trunc i32 %t2 to i16 ; <i16> [#uses=1] + ret i16 %t3 } + diff --git a/test/Transforms/InstCombine/cast-cast-to-and.ll b/test/Transforms/InstCombine/cast-cast-to-and.ll index 97386bb538..bb7c3dd754 100644 --- a/test/Transforms/InstCombine/cast-cast-to-and.ll +++ b/test/Transforms/InstCombine/cast-cast-to-and.ll @@ -1,9 +1,9 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ -; RUN: not grep ubyte +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ +; RUN: not grep i8 -int %test1(uint %X) { - %Y = cast uint %X to ubyte ;; Turn into an AND - %Z = cast ubyte %Y to int - ret int %Z +define i32 @test1(i32 %X) { + %Y = trunc i32 %X to i8 ; <i8> [#uses=1] + %Z = zext i8 %Y to i32 ; <i32> [#uses=1] + ret i32 %Z } diff --git a/test/Transforms/InstCombine/cast-load-gep.ll b/test/Transforms/InstCombine/cast-load-gep.ll index 4fa63ddd6a..bc2c7b3516 100644 --- a/test/Transforms/InstCombine/cast-load-gep.ll +++ b/test/Transforms/InstCombine/cast-load-gep.ll @@ -1,23 +1,20 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -globaldce | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine -globaldce | llvm-dis | \ ; RUN: not grep Array ; Pulling the cast out of the load allows us to eliminate the load, and then ; the whole array. -%unop = type {int } -%op = type {float} + %op = type { float } + %unop = type { i32 } +@Array = internal constant [1 x %op* (%op*)*] [ %op* (%op*)* @foo ] ; <[1 x %op* (%op*)*]*> [#uses=1] -%Array = internal constant [1 x %op* (%op*)*] [ %op* (%op*)* %foo ] - -implementation - -%op* %foo(%op* %X) { - ret %op* %X +define %op* @foo(%op* %X) { + ret %op* %X } -%unop* %caller(%op* %O) { - %tmp = load %unop* (%op*)** cast ([1 x %op* (%op*)*]* %Array to %unop* (%op*)**) - %tmp.2 = call %unop* (%op*)* %tmp(%op* %O) - ret %unop* %tmp.2 +define %unop* @caller(%op* %O) { + %tmp = load %unop* (%op*)** bitcast ([1 x %op* (%op*)*]* @Array to %unop* (%op*)**); <%unop* (%op*)*> [#uses=1] + %tmp.2 = call %unop* %tmp( %op* %O ) ; <%unop*> [#uses=1] + ret %unop* %tmp.2 } diff --git a/test/Transforms/InstCombine/cast-malloc.ll b/test/Transforms/InstCombine/cast-malloc.ll index 565787c6dd..d05f6b04fd 100644 --- a/test/Transforms/InstCombine/cast-malloc.ll +++ b/test/Transforms/InstCombine/cast-malloc.ll @@ -1,13 +1,15 @@ ; test that casted mallocs get converted to malloc of the right type -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep bitcast ; The target datalayout is important for this test case. We have to tell ; instcombine that the ABI alignment for a long is 4-bytes, not 8, otherwise ; it won't do the transform. target datalayout = "e-i64:32:64" -int* %test(uint %size) { - %X = malloc long, uint %size - %ret = bitcast long* %X to int* - ret int* %ret + +define i32* @test(i32 %size) { + %X = malloc i64, i32 %size ; <i64*> [#uses=1] + %ret = bitcast i64* %X to i32* ; <i32*> [#uses=1] + ret i32* %ret } + diff --git a/test/Transforms/InstCombine/cast-propagate.ll b/test/Transforms/InstCombine/cast-propagate.ll index d556473932..c00f953741 100644 --- a/test/Transforms/InstCombine/cast-propagate.ll +++ b/test/Transforms/InstCombine/cast-propagate.ll @@ -1,10 +1,11 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -mem2reg | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine -mem2reg | llvm-dis | \ ; RUN: not grep load -int %test1(uint* %P) { - %A = alloca uint - store uint 123, uint* %A - %Q = cast uint* %A to int* ; Cast the result of the load not the source - %V = load int* %Q - ret int %V +define i32 @test1(i32* %P) { + %A = alloca i32 ; <i32*> [#uses=2] + store i32 123, i32* %A + ; Cast the result of the load not the source + %Q = bitcast i32* %A to i32* ; <i32*> [#uses=1] + %V = load i32* %Q ; <i32> [#uses=1] + ret i32 %V } diff --git a/test/Transforms/InstCombine/cast-set.ll b/test/Transforms/InstCombine/cast-set.ll index 801aa1bfc5..091f148a24 100644 --- a/test/Transforms/InstCombine/cast-set.ll +++ b/test/Transforms/InstCombine/cast-set.ll @@ -1,49 +1,51 @@ ; This tests for various complex cast elimination cases instcombine should ; handle. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | notcast +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | notcast -bool %test1(int %X) { - %A = cast int %X to uint - %c = setne uint %A, 12 ; Convert to setne int %X, 12 - ret bool %c +define i1 @test1(i32 %X) { + %A = bitcast i32 %X to i32 ; <i32> [#uses=1] + ; Convert to setne int %X, 12 + %c = icmp ne i32 %A, 12 ; <i1> [#uses=1] + ret i1 %c } -bool %test2(int %X, int %Y) { - %A = cast int %X to uint - %B = cast int %Y to uint - %c = setne uint %A, %B ; Convert to setne int %X, %Y - ret bool %c +define i1 @test2(i32 %X, i32 %Y) { + %A = bitcast i32 %X to i32 ; <i32> [#uses=1] + %B = bitcast i32 %Y to i32 ; <i32> [#uses=1] + ; Convert to setne int %X, %Y + %c = icmp ne i32 %A, %B ; <i1> [#uses=1] + ret i1 %c } -int %test4(int %A) { - %B = cast int %A to uint - %C = shl uint %B, ubyte 2 - %D = cast uint %C to int - ret int %D +define i32 @test4(i32 %A) { + %B = bitcast i32 %A to i32 ; <i32> [#uses=1] + %C = shl i32 %B, 2 ; <i32> [#uses=1] + %D = bitcast i32 %C to i32 ; <i32> [#uses=1] + ret i32 %D } -short %test5(short %A) { - %B = cast short %A to uint - %C = and uint %B, 15 - %D = cast uint %C to short - ret short %D +define i16 @test5(i16 %A) { + %B = sext i16 %A to i32 ; <i32> [#uses=1] + %C = and i32 %B, 15 ; <i32> [#uses=1] + %D = trunc i32 %C to i16 ; <i16> [#uses=1] + ret i16 %D } -bool %test6(bool %A) { - %B = cast bool %A to int - %C = setne int %B, 0 - ret bool %C +define i1 @test6(i1 %A) { + %B = zext i1 %A to i32 ; <i32> [#uses=1] + %C = icmp ne i32 %B, 0 ; <i1> [#uses=1] + ret i1 %C } -bool %test6a(bool %A) { - %B = cast bool %A to int - %C = setne int %B, -1 ; Always true! - ret bool %C +define i1 @test6a(i1 %A) { + %B = zext i1 %A to i32 ; <i32> [#uses=1] + %C = icmp ne i32 %B, -1 ; <i1> [#uses=1] + ret i1 %C } -bool %test7(sbyte* %A) { - %B = cast sbyte* %A to int* - %C = seteq int* %B, null - ret bool %C +define i1 @test7(i8* %A) { + %B = bitcast i8* %A to i32* ; <i32*> [#uses=1] + %C = icmp eq i32* %B, null ; <i1> [#uses=1] + ret i1 %C } diff --git a/test/Transforms/InstCombine/cast_ptr.ll b/test/Transforms/InstCombine/cast_ptr.ll index c067988915..fd600a8830 100644 --- a/test/Transforms/InstCombine/cast_ptr.ll +++ b/test/Transforms/InstCombine/cast_ptr.ll @@ -1,20 +1,19 @@ ; Tests to make sure elimination of casts is working correctly -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | notcast +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | notcast -target pointersize = 32 +target datalayout = "p:32:32" -implementation - -sbyte* %test1(sbyte* %t) { - %tmpc = cast sbyte* %t to uint - %tmpa = add uint %tmpc, 32 - %tv = cast uint %tmpa to sbyte* - ret sbyte* %tv +define i8* @test1(i8* %t) { + %tmpc = ptrtoint i8* %t to i32 ; <i32> [#uses=1] + %tmpa = add i32 %tmpc, 32 ; <i32> [#uses=1] + %tv = inttoptr i32 %tmpa to i8* ; <i8*> [#uses=1] + ret i8* %tv } -bool %test2(sbyte* %a, sbyte* %b) { -%tmpa = cast sbyte* %a to uint -%tmpb = cast sbyte* %b to uint -%r = seteq uint %tmpa, %tmpb -ret bool %r +define i1 @test2(i8* %a, i8* %b) { + %tmpa = ptrtoint i8* %a to i32 ; <i32> [#uses=1] + %tmpb = ptrtoint i8* %b to i32 ; <i32> [#uses=1] + %r = icmp eq i32 %tmpa, %tmpb ; <i1> [#uses=1] + ret i1 %r } + diff --git a/test/Transforms/InstCombine/fpcast.ll b/test/Transforms/InstCombine/fpcast.ll index 0c387676d4..7f25092976 100644 --- a/test/Transforms/InstCombine/fpcast.ll +++ b/test/Transforms/InstCombine/fpcast.ll @@ -1,14 +1,15 @@ ; Test some floating point casting cases -; RUN: llvm-upgrade %s -o - | llvm-as | opt -instcombine | llvm-dis | notcast -; RUN: llvm-upgrade %s -o - | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as %s -o - | opt -instcombine | llvm-dis | notcast +; RUN: llvm-as %s -o - | opt -instcombine | llvm-dis | \ ; RUN: egrep {ret i8 \(-1\)\|\(255\)} -sbyte %test1() { - %x = fptoui float 255.0 to sbyte - ret sbyte %x +define i8 @test1() { + %x = fptoui float 2.550000e+02 to i8 ; <i8> [#uses=1] + ret i8 %x } -ubyte %test2() { - %x = fptosi float -1.0 to ubyte - ret ubyte %x +define i8 @test2() { + %x = fptosi float -1.000000e+00 to i8 ; <i8> [#uses=1] + ret i8 %x } + diff --git a/test/Transforms/InstCombine/getelementptr-setcc.ll b/test/Transforms/InstCombine/getelementptr-setcc.ll index 55102f49b2..0a6d720d74 100644 --- a/test/Transforms/InstCombine/getelementptr-setcc.ll +++ b/test/Transforms/InstCombine/getelementptr-setcc.ll @@ -1,34 +1,31 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep getelementptr -; END. -bool %test1(short* %P, int %I, int %J) { - %X = getelementptr short* %P, int %I - %Y = getelementptr short* %P, int %J - - %C = setlt short* %X, %Y - ret bool %C +define i1 @test1(i16* %P, i32 %I, i32 %J) { + %X = getelementptr i16* %P, i32 %I ; <i16*> [#uses=1] + %Y = getelementptr i16* %P, i32 %J ; <i16*> [#uses=1] + %C = icmp ult i16* %X, %Y ; <i1> [#uses=1] + ret i1 %C } -bool %test2(short* %P, int %I) { - %X = getelementptr short* %P, int %I - - %C = setlt short* %X, %P - ret bool %C +define i1 @test2(i16* %P, i32 %I) { + %X = getelementptr i16* %P, i32 %I ; <i16*> [#uses=1] + %C = icmp ult i16* %X, %P ; <i1> [#uses=1] + ret i1 %C } -int %test3(int* %P, int %A, int %B) { - %tmp.4 = getelementptr int* %P, int %A ; <int*> [#uses=1] - %tmp.9 = getelementptr int* %P, int %B ; <int*> [#uses=1] - %tmp.10 = seteq int* %tmp.4, %tmp.9 ; <bool> [#uses=1] - %tmp.11 = cast bool %tmp.10 to int ; <int> [#uses=1] - ret int %tmp.11 +define i32 @test3(i32* %P, i32 %A, i32 %B) { + %tmp.4 = getelementptr i32* %P, i32 %A ; <i32*> [#uses=1] + %tmp.9 = getelementptr i32* %P, i32 %B ; <i32*> [#uses=1] + %tmp.10 = icmp eq i32* %tmp.4, %tmp.9 ; <i1> [#uses=1] + %tmp.11 = zext i1 %tmp.10 to i32 ; <i32> [#uses=1] + ret i32 %tmp.11 } -int %test4(int* %P, int %A, int %B) { - %tmp.4 = getelementptr int* %P, int %A ; <int*> [#uses=1] - %tmp.6 = seteq int* %tmp.4, %P ; <bool> [#uses=1] - %tmp.7 = cast bool %tmp.6 to int ; <int> [#uses=1] - ret int %tmp.7 +define i32 @test4(i32* %P, i32 %A, i32 %B) { + %tmp.4 = getelementptr i32* %P, i32 %A ; <i32*> [#uses=1] + %tmp.6 = icmp eq i32* %tmp.4, %P ; <i1> [#uses=1] + %tmp.7 = zext i1 %tmp.6 to i32 ; <i32> [#uses=1] + ret i32 %tmp.7 } diff --git a/test/Transforms/InstCombine/getelementptr_cast.ll b/test/Transforms/InstCombine/getelementptr_cast.ll index 5a0d132519..1d2fcce13d 100644 --- a/test/Transforms/InstCombine/getelementptr_cast.ll +++ b/test/Transforms/InstCombine/getelementptr_cast.ll @@ -1,11 +1,11 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: notcast {} {getelementptr.*} -%G = external global [3 x sbyte] +@G = external global [3 x i8] ; <[3 x i8]*> [#uses=1] -implementation - -ubyte *%foo(uint %Idx) { - %tmp = getelementptr ubyte* cast ([3 x sbyte]* %G to ubyte*), uint %Idx - ret ubyte* %tmp +define i8* @foo(i32 %Idx) { + %gep.upgrd.1 = zext i32 %Idx to i64 ; <i64> [#uses=1] + %tmp = getelementptr i8* getelementptr ([3 x i8]* @G, i32 0, i32 0), i64 %gep.upgrd.1 ; <i8*> [#uses=1] + ret i8* %tmp } + diff --git a/test/Transforms/InstCombine/getelementptr_const.ll b/test/Transforms/InstCombine/getelementptr_const.ll index e4265f4197..3de9ecec2d 100644 --- a/test/Transforms/InstCombine/getelementptr_const.ll +++ b/test/Transforms/InstCombine/getelementptr_const.ll @@ -1,14 +1,15 @@ ; Test folding of constantexpr geps into normal geps. -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine -gcse -instcombine | \ +; RUN: llvm-as < %s | opt -instcombine -gcse -instcombine | \ ; RUN: llvm-dis | not grep getelementptr -%Array = external global [40 x int] +@Array = external global [40 x i32] ; <[40 x i32]*> [#uses=2] -int %test(long %X) { - %A = getelementptr int* getelementptr ([40 x int]* %Array, long 0, long 0), long %X - %B = getelementptr [40 x int]* %Array, long 0, long %X - %a = cast int* %A to int - %b = cast int* %B to int - %c = sub int %a, %b - ret int %c +define i32 @test(i64 %X) { + %A = getelementptr i32* getelementptr ([40 x i32]* @Array, i64 0, i64 0), i64 %X ; <i32*> [#uses=1] + %B = getelementptr [40 x i32]* @Array, i64 0, i64 %X ; <i32*> [#uses=1] + %a = ptrtoint i32* %A to i32 ; <i32> [#uses=1] + %b = ptrtoint i32* %B to i32 ; <i32> [#uses=1] + %c = sub i32 %a, %b ; <i32> [#uses=1] + ret i32 %c } + diff --git a/test/Transforms/InstCombine/getelementptr_index.ll b/test/Transforms/InstCombine/getelementptr_index.ll index c4a7317bde..556096516f 100644 --- a/test/Transforms/InstCombine/getelementptr_index.ll +++ b/test/Transforms/InstCombine/getelementptr_index.ll @@ -1,10 +1,9 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | grep trunc +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep trunc -target endian = little -target pointersize = 32 +target datalayout = "e-p:32:32" -int* %test(int* %X, long %Idx) { - ; Should insert a cast to int on this target - %R = getelementptr int* %X, long %Idx - ret int* %R +define i32* @test(i32* %X, i64 %Idx) { + %R = getelementptr i32* %X, i64 %Idx ; <i32*> [#uses=1] + ret i32* %R } + diff --git a/test/Transforms/InstCombine/hoist_instr.ll b/test/Transforms/InstCombine/hoist_instr.ll index cfe704d569..e425bc2a5a 100644 --- a/test/Transforms/InstCombine/hoist_instr.ll +++ b/test/Transforms/InstCombine/hoist_instr.ll @@ -1,17 +1,17 @@ -; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | \ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: %prcontext div 1 | grep then: ;; This tests that the div is hoisted into the then block. - -int %foo(bool %C, int %A, int %B) { +define i32 @foo(i1 %C, i32 %A, i32 %B) { entry: - br bool %C, label %then, label %endif + br i1 %C, label %then, label %endif -then: - br label %endif +then: ; preds = %entry + br label %endif -endif: - %X = phi int [%A, %then], [15, %entry] - %Y = div int %X, 42 - ret int %Y +endif: ; preds = %then, %entry + %X = phi i32 [ %A, %then ], [ 15, %entry ] ; <i32> [#uses=1] + %Y = sdiv i32 %X, 42 ; <i32> [#uses=1] + ret i32 %Y } + diff --git a/test/Transforms/InstCombine/set.ll b/test/Transforms/InstCombine/set.ll index 76e606beaf..5e3ca0b51b 100644 --- a/test/Transforms/InstCombine/set.ll +++ b/test/Transforms/InstCombine/set.ll @@ -1,6 +1,7 @@ ; This test makes sure that these instructions are properly eliminated. ; ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep icmp +; END. @X = external global i32 ; <i32*> [#uses=2] diff --git a/test/Transforms/InstCombine/setcc-cast-cast.ll b/test/Transforms/InstCombine/setcc-cast-cast.ll index 79f40aced5..844d4c8eae 100644 --- a/test/Transforms/InstCombine/setcc-cast-cast.ll +++ b/test/Transforms/InstCombine/setcc-cast-cast.ll @@ -3,6 +3,7 @@ ; been when a setcc is used with two casts. ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep {br bool false} +; END. define i32 @bug(i8 %inbuff) { entry: diff --git a/test/Transforms/InstCombine/setcc-strength-reduce.ll b/test/Transforms/InstCombine/setcc-strength-reduce.ll index 4c420ab421..9931ccb2fd 100644 --- a/test/Transforms/InstCombine/setcc-strength-reduce.ll +++ b/test/Transforms/InstCombine/setcc-strength-reduce.ll @@ -4,7 +4,7 @@ ; ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: grep -v {icmp eq} | grep -v {icmp ne} | not grep icmp - +; END. define i1 @test1(i32 %A) { ; setne %A, 0 diff --git a/test/Transforms/InstCombine/shift.ll b/test/Transforms/InstCombine/shift.ll index feb7c64912..e17fd35fe4 100644 --- a/test/Transforms/InstCombine/shift.ll +++ b/test/Transforms/InstCombine/shift.ll @@ -1,6 +1,7 @@ ; This test makes sure that these instructions are properly eliminated. ; ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep sh +; END. define i32 @test1(i32 %A) { %B = shl i32 %A, 0 ; <i32> [#uses=1] diff --git a/test/Transforms/InstCombine/signext.ll b/test/Transforms/InstCombine/signext.ll index 4828937e3e..716662682d 100644 --- a/test/Transforms/InstCombine/signext.ll +++ b/test/Transforms/InstCombine/signext.ll @@ -1,5 +1,6 @@ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep {(and\|xor\|add\|shl\|shr)} +; END. define i32 @test1(i32 %x) { %tmp.1 = and i32 %x, 65535 ; <i32> [#uses=1] diff --git a/test/Transforms/InstCombine/vec_insert_to_shuffle.ll b/test/Transforms/InstCombine/vec_insert_to_shuffle.ll index 5f0ce6566d..df9cecd09c 100644 --- a/test/Transforms/InstCombine/vec_insert_to_shuffle.ll +++ b/test/Transforms/InstCombine/vec_insert_to_shuffle.ll @@ -4,6 +4,7 @@ ; RUN: not grep insertelement ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep extractelement +; END. define <4 x float> @test(<4 x float> %tmp, <4 x float> %tmp1) { %tmp4 = extractelement <4 x float> %tmp, i32 1 ; <float> [#uses=1] diff --git a/test/Transforms/InstCombine/xor.ll b/test/Transforms/InstCombine/xor.ll index 87e2cef3a1..d8b84a6122 100644 --- a/test/Transforms/InstCombine/xor.ll +++ b/test/Transforms/InstCombine/xor.ll @@ -2,6 +2,7 @@ ; ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | \ ; RUN: not grep {xor } +; END. @G1 = global i32 0 ; <i32*> [#uses=1] @G2 = global i32 0 ; <i32*> [#uses=1] |