1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel=0 -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel=1 -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; AND 5*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @and_rr_i1(i1 signext %a, i1 signext %b) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rr_i1 7*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w1 8*9880d681SAndroid Build Coastguard Worker %1 = and i1 %a, %b 9*9880d681SAndroid Build Coastguard Worker ret i1 %1 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @and_rr_i8(i8 signext %a, i8 signext %b) { 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rr_i8 14*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w1 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 16*9880d681SAndroid Build Coastguard Worker %1 = and i8 %a, %b 17*9880d681SAndroid Build Coastguard Worker ret i8 %1 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @and_rr_i16(i16 signext %a, i16 signext %b) { 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rr_i16 22*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w1 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 24*9880d681SAndroid Build Coastguard Worker %1 = and i16 %a, %b 25*9880d681SAndroid Build Coastguard Worker ret i16 %1 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine i32 @and_rr_i32(i32 %a, i32 %b) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rr_i32 30*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w0, w1 31*9880d681SAndroid Build Coastguard Worker %1 = and i32 %a, %b 32*9880d681SAndroid Build Coastguard Worker ret i32 %1 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine i64 @and_rr_i64(i64 %a, i64 %b) { 36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rr_i64 37*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x0, x1 38*9880d681SAndroid Build Coastguard Worker %1 = and i64 %a, %b 39*9880d681SAndroid Build Coastguard Worker ret i64 %1 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @and_ri_i1(i1 signext %a) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_ri_i1 44*9880d681SAndroid Build Coastguard Worker; CHECK: and {{w[0-9]+}}, w0, #0x1 45*9880d681SAndroid Build Coastguard Worker %1 = and i1 %a, 1 46*9880d681SAndroid Build Coastguard Worker ret i1 %1 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @and_ri_i8(i8 signext %a) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_ri_i8 51*9880d681SAndroid Build Coastguard Worker; CHECK: and {{w[0-9]+}}, w0, #0xf 52*9880d681SAndroid Build Coastguard Worker %1 = and i8 %a, 15 53*9880d681SAndroid Build Coastguard Worker ret i8 %1 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @and_ri_i16(i16 signext %a) { 57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_ri_i16 58*9880d681SAndroid Build Coastguard Worker; CHECK: and {{w[0-9]+}}, w0, #0xff 59*9880d681SAndroid Build Coastguard Worker %1 = and i16 %a, 255 60*9880d681SAndroid Build Coastguard Worker ret i16 %1 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine i32 @and_ri_i32(i32 %a) { 64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_ri_i32 65*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w0, #0xff 66*9880d681SAndroid Build Coastguard Worker %1 = and i32 %a, 255 67*9880d681SAndroid Build Coastguard Worker ret i32 %1 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine i64 @and_ri_i64(i64 %a) { 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_ri_i64 72*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x0, #0xff 73*9880d681SAndroid Build Coastguard Worker %1 = and i64 %a, 255 74*9880d681SAndroid Build Coastguard Worker ret i64 %1 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @and_rs_i8(i8 signext %a, i8 signext %b) { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i8 79*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w1, lsl #4 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xff|#0xf0}} 81*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 4 82*9880d681SAndroid Build Coastguard Worker %2 = and i8 %a, %1 83*9880d681SAndroid Build Coastguard Worker ret i8 %2 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @and_rs_i16(i16 signext %a, i16 signext %b) { 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i16 88*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w1, lsl #8 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xffff|#0xff00}} 90*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 8 91*9880d681SAndroid Build Coastguard Worker %2 = and i16 %a, %1 92*9880d681SAndroid Build Coastguard Worker ret i16 %2 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine i32 @and_rs_i32(i32 %a, i32 %b) { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i32 97*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w0, w1, lsl #8 98*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 8 99*9880d681SAndroid Build Coastguard Worker %2 = and i32 %a, %1 100*9880d681SAndroid Build Coastguard Worker ret i32 %2 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i64 @and_rs_i64(i64 %a, i64 %b) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i64 105*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x0, x1, lsl #8 106*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 8 107*9880d681SAndroid Build Coastguard Worker %2 = and i64 %a, %1 108*9880d681SAndroid Build Coastguard Worker ret i64 %2 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine i32 @and_mul_i32(i32 %a, i32 %b) { 112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_mul_i32 113*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w0, w1, lsl #2 114*9880d681SAndroid Build Coastguard Worker %1 = mul i32 %b, 4 115*9880d681SAndroid Build Coastguard Worker %2 = and i32 %a, %1 116*9880d681SAndroid Build Coastguard Worker ret i32 %2 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdefine i64 @and_mul_i64(i64 %a, i64 %b) { 120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_mul_i64 121*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x0, x1, lsl #2 122*9880d681SAndroid Build Coastguard Worker %1 = mul i64 %b, 4 123*9880d681SAndroid Build Coastguard Worker %2 = and i64 %a, %1 124*9880d681SAndroid Build Coastguard Worker ret i64 %2 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; OR 128*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @or_rr_i1(i1 signext %a, i1 signext %b) { 129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rr_i1 130*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w1 131*9880d681SAndroid Build Coastguard Worker %1 = or i1 %a, %b 132*9880d681SAndroid Build Coastguard Worker ret i1 %1 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @or_rr_i8(i8 signext %a, i8 signext %b) { 136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rr_i8 137*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w1 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 139*9880d681SAndroid Build Coastguard Worker %1 = or i8 %a, %b 140*9880d681SAndroid Build Coastguard Worker ret i8 %1 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @or_rr_i16(i16 signext %a, i16 signext %b) { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rr_i16 145*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w1 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 147*9880d681SAndroid Build Coastguard Worker %1 = or i16 %a, %b 148*9880d681SAndroid Build Coastguard Worker ret i16 %1 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdefine i32 @or_rr_i32(i32 %a, i32 %b) { 152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rr_i32 153*9880d681SAndroid Build Coastguard Worker; CHECK: orr w0, w0, w1 154*9880d681SAndroid Build Coastguard Worker %1 = or i32 %a, %b 155*9880d681SAndroid Build Coastguard Worker ret i32 %1 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdefine i64 @or_rr_i64(i64 %a, i64 %b) { 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rr_i64 160*9880d681SAndroid Build Coastguard Worker; CHECK: orr x0, x0, x1 161*9880d681SAndroid Build Coastguard Worker %1 = or i64 %a, %b 162*9880d681SAndroid Build Coastguard Worker ret i64 %1 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @or_ri_i8(i8 %a) { 166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_ri_i8 167*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, #0xf 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 169*9880d681SAndroid Build Coastguard Worker %1 = or i8 %a, 15 170*9880d681SAndroid Build Coastguard Worker ret i8 %1 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @or_ri_i16(i16 %a) { 174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_ri_i16 175*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, #0xff 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 177*9880d681SAndroid Build Coastguard Worker %1 = or i16 %a, 255 178*9880d681SAndroid Build Coastguard Worker ret i16 %1 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerdefine i32 @or_ri_i32(i32 %a) { 182*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_ri_i32 183*9880d681SAndroid Build Coastguard Worker; CHECK: orr w0, w0, #0xff 184*9880d681SAndroid Build Coastguard Worker %1 = or i32 %a, 255 185*9880d681SAndroid Build Coastguard Worker ret i32 %1 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Workerdefine i64 @or_ri_i64(i64 %a) { 189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_ri_i64 190*9880d681SAndroid Build Coastguard Worker; CHECK: orr x0, x0, #0xff 191*9880d681SAndroid Build Coastguard Worker %1 = or i64 %a, 255 192*9880d681SAndroid Build Coastguard Worker ret i64 %1 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @or_rs_i8(i8 signext %a, i8 signext %b) { 196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i8 197*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w1, lsl #4 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xff|#0xf0}} 199*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 4 200*9880d681SAndroid Build Coastguard Worker %2 = or i8 %a, %1 201*9880d681SAndroid Build Coastguard Worker ret i8 %2 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @or_rs_i16(i16 signext %a, i16 signext %b) { 205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i16 206*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w1, lsl #8 207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xffff|#0xff00}} 208*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 8 209*9880d681SAndroid Build Coastguard Worker %2 = or i16 %a, %1 210*9880d681SAndroid Build Coastguard Worker ret i16 %2 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine i32 @or_rs_i32(i32 %a, i32 %b) { 214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i32 215*9880d681SAndroid Build Coastguard Worker; CHECK: orr w0, w0, w1, lsl #8 216*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 8 217*9880d681SAndroid Build Coastguard Worker %2 = or i32 %a, %1 218*9880d681SAndroid Build Coastguard Worker ret i32 %2 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine i64 @or_rs_i64(i64 %a, i64 %b) { 222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i64 223*9880d681SAndroid Build Coastguard Worker; CHECK: orr x0, x0, x1, lsl #8 224*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 8 225*9880d681SAndroid Build Coastguard Worker %2 = or i64 %a, %1 226*9880d681SAndroid Build Coastguard Worker ret i64 %2 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine i32 @or_mul_i32(i32 %a, i32 %b) { 230*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_mul_i32 231*9880d681SAndroid Build Coastguard Worker; CHECK: orr w0, w0, w1, lsl #2 232*9880d681SAndroid Build Coastguard Worker %1 = mul i32 %b, 4 233*9880d681SAndroid Build Coastguard Worker %2 = or i32 %a, %1 234*9880d681SAndroid Build Coastguard Worker ret i32 %2 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerdefine i64 @or_mul_i64(i64 %a, i64 %b) { 238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_mul_i64 239*9880d681SAndroid Build Coastguard Worker; CHECK: orr x0, x0, x1, lsl #2 240*9880d681SAndroid Build Coastguard Worker %1 = mul i64 %b, 4 241*9880d681SAndroid Build Coastguard Worker %2 = or i64 %a, %1 242*9880d681SAndroid Build Coastguard Worker ret i64 %2 243*9880d681SAndroid Build Coastguard Worker} 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Worker; XOR 246*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @xor_rr_i1(i1 signext %a, i1 signext %b) { 247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rr_i1 248*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w1 249*9880d681SAndroid Build Coastguard Worker %1 = xor i1 %a, %b 250*9880d681SAndroid Build Coastguard Worker ret i1 %1 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @xor_rr_i8(i8 signext %a, i8 signext %b) { 254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rr_i8 255*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w1 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 257*9880d681SAndroid Build Coastguard Worker %1 = xor i8 %a, %b 258*9880d681SAndroid Build Coastguard Worker ret i8 %1 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @xor_rr_i16(i16 signext %a, i16 signext %b) { 262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rr_i16 263*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w1 264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 265*9880d681SAndroid Build Coastguard Worker %1 = xor i16 %a, %b 266*9880d681SAndroid Build Coastguard Worker ret i16 %1 267*9880d681SAndroid Build Coastguard Worker} 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_rr_i32(i32 %a, i32 %b) { 270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rr_i32 271*9880d681SAndroid Build Coastguard Worker; CHECK: eor w0, w0, w1 272*9880d681SAndroid Build Coastguard Worker %1 = xor i32 %a, %b 273*9880d681SAndroid Build Coastguard Worker ret i32 %1 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine i64 @xor_rr_i64(i64 %a, i64 %b) { 277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rr_i64 278*9880d681SAndroid Build Coastguard Worker; CHECK: eor x0, x0, x1 279*9880d681SAndroid Build Coastguard Worker %1 = xor i64 %a, %b 280*9880d681SAndroid Build Coastguard Worker ret i64 %1 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @xor_ri_i8(i8 signext %a) { 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_ri_i8 285*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, #0xf 286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 287*9880d681SAndroid Build Coastguard Worker %1 = xor i8 %a, 15 288*9880d681SAndroid Build Coastguard Worker ret i8 %1 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @xor_ri_i16(i16 signext %a) { 292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_ri_i16 293*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, #0xff 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 295*9880d681SAndroid Build Coastguard Worker %1 = xor i16 %a, 255 296*9880d681SAndroid Build Coastguard Worker ret i16 %1 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_ri_i32(i32 %a) { 300*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_ri_i32 301*9880d681SAndroid Build Coastguard Worker; CHECK: eor w0, w0, #0xff 302*9880d681SAndroid Build Coastguard Worker %1 = xor i32 %a, 255 303*9880d681SAndroid Build Coastguard Worker ret i32 %1 304*9880d681SAndroid Build Coastguard Worker} 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Workerdefine i64 @xor_ri_i64(i64 %a) { 307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_ri_i64 308*9880d681SAndroid Build Coastguard Worker; CHECK: eor x0, x0, #0xff 309*9880d681SAndroid Build Coastguard Worker %1 = xor i64 %a, 255 310*9880d681SAndroid Build Coastguard Worker ret i64 %1 311*9880d681SAndroid Build Coastguard Worker} 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @xor_rs_i8(i8 %a, i8 %b) { 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i8 315*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w1, lsl #4 316*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xff|#0xf0}} 317*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 4 318*9880d681SAndroid Build Coastguard Worker %2 = xor i8 %a, %1 319*9880d681SAndroid Build Coastguard Worker ret i8 %2 320*9880d681SAndroid Build Coastguard Worker} 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @xor_rs_i16(i16 %a, i16 %b) { 323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i16 324*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w1, lsl #8 325*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], {{#0xffff|#0xff00}} 326*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 8 327*9880d681SAndroid Build Coastguard Worker %2 = xor i16 %a, %1 328*9880d681SAndroid Build Coastguard Worker ret i16 %2 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_rs_i32(i32 %a, i32 %b) { 332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i32 333*9880d681SAndroid Build Coastguard Worker; CHECK: eor w0, w0, w1, lsl #8 334*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 8 335*9880d681SAndroid Build Coastguard Worker %2 = xor i32 %a, %1 336*9880d681SAndroid Build Coastguard Worker ret i32 %2 337*9880d681SAndroid Build Coastguard Worker} 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdefine i64 @xor_rs_i64(i64 %a, i64 %b) { 340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i64 341*9880d681SAndroid Build Coastguard Worker; CHECK: eor x0, x0, x1, lsl #8 342*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 8 343*9880d681SAndroid Build Coastguard Worker %2 = xor i64 %a, %1 344*9880d681SAndroid Build Coastguard Worker ret i64 %2 345*9880d681SAndroid Build Coastguard Worker} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_mul_i32(i32 %a, i32 %b) { 348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_mul_i32 349*9880d681SAndroid Build Coastguard Worker; CHECK: eor w0, w0, w1, lsl #2 350*9880d681SAndroid Build Coastguard Worker %1 = mul i32 %b, 4 351*9880d681SAndroid Build Coastguard Worker %2 = xor i32 %a, %1 352*9880d681SAndroid Build Coastguard Worker ret i32 %2 353*9880d681SAndroid Build Coastguard Worker} 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Workerdefine i64 @xor_mul_i64(i64 %a, i64 %b) { 356*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_mul_i64 357*9880d681SAndroid Build Coastguard Worker; CHECK: eor x0, x0, x1, lsl #2 358*9880d681SAndroid Build Coastguard Worker %1 = mul i64 %b, 4 359*9880d681SAndroid Build Coastguard Worker %2 = xor i64 %a, %1 360*9880d681SAndroid Build Coastguard Worker ret i64 %2 361*9880d681SAndroid Build Coastguard Worker} 362*9880d681SAndroid Build Coastguard Worker 363