1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-apple-darwin -fast-isel=1 -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test invalid shift values. This will fall-back to SDAG. 4*9880d681SAndroid Build Coastguard Worker; AND 5*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @and_rs_i8(i8 signext %a, i8 signext %b) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i8 7*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w8 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 9*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 8 10*9880d681SAndroid Build Coastguard Worker %2 = and i8 %a, %1 11*9880d681SAndroid Build Coastguard Worker ret i8 %2 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @and_rs_i16(i16 signext %a, i16 signext %b) { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i16 16*9880d681SAndroid Build Coastguard Worker; CHECK: and [[REG:w[0-9]+]], w0, w8 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 18*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 16 19*9880d681SAndroid Build Coastguard Worker %2 = and i16 %a, %1 20*9880d681SAndroid Build Coastguard Worker ret i16 %2 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine i32 @and_rs_i32(i32 %a, i32 %b) { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i32 25*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w0, w8 26*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 32 27*9880d681SAndroid Build Coastguard Worker %2 = and i32 %a, %1 28*9880d681SAndroid Build Coastguard Worker ret i32 %2 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine i64 @and_rs_i64(i64 %a, i64 %b) { 32*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: and_rs_i64 33*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x0, x8 34*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 64 35*9880d681SAndroid Build Coastguard Worker %2 = and i64 %a, %1 36*9880d681SAndroid Build Coastguard Worker ret i64 %2 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; OR 40*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @or_rs_i8(i8 signext %a, i8 signext %b) { 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i8 42*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w8 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 44*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 8 45*9880d681SAndroid Build Coastguard Worker %2 = or i8 %a, %1 46*9880d681SAndroid Build Coastguard Worker ret i8 %2 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @or_rs_i16(i16 signext %a, i16 signext %b) { 50*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i16 51*9880d681SAndroid Build Coastguard Worker; CHECK: orr [[REG:w[0-9]+]], w0, w8 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 53*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 16 54*9880d681SAndroid Build Coastguard Worker %2 = or i16 %a, %1 55*9880d681SAndroid Build Coastguard Worker ret i16 %2 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine i32 @or_rs_i32(i32 %a, i32 %b) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i32 60*9880d681SAndroid Build Coastguard Worker; CHECK: orr w0, w0, w8 61*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 32 62*9880d681SAndroid Build Coastguard Worker %2 = or i32 %a, %1 63*9880d681SAndroid Build Coastguard Worker ret i32 %2 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine i64 @or_rs_i64(i64 %a, i64 %b) { 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: or_rs_i64 68*9880d681SAndroid Build Coastguard Worker; CHECK: orr x0, x0, x8 69*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 64 70*9880d681SAndroid Build Coastguard Worker %2 = or i64 %a, %1 71*9880d681SAndroid Build Coastguard Worker ret i64 %2 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker; XOR 75*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @xor_rs_i8(i8 %a, i8 %b) { 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i8 77*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w8 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xff 79*9880d681SAndroid Build Coastguard Worker %1 = shl i8 %b, 8 80*9880d681SAndroid Build Coastguard Worker %2 = xor i8 %a, %1 81*9880d681SAndroid Build Coastguard Worker ret i8 %2 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @xor_rs_i16(i16 %a, i16 %b) { 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i16 86*9880d681SAndroid Build Coastguard Worker; CHECK: eor [[REG:w[0-9]+]], w0, w8 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: and {{w[0-9]+}}, [[REG]], #0xffff 88*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %b, 16 89*9880d681SAndroid Build Coastguard Worker %2 = xor i16 %a, %1 90*9880d681SAndroid Build Coastguard Worker ret i16 %2 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine i32 @xor_rs_i32(i32 %a, i32 %b) { 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i32 95*9880d681SAndroid Build Coastguard Worker; CHECK: eor w0, w0, w8 96*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 32 97*9880d681SAndroid Build Coastguard Worker %2 = xor i32 %a, %1 98*9880d681SAndroid Build Coastguard Worker ret i32 %2 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine i64 @xor_rs_i64(i64 %a, i64 %b) { 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xor_rs_i64 103*9880d681SAndroid Build Coastguard Worker; CHECK: eor x0, x0, x8 104*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 64 105*9880d681SAndroid Build Coastguard Worker %2 = xor i64 %a, %1 106*9880d681SAndroid Build Coastguard Worker ret i64 %2 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker;ADD 110*9880d681SAndroid Build Coastguard Workerdefine i32 @add_rs_i32(i32 %a, i32 %b) { 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add_rs_i32 112*9880d681SAndroid Build Coastguard Worker; CHECK: add w0, w0, w8 113*9880d681SAndroid Build Coastguard Worker %1 = shl i32 %b, 32 114*9880d681SAndroid Build Coastguard Worker %2 = add i32 %a, %1 115*9880d681SAndroid Build Coastguard Worker ret i32 %2 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdefine i64 @add_rs_i64(i64 %a, i64 %b) { 119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: add_rs_i64 120*9880d681SAndroid Build Coastguard Worker; CHECK: add x0, x0, x8 121*9880d681SAndroid Build Coastguard Worker %1 = shl i64 %b, 64 122*9880d681SAndroid Build Coastguard Worker %2 = add i64 %a, %1 123*9880d681SAndroid Build Coastguard Worker ret i64 %2 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126