X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FTransforms%2FInstCombine%2Fxor.ll;h=3722697f9892cb87123c2976616a9e7714365169;hb=b55dcfe47fbbcfc1dccd07cb27c02b9a86533d05;hp=0e6550c23337da4ef04e4d513a8a2bf106c30a17;hpb=f61641f7d4bf69e3df7c455d6afcd9c47b4c2cbb;p=oota-llvm.git diff --git a/test/Transforms/InstCombine/xor.ll b/test/Transforms/InstCombine/xor.ll index 0e6550c2333..3722697f989 100644 --- a/test/Transforms/InstCombine/xor.ll +++ b/test/Transforms/InstCombine/xor.ll @@ -1,106 +1,193 @@ ; This test makes sure that these instructions are properly eliminated. ; +; RUN: opt < %s -instcombine -S | \ +; RUN: not grep "xor " +; END. +@G1 = global i32 0 ; [#uses=1] +@G2 = global i32 0 ; [#uses=1] -; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep 'xor ' +define i1 @test0(i1 %A) { + %B = xor i1 %A, false ; [#uses=1] + ret i1 %B +} -implementation +define i32 @test1(i32 %A) { + %B = xor i32 %A, 0 ; [#uses=1] + ret i32 %B +} -bool %test0(bool %A) { - %B = xor bool %A, false - ret bool %B +define i1 @test2(i1 %A) { + %B = xor i1 %A, %A ; [#uses=1] + ret i1 %B } -int %test1(int %A) { - %B = xor int %A, 0 - ret int %B +define i32 @test3(i32 %A) { + %B = xor i32 %A, %A ; [#uses=1] + ret i32 %B } -bool %test2(bool %A) { - %B = xor bool %A, %A - ret bool %B +define i32 @test4(i32 %A) { + %NotA = xor i32 -1, %A ; [#uses=1] + %B = xor i32 %A, %NotA ; [#uses=1] + ret i32 %B } -int %test3(int %A) { - %B = xor int %A, %A - ret int %B +define i32 @test5(i32 %A) { + %t1 = or i32 %A, 123 ; [#uses=1] + %r = xor i32 %t1, 123 ; [#uses=1] + ret i32 %r } -int %test4(int %A) { ; A ^ ~A == -1 - %NotA = xor int -1, %A - %B = xor int %A, %NotA - ret int %B +define i8 @test6(i8 %A) { + %B = xor i8 %A, 17 ; [#uses=1] + %C = xor i8 %B, 17 ; [#uses=1] + ret i8 %C } -uint %test5(uint %A) { ; (A|B)^B == A & (~B) - %t1 = or uint %A, 123 - %r = xor uint %t1, 123 - ret uint %r +define i32 @test7(i32 %A, i32 %B) { + %A1 = and i32 %A, 7 ; [#uses=1] + %B1 = and i32 %B, 128 ; [#uses=1] + %C1 = xor i32 %A1, %B1 ; [#uses=1] + ret i32 %C1 } -ubyte %test6(ubyte %A) { - %B = xor ubyte %A, 17 - %C = xor ubyte %B, 17 - ret ubyte %C +define i8 @test8(i1 %c) { + %d = xor i1 %c, true ; [#uses=1] + br i1 %d, label %True, label %False + +True: ; preds = %0 + ret i8 1 + +False: ; preds = %0 + ret i8 3 } -; (A & C1)^(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 -int %test7(int %A, int %B) { +define i1 @test9(i8 %A) { + %B = xor i8 %A, 123 ; [#uses=1] + %C = icmp eq i8 %B, 34 ; [#uses=1] + ret i1 %C +} + +define i8 @test10(i8 %A) { + %B = and i8 %A, 3 ; [#uses=1] + %C = xor i8 %B, 4 ; [#uses=1] + ret i8 %C +} + +define i8 @test11(i8 %A) { + %B = or i8 %A, 12 ; [#uses=1] + %C = xor i8 %B, 4 ; [#uses=1] + ret i8 %C +} + +define i1 @test12(i8 %A) { + %B = xor i8 %A, 4 ; [#uses=1] + %c = icmp ne i8 %B, 0 ; [#uses=1] + ret i1 %c +} + +define i1 @test13(i8 %A, i8 %B) { + %C = icmp ult i8 %A, %B ; [#uses=1] + %D = icmp ugt i8 %A, %B ; [#uses=1] + %E = xor i1 %C, %D ; [#uses=1] + ret i1 %E +} + +define i1 @test14(i8 %A, i8 %B) { + %C = icmp eq i8 %A, %B ; [#uses=1] + %D = icmp ne i8 %B, %A ; [#uses=1] + %E = xor i1 %C, %D ; [#uses=1] + ret i1 %E +} + +define i32 @test15(i32 %A) { + %B = add i32 %A, -1 ; [#uses=1] + %C = xor i32 %B, -1 ; [#uses=1] + ret i32 %C +} + +define i32 @test16(i32 %A) { + %B = add i32 %A, 123 ; [#uses=1] + %C = xor i32 %B, -1 ; [#uses=1] + ret i32 %C +} + +define i32 @test17(i32 %A) { + %B = sub i32 123, %A ; [#uses=1] + %C = xor i32 %B, -1 ; [#uses=1] + ret i32 %C +} + +define i32 @test18(i32 %A) { + %B = xor i32 %A, -1 ; [#uses=1] + %C = sub i32 123, %B ; [#uses=1] + ret i32 %C +} + +define i32 @test19(i32 %A, i32 %B) { + %C = xor i32 %A, %B ; [#uses=1] + %D = xor i32 %C, %A ; [#uses=1] + ret i32 %D +} - %A1 = and int %A, 7 - %B1 = and int %B, 128 - %C1 = xor int %A1, %B1 - ret int %C1 +define void @test20(i32 %A, i32 %B) { + %tmp.2 = xor i32 %B, %A ; [#uses=2] + %tmp.5 = xor i32 %tmp.2, %B ; [#uses=2] + %tmp.8 = xor i32 %tmp.5, %tmp.2 ; [#uses=1] + store i32 %tmp.8, i32* @G1 + store i32 %tmp.5, i32* @G2 + ret void } -ubyte %test8(bool %c) { - %d = xor bool %c, true ; invert the condition - br bool %d, label %True, label %False -True: - ret ubyte 1 -False: - ret ubyte 3 +define i32 @test21(i1 %C, i32 %A, i32 %B) { + %C2 = xor i1 %C, true ; [#uses=1] + %D = select i1 %C2, i32 %A, i32 %B ; [#uses=1] + ret i32 %D } -bool %test9(ubyte %A) { - %B = xor ubyte %A, 123 ; xor can be eliminated - %C = seteq ubyte %B, 34 - ret bool %C +define i32 @test22(i1 %X) { + %Y = xor i1 %X, true ; [#uses=1] + %Z = zext i1 %Y to i32 ; [#uses=1] + %Q = xor i32 %Z, 1 ; [#uses=1] + ret i32 %Q } -ubyte %test10(ubyte %A) { - %B = and ubyte %A, 3 - %C = xor ubyte %B, 4 ; transform into an OR - ret ubyte %C +define i1 @test23(i32 %a, i32 %b) { + %tmp.2 = xor i32 %b, %a ; [#uses=1] + %tmp.4 = icmp eq i32 %tmp.2, %a ; [#uses=1] + ret i1 %tmp.4 } -ubyte %test11(ubyte %A) { - %B = or ubyte %A, 12 - %C = xor ubyte %B, 4 ; transform into an AND - ret ubyte %C +define i1 @test24(i32 %c, i32 %d) { + %tmp.2 = xor i32 %d, %c ; [#uses=1] + %tmp.4 = icmp ne i32 %tmp.2, %c ; [#uses=1] + ret i1 %tmp.4 } -bool %test12(ubyte %A) { - %B = xor ubyte %A, 4 - %c = setne ubyte %B, 0 - ret bool %c +define i32 @test25(i32 %g, i32 %h) { + %h2 = xor i32 %h, -1 ; [#uses=1] + %tmp2 = and i32 %h2, %g ; [#uses=1] + %tmp4 = xor i32 %tmp2, %g ; [#uses=1] + ret i32 %tmp4 } -bool %test13(ubyte %A, ubyte %B) { - %C = setlt ubyte %A, %B - %D = setgt ubyte %A, %B - %E = xor bool %C, %D ; E = setne %A, %B - ret bool %E +define i32 @test26(i32 %a, i32 %b) { + %b2 = xor i32 %b, -1 ; [#uses=1] + %tmp2 = xor i32 %a, %b2 ; [#uses=1] + %tmp4 = and i32 %tmp2, %a ; [#uses=1] + ret i32 %tmp4 } -bool %test14(ubyte %A, ubyte %B) { - %C = seteq ubyte %A, %B - %D = setne ubyte %B, %A - %E = xor bool %C, %D ; E = true - ret bool %E +define i32 @test27(i32 %b, i32 %c, i32 %d) { + %tmp2 = xor i32 %d, %b ; [#uses=1] + %tmp5 = xor i32 %d, %c ; [#uses=1] + %tmp = icmp eq i32 %tmp2, %tmp5 ; [#uses=1] + %tmp6 = zext i1 %tmp to i32 ; [#uses=1] + ret i32 %tmp6 } -uint %test15(uint %A) { ; ~(X-1) == -X - %B = add uint %A, 4294967295 - %C = xor uint %B, 4294967295 - ret uint %C +define i32 @test28(i32 %indvar) { + %tmp7 = add i32 %indvar, -2147483647 ; [#uses=1] + %tmp214 = xor i32 %tmp7, -2147483648 ; [#uses=1] + ret i32 %tmp214 }