1*9880d681SAndroid Build Coastguard Worker; This test makes sure that add instructions are properly eliminated. 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | \ 4*9880d681SAndroid Build Coastguard Worker; RUN: grep -v OK | not grep add 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i32 %A) { 7*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 0 ; <i32> [#uses=1] 8*9880d681SAndroid Build Coastguard Worker ret i32 %B 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i32 %A) { 12*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 5 ; <i32> [#uses=1] 13*9880d681SAndroid Build Coastguard Worker %C = add i32 %B, -5 ; <i32> [#uses=1] 14*9880d681SAndroid Build Coastguard Worker ret i32 %C 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine i32 @test3(i32 %A) { 18*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 5 ; <i32> [#uses=1] 19*9880d681SAndroid Build Coastguard Worker ;; This should get converted to an add 20*9880d681SAndroid Build Coastguard Worker %C = sub i32 %B, 5 ; <i32> [#uses=1] 21*9880d681SAndroid Build Coastguard Worker ret i32 %C 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i32 @test4(i32 %A, i32 %B) { 25*9880d681SAndroid Build Coastguard Worker %C = sub i32 0, %A ; <i32> [#uses=1] 26*9880d681SAndroid Build Coastguard Worker ; D = B + -A = B - A 27*9880d681SAndroid Build Coastguard Worker %D = add i32 %B, %C ; <i32> [#uses=1] 28*9880d681SAndroid Build Coastguard Worker ret i32 %D 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(i32 %A, i32 %B) { 32*9880d681SAndroid Build Coastguard Worker %C = sub i32 0, %A ; <i32> [#uses=1] 33*9880d681SAndroid Build Coastguard Worker ; D = -A + B = B - A 34*9880d681SAndroid Build Coastguard Worker %D = add i32 %C, %B ; <i32> [#uses=1] 35*9880d681SAndroid Build Coastguard Worker ret i32 %D 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine i32 @test6(i32 %A) { 39*9880d681SAndroid Build Coastguard Worker %B = mul i32 7, %A ; <i32> [#uses=1] 40*9880d681SAndroid Build Coastguard Worker ; C = 7*A+A == 8*A == A << 3 41*9880d681SAndroid Build Coastguard Worker %C = add i32 %B, %A ; <i32> [#uses=1] 42*9880d681SAndroid Build Coastguard Worker ret i32 %C 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine i32 @test7(i32 %A) { 46*9880d681SAndroid Build Coastguard Worker %B = mul i32 7, %A ; <i32> [#uses=1] 47*9880d681SAndroid Build Coastguard Worker ; C = A+7*A == 8*A == A << 3 48*9880d681SAndroid Build Coastguard Worker %C = add i32 %A, %B ; <i32> [#uses=1] 49*9880d681SAndroid Build Coastguard Worker ret i32 %C 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; (A & C1)+(B & C2) -> (A & C1)|(B & C2) iff C1&C2 == 0 53*9880d681SAndroid Build Coastguard Workerdefine i32 @test8(i32 %A, i32 %B) { 54*9880d681SAndroid Build Coastguard Worker %A1 = and i32 %A, 7 ; <i32> [#uses=1] 55*9880d681SAndroid Build Coastguard Worker %B1 = and i32 %B, 128 ; <i32> [#uses=1] 56*9880d681SAndroid Build Coastguard Worker %C = add i32 %A1, %B1 ; <i32> [#uses=1] 57*9880d681SAndroid Build Coastguard Worker ret i32 %C 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i32 @test9(i32 %A) { 61*9880d681SAndroid Build Coastguard Worker %B = shl i32 %A, 4 ; <i32> [#uses=2] 62*9880d681SAndroid Build Coastguard Worker ; === shl int %A, 5 63*9880d681SAndroid Build Coastguard Worker %C = add i32 %B, %B ; <i32> [#uses=1] 64*9880d681SAndroid Build Coastguard Worker ret i32 %C 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine i1 @test10(i8 %A, i8 %b) { 68*9880d681SAndroid Build Coastguard Worker %B = add i8 %A, %b ; <i8> [#uses=1] 69*9880d681SAndroid Build Coastguard Worker ; === A != -b 70*9880d681SAndroid Build Coastguard Worker %c = icmp ne i8 %B, 0 ; <i1> [#uses=1] 71*9880d681SAndroid Build Coastguard Worker ret i1 %c 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine i1 @test11(i8 %A) { 75*9880d681SAndroid Build Coastguard Worker %B = add i8 %A, -1 ; <i8> [#uses=1] 76*9880d681SAndroid Build Coastguard Worker ; === A != 1 77*9880d681SAndroid Build Coastguard Worker %c = icmp ne i8 %B, 0 ; <i1> [#uses=1] 78*9880d681SAndroid Build Coastguard Worker ret i1 %c 79*9880d681SAndroid Build Coastguard Worker} 80*9880d681SAndroid Build Coastguard Worker 81*9880d681SAndroid Build Coastguard Workerdefine i32 @test12(i32 %A, i32 %B) { 82*9880d681SAndroid Build Coastguard Worker ; Should be transformed into shl A, 1 83*9880d681SAndroid Build Coastguard Worker %C_OK = add i32 %B, %A ; <i32> [#uses=1] 84*9880d681SAndroid Build Coastguard Worker br label %X 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard WorkerX: ; preds = %0 87*9880d681SAndroid Build Coastguard Worker %D = add i32 %C_OK, %A ; <i32> [#uses=1] 88*9880d681SAndroid Build Coastguard Worker ret i32 %D 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine i32 @test13(i32 %A, i32 %B, i32 %C) { 92*9880d681SAndroid Build Coastguard Worker %D_OK = add i32 %A, %B ; <i32> [#uses=1] 93*9880d681SAndroid Build Coastguard Worker %E_OK = add i32 %D_OK, %C ; <i32> [#uses=1] 94*9880d681SAndroid Build Coastguard Worker ;; shl A, 1 95*9880d681SAndroid Build Coastguard Worker %F = add i32 %E_OK, %A ; <i32> [#uses=1] 96*9880d681SAndroid Build Coastguard Worker ret i32 %F 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine i32 @test14(i32 %offset, i32 %difference) { 100*9880d681SAndroid Build Coastguard Worker %tmp.2 = and i32 %difference, 3 ; <i32> [#uses=1] 101*9880d681SAndroid Build Coastguard Worker %tmp.3_OK = add i32 %tmp.2, %offset ; <i32> [#uses=1] 102*9880d681SAndroid Build Coastguard Worker %tmp.5.mask = and i32 %difference, -4 ; <i32> [#uses=1] 103*9880d681SAndroid Build Coastguard Worker ; == add %offset, %difference 104*9880d681SAndroid Build Coastguard Worker %tmp.8 = add i32 %tmp.3_OK, %tmp.5.mask ; <i32> [#uses=1] 105*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.8 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine i8 @test15(i8 %A) { 109*9880d681SAndroid Build Coastguard Worker ; Does not effect result 110*9880d681SAndroid Build Coastguard Worker %B = add i8 %A, -64 ; <i8> [#uses=1] 111*9880d681SAndroid Build Coastguard Worker ; Only one bit set 112*9880d681SAndroid Build Coastguard Worker %C = and i8 %B, 16 ; <i8> [#uses=1] 113*9880d681SAndroid Build Coastguard Worker ret i8 %C 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerdefine i8 @test16(i8 %A) { 117*9880d681SAndroid Build Coastguard Worker ; Turn this into a XOR 118*9880d681SAndroid Build Coastguard Worker %B = add i8 %A, 16 ; <i8> [#uses=1] 119*9880d681SAndroid Build Coastguard Worker ; Only one bit set 120*9880d681SAndroid Build Coastguard Worker %C = and i8 %B, 16 ; <i8> [#uses=1] 121*9880d681SAndroid Build Coastguard Worker ret i8 %C 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine i32 @test17(i32 %A) { 125*9880d681SAndroid Build Coastguard Worker %B = xor i32 %A, -1 ; <i32> [#uses=1] 126*9880d681SAndroid Build Coastguard Worker ; == sub int 0, %A 127*9880d681SAndroid Build Coastguard Worker %C = add i32 %B, 1 ; <i32> [#uses=1] 128*9880d681SAndroid Build Coastguard Worker ret i32 %C 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine i8 @test18(i8 %A) { 132*9880d681SAndroid Build Coastguard Worker %B = xor i8 %A, -1 ; <i8> [#uses=1] 133*9880d681SAndroid Build Coastguard Worker ; == sub ubyte 16, %A 134*9880d681SAndroid Build Coastguard Worker %C = add i8 %B, 17 ; <i8> [#uses=1] 135*9880d681SAndroid Build Coastguard Worker ret i8 %C 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine i32 @test19(i1 %C) { 139*9880d681SAndroid Build Coastguard Worker %A = select i1 %C, i32 1000, i32 10 ; <i32> [#uses=1] 140*9880d681SAndroid Build Coastguard Worker %V = add i32 %A, 123 ; <i32> [#uses=1] 141*9880d681SAndroid Build Coastguard Worker ret i32 %V 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerdefine i32 @test20(i32 %x) { 145*9880d681SAndroid Build Coastguard Worker %tmp.2 = xor i32 %x, -2147483648 ; <i32> [#uses=1] 146*9880d681SAndroid Build Coastguard Worker ;; Add of sign bit -> xor of sign bit. 147*9880d681SAndroid Build Coastguard Worker %tmp.4 = add i32 %tmp.2, -2147483648 ; <i32> [#uses=1] 148*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.4 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdefine i1 @test21(i32 %x) { 152*9880d681SAndroid Build Coastguard Worker %t = add i32 %x, 4 ; <i32> [#uses=1] 153*9880d681SAndroid Build Coastguard Worker %y = icmp eq i32 %t, 123 ; <i1> [#uses=1] 154*9880d681SAndroid Build Coastguard Worker ret i1 %y 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Workerdefine i32 @test22(i32 %V) { 158*9880d681SAndroid Build Coastguard Worker %V2 = add i32 %V, 10 ; <i32> [#uses=1] 159*9880d681SAndroid Build Coastguard Worker switch i32 %V2, label %Default [ 160*9880d681SAndroid Build Coastguard Worker i32 20, label %Lab1 161*9880d681SAndroid Build Coastguard Worker i32 30, label %Lab2 162*9880d681SAndroid Build Coastguard Worker ] 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard WorkerDefault: ; preds = %0 165*9880d681SAndroid Build Coastguard Worker ret i32 123 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard WorkerLab1: ; preds = %0 168*9880d681SAndroid Build Coastguard Worker ret i32 12312 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard WorkerLab2: ; preds = %0 171*9880d681SAndroid Build Coastguard Worker ret i32 1231231 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Workerdefine i32 @test23(i1 %C, i32 %a) { 175*9880d681SAndroid Build Coastguard Workerentry: 176*9880d681SAndroid Build Coastguard Worker br i1 %C, label %endif, label %else 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Workerelse: ; preds = %entry 179*9880d681SAndroid Build Coastguard Worker br label %endif 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerendif: ; preds = %else, %entry 182*9880d681SAndroid Build Coastguard Worker %b.0 = phi i32 [ 0, %entry ], [ 1, %else ] ; <i32> [#uses=1] 183*9880d681SAndroid Build Coastguard Worker %tmp.4 = add i32 %b.0, 1 ; <i32> [#uses=1] 184*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.4 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine i32 @test24(i32 %A) { 188*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 1 ; <i32> [#uses=1] 189*9880d681SAndroid Build Coastguard Worker %C = shl i32 %B, 1 ; <i32> [#uses=1] 190*9880d681SAndroid Build Coastguard Worker %D = sub i32 %C, 2 ; <i32> [#uses=1] 191*9880d681SAndroid Build Coastguard Worker ret i32 %D 192*9880d681SAndroid Build Coastguard Worker} 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Workerdefine i64 @test25(i64 %Y) { 195*9880d681SAndroid Build Coastguard Worker %tmp.4 = shl i64 %Y, 2 ; <i64> [#uses=1] 196*9880d681SAndroid Build Coastguard Worker %tmp.12 = shl i64 %Y, 2 ; <i64> [#uses=1] 197*9880d681SAndroid Build Coastguard Worker %tmp.8 = add i64 %tmp.4, %tmp.12 ; <i64> [#uses=1] 198*9880d681SAndroid Build Coastguard Worker ret i64 %tmp.8 199*9880d681SAndroid Build Coastguard Worker} 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Workerdefine i32 @test26(i32 %A, i32 %B) { 202*9880d681SAndroid Build Coastguard Worker %C = add i32 %A, %B ; <i32> [#uses=1] 203*9880d681SAndroid Build Coastguard Worker %D = sub i32 %C, %B ; <i32> [#uses=1] 204*9880d681SAndroid Build Coastguard Worker ret i32 %D 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine i32 @test27(i1 %C, i32 %X, i32 %Y) { 208*9880d681SAndroid Build Coastguard Worker %A = add i32 %X, %Y ; <i32> [#uses=1] 209*9880d681SAndroid Build Coastguard Worker %B = add i32 %Y, 123 ; <i32> [#uses=1] 210*9880d681SAndroid Build Coastguard Worker ;; Fold add through select. 211*9880d681SAndroid Build Coastguard Worker %C.upgrd.1 = select i1 %C, i32 %A, i32 %B ; <i32> [#uses=1] 212*9880d681SAndroid Build Coastguard Worker %D = sub i32 %C.upgrd.1, %Y ; <i32> [#uses=1] 213*9880d681SAndroid Build Coastguard Worker ret i32 %D 214*9880d681SAndroid Build Coastguard Worker} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Workerdefine i32 @test28(i32 %X) { 217*9880d681SAndroid Build Coastguard Worker %Y = add i32 %X, 1234 ; <i32> [#uses=1] 218*9880d681SAndroid Build Coastguard Worker %Z = sub i32 42, %Y ; <i32> [#uses=1] 219*9880d681SAndroid Build Coastguard Worker ret i32 %Z 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine i32 @test29(i32 %X, i32 %x) { 223*9880d681SAndroid Build Coastguard Worker %tmp.2 = sub i32 %X, %x ; <i32> [#uses=2] 224*9880d681SAndroid Build Coastguard Worker %tmp.2.mask = and i32 %tmp.2, 63 ; <i32> [#uses=1] 225*9880d681SAndroid Build Coastguard Worker %tmp.6 = add i32 %tmp.2.mask, %x ; <i32> [#uses=1] 226*9880d681SAndroid Build Coastguard Worker %tmp.7 = and i32 %tmp.6, 63 ; <i32> [#uses=1] 227*9880d681SAndroid Build Coastguard Worker %tmp.9 = and i32 %tmp.2, -64 ; <i32> [#uses=1] 228*9880d681SAndroid Build Coastguard Worker %tmp.10 = or i32 %tmp.7, %tmp.9 ; <i32> [#uses=1] 229*9880d681SAndroid Build Coastguard Worker ret i32 %tmp.10 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine i64 @test30(i64 %x) { 233*9880d681SAndroid Build Coastguard Worker %tmp.2 = xor i64 %x, -9223372036854775808 ; <i64> [#uses=1] 234*9880d681SAndroid Build Coastguard Worker ;; Add of sign bit -> xor of sign bit. 235*9880d681SAndroid Build Coastguard Worker %tmp.4 = add i64 %tmp.2, -9223372036854775808 ; <i64> [#uses=1] 236*9880d681SAndroid Build Coastguard Worker ret i64 %tmp.4 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Workerdefine i32 @test31(i32 %A) { 240*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 4 ; <i32> [#uses=1] 241*9880d681SAndroid Build Coastguard Worker %C = mul i32 %B, 5 ; <i32> [#uses=1] 242*9880d681SAndroid Build Coastguard Worker %D = sub i32 %C, 20 ; <i32> [#uses=1] 243*9880d681SAndroid Build Coastguard Worker ret i32 %D 244*9880d681SAndroid Build Coastguard Worker} 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Workerdefine i32 @test32(i32 %A) { 247*9880d681SAndroid Build Coastguard Worker %B = add i32 %A, 4 ; <i32> [#uses=1] 248*9880d681SAndroid Build Coastguard Worker %C = shl i32 %B, 2 ; <i32> [#uses=1] 249*9880d681SAndroid Build Coastguard Worker %D = sub i32 %C, 16 ; <i32> [#uses=1] 250*9880d681SAndroid Build Coastguard Worker ret i32 %D 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Workerdefine i8 @test33(i8 %A) { 254*9880d681SAndroid Build Coastguard Worker %B = and i8 %A, -2 ; <i8> [#uses=1] 255*9880d681SAndroid Build Coastguard Worker %C = add i8 %B, 1 ; <i8> [#uses=1] 256*9880d681SAndroid Build Coastguard Worker ret i8 %C 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine i8 @test34(i8 %A) { 260*9880d681SAndroid Build Coastguard Worker %B = add i8 %A, 64 ; <i8> [#uses=1] 261*9880d681SAndroid Build Coastguard Worker %C = and i8 %B, 12 ; <i8> [#uses=1] 262*9880d681SAndroid Build Coastguard Worker ret i8 %C 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Workerdefine i32 @test35(i32 %a) { 266*9880d681SAndroid Build Coastguard Worker %tmpnot = xor i32 %a, -1 ; <i32> [#uses=1] 267*9880d681SAndroid Build Coastguard Worker %tmp2 = add i32 %tmpnot, %a ; <i32> [#uses=1] 268*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerdefine i32 @test36(i32 %a) { 272*9880d681SAndroid Build Coastguard Worker %x = and i32 %a, -2 273*9880d681SAndroid Build Coastguard Worker %y = and i32 %a, -126 274*9880d681SAndroid Build Coastguard Worker %z = add i32 %x, %y 275*9880d681SAndroid Build Coastguard Worker %q = and i32 %z, 1 ; always zero 276*9880d681SAndroid Build Coastguard Worker ret i32 %q 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Workerdefine i1 @test37(i32 %a, i32 %b) nounwind readnone { 280*9880d681SAndroid Build Coastguard Worker %add = add i32 %a, %b 281*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %add, %a 282*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Workerdefine i1 @test38(i32 %a, i32 %b) nounwind readnone { 286*9880d681SAndroid Build Coastguard Worker %add = add i32 %a, %b 287*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %add, %b 288*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine i1 @test39(i32 %a, i32 %b) nounwind readnone { 292*9880d681SAndroid Build Coastguard Worker %add = add i32 %b, %a 293*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %add, %a 294*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 295*9880d681SAndroid Build Coastguard Worker} 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Workerdefine i1 @test40(i32 %a, i32 %b) nounwind readnone { 298*9880d681SAndroid Build Coastguard Worker %add = add i32 %b, %a 299*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %add, %b 300*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 301*9880d681SAndroid Build Coastguard Worker} 302