1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i32 %a, i32 %b) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 5*9880d681SAndroid Build Coastguard Worker; CHECK: bics r0, r1 6*9880d681SAndroid Build Coastguard Worker %tmp = xor i32 %b, 4294967295 7*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %a, %tmp 8*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine i32 @f2(i32 %a, i32 %b) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 13*9880d681SAndroid Build Coastguard Worker; CHECK: bics r0, r1 14*9880d681SAndroid Build Coastguard Worker %tmp = xor i32 %b, 4294967295 15*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %tmp, %a 16*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 17*9880d681SAndroid Build Coastguard Worker} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine i32 @f3(i32 %a, i32 %b) { 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 21*9880d681SAndroid Build Coastguard Worker; CHECK: bics r0, r1 22*9880d681SAndroid Build Coastguard Worker %tmp = xor i32 4294967295, %b 23*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %a, %tmp 24*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine i32 @f4(i32 %a, i32 %b) { 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 29*9880d681SAndroid Build Coastguard Worker; CHECK: bics r0, r1 30*9880d681SAndroid Build Coastguard Worker %tmp = xor i32 4294967295, %b 31*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %tmp, %a 32*9880d681SAndroid Build Coastguard Worker ret i32 %tmp1 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine i32 @f5(i32 %a, i32 %b) { 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 37*9880d681SAndroid Build Coastguard Worker; CHECK: bic.w r0, r0, r1, lsl #5 38*9880d681SAndroid Build Coastguard Worker %tmp = shl i32 %b, 5 39*9880d681SAndroid Build Coastguard Worker %tmp1 = xor i32 4294967295, %tmp 40*9880d681SAndroid Build Coastguard Worker %tmp2 = and i32 %a, %tmp1 41*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i32 @f6(i32 %a, i32 %b) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 46*9880d681SAndroid Build Coastguard Worker; CHECK: bic.w r0, r0, r1, lsr #6 47*9880d681SAndroid Build Coastguard Worker %tmp = lshr i32 %b, 6 48*9880d681SAndroid Build Coastguard Worker %tmp1 = xor i32 %tmp, 4294967295 49*9880d681SAndroid Build Coastguard Worker %tmp2 = and i32 %tmp1, %a 50*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine i32 @f7(i32 %a, i32 %b) { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 55*9880d681SAndroid Build Coastguard Worker; CHECK: bic.w r0, r0, r1, asr #7 56*9880d681SAndroid Build Coastguard Worker %tmp = ashr i32 %b, 7 57*9880d681SAndroid Build Coastguard Worker %tmp1 = xor i32 %tmp, 4294967295 58*9880d681SAndroid Build Coastguard Worker %tmp2 = and i32 %a, %tmp1 59*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine i32 @f8(i32 %a, i32 %b) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 64*9880d681SAndroid Build Coastguard Worker; CHECK: bic.w r0, r0, r0, ror #8 65*9880d681SAndroid Build Coastguard Worker %l8 = shl i32 %a, 24 66*9880d681SAndroid Build Coastguard Worker %r8 = lshr i32 %a, 8 67*9880d681SAndroid Build Coastguard Worker %tmp = or i32 %l8, %r8 68*9880d681SAndroid Build Coastguard Worker %tmp1 = xor i32 4294967295, %tmp 69*9880d681SAndroid Build Coastguard Worker %tmp2 = and i32 %tmp1, %a 70*9880d681SAndroid Build Coastguard Worker ret i32 %tmp2 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; ~0x000000bb = 4294967108 74*9880d681SAndroid Build Coastguard Workerdefine i32 @f9(i32 %a) { 75*9880d681SAndroid Build Coastguard Worker %tmp = and i32 %a, 4294967108 76*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 79*9880d681SAndroid Build Coastguard Worker; CHECK: bic r0, r0, #187 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; ~0x00aa00aa = 4283826005 83*9880d681SAndroid Build Coastguard Workerdefine i32 @f10(i32 %a) { 84*9880d681SAndroid Build Coastguard Worker %tmp = and i32 %a, 4283826005 85*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 88*9880d681SAndroid Build Coastguard Worker; CHECK: bic r0, r0, #11141290 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker; ~0xcc00cc00 = 872363007 92*9880d681SAndroid Build Coastguard Workerdefine i32 @f11(i32 %a) { 93*9880d681SAndroid Build Coastguard Worker %tmp = and i32 %a, 872363007 94*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 96*9880d681SAndroid Build Coastguard Worker; CHECK: bic r0, r0, #-872363008 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; ~0x00110000 = 4293853183 100*9880d681SAndroid Build Coastguard Workerdefine i32 @f12(i32 %a) { 101*9880d681SAndroid Build Coastguard Worker %tmp = and i32 %a, 4293853183 102*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 104*9880d681SAndroid Build Coastguard Worker; CHECK: bic r0, r0, #1114112 105*9880d681SAndroid Build Coastguard Worker} 106