1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -mattr=+msa,+fp64 < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine void @and_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 5*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v16i8: 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 8*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 9*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 10*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 11*9880d681SAndroid Build Coastguard Worker %3 = and <16 x i8> %1, %2 12*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 13*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 14*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker ret void 17*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v16i8 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine void @and_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 21*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v8i16: 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 24*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 25*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 26*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 27*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i16> %1, %2 28*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 29*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 30*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v8i16 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @and_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 37*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v4i32: 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 40*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 41*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 42*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 43*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, %2 44*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 45*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 46*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v4i32 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine void @and_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 53*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v2i64: 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 56*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 57*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 58*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 59*9880d681SAndroid Build Coastguard Worker %3 = and <2 x i64> %1, %2 60*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 61*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 62*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v2i64 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine void @and_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 69*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v16i8_i: 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 72*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 73*9880d681SAndroid Build Coastguard Worker %2 = and <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 74*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: andi.b [[R4:\$w[0-9]+]], [[R1]], 1 75*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 76*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker ret void 79*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v16i8_i 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine void @and_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 83*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v8i16_i: 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 86*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 87*9880d681SAndroid Build Coastguard Worker %2 = and <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 88*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 1 89*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 90*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 91*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v8i16_i 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdefine void @and_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 98*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v4i32_i: 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 101*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 102*9880d681SAndroid Build Coastguard Worker %2 = and <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 103*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 1 104*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 105*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 106*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v4i32_i 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine void @and_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 113*9880d681SAndroid Build Coastguard Worker ; CHECK: and_v2i64_i: 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 116*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 117*9880d681SAndroid Build Coastguard Worker %2 = and <2 x i64> %1, <i64 1, i64 1> 118*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 1 119*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: and.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 120*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 121*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker ret void 124*9880d681SAndroid Build Coastguard Worker ; CHECK: .size and_v2i64_i 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerdefine void @or_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 128*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v16i8: 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 131*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 132*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 133*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 134*9880d681SAndroid Build Coastguard Worker %3 = or <16 x i8> %1, %2 135*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 136*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 137*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v16i8 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine void @or_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 144*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v8i16: 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 147*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 148*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 149*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 150*9880d681SAndroid Build Coastguard Worker %3 = or <8 x i16> %1, %2 151*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 152*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 153*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker ret void 156*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v8i16 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine void @or_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 160*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v4i32: 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 163*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 164*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 165*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 166*9880d681SAndroid Build Coastguard Worker %3 = or <4 x i32> %1, %2 167*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 168*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 169*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker ret void 172*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v4i32 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine void @or_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 176*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v2i64: 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 179*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 180*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 181*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 182*9880d681SAndroid Build Coastguard Worker %3 = or <2 x i64> %1, %2 183*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 184*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 185*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker ret void 188*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v2i64 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine void @or_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 192*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v16i8_i: 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 195*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 196*9880d681SAndroid Build Coastguard Worker %2 = or <16 x i8> %1, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 197*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ori.b [[R4:\$w[0-9]+]], [[R1]], 3 198*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 199*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v16i8_i 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine void @or_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 206*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v8i16_i: 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 209*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 210*9880d681SAndroid Build Coastguard Worker %2 = or <8 x i16> %1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 211*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 3 212*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 213*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 214*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker ret void 217*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v8i16_i 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine void @or_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 221*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v4i32_i: 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 224*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 225*9880d681SAndroid Build Coastguard Worker %2 = or <4 x i32> %1, <i32 3, i32 3, i32 3, i32 3> 226*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 3 227*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 228*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 229*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker ret void 232*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v4i32_i 233*9880d681SAndroid Build Coastguard Worker} 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerdefine void @or_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 236*9880d681SAndroid Build Coastguard Worker ; CHECK: or_v2i64_i: 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 239*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 240*9880d681SAndroid Build Coastguard Worker %2 = or <2 x i64> %1, <i64 3, i64 3> 241*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 3 242*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: or.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 243*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 244*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker ret void 247*9880d681SAndroid Build Coastguard Worker ; CHECK: .size or_v2i64_i 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine void @nor_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 251*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v16i8: 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 254*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 255*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 256*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 257*9880d681SAndroid Build Coastguard Worker %3 = or <16 x i8> %1, %2 258*9880d681SAndroid Build Coastguard Worker %4 = xor <16 x i8> %3, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 259*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 260*9880d681SAndroid Build Coastguard Worker store <16 x i8> %4, <16 x i8>* %c 261*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker ret void 264*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v16i8 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerdefine void @nor_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 268*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v8i16: 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 271*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 272*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 273*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 274*9880d681SAndroid Build Coastguard Worker %3 = or <8 x i16> %1, %2 275*9880d681SAndroid Build Coastguard Worker %4 = xor <8 x i16> %3, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 276*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 277*9880d681SAndroid Build Coastguard Worker store <8 x i16> %4, <8 x i16>* %c 278*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker ret void 281*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v8i16 282*9880d681SAndroid Build Coastguard Worker} 283*9880d681SAndroid Build Coastguard Worker 284*9880d681SAndroid Build Coastguard Workerdefine void @nor_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 285*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v4i32: 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 288*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 289*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 290*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 291*9880d681SAndroid Build Coastguard Worker %3 = or <4 x i32> %1, %2 292*9880d681SAndroid Build Coastguard Worker %4 = xor <4 x i32> %3, <i32 -1, i32 -1, i32 -1, i32 -1> 293*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 294*9880d681SAndroid Build Coastguard Worker store <4 x i32> %4, <4 x i32>* %c 295*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker ret void 298*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v4i32 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdefine void @nor_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 302*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v2i64: 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 305*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 306*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 307*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 308*9880d681SAndroid Build Coastguard Worker %3 = or <2 x i64> %1, %2 309*9880d681SAndroid Build Coastguard Worker %4 = xor <2 x i64> %3, <i64 -1, i64 -1> 310*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 311*9880d681SAndroid Build Coastguard Worker store <2 x i64> %4, <2 x i64>* %c 312*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Worker ret void 315*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v2i64 316*9880d681SAndroid Build Coastguard Worker} 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Workerdefine void @nor_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 319*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v16i8_i: 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 322*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 323*9880d681SAndroid Build Coastguard Worker %2 = or <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 324*9880d681SAndroid Build Coastguard Worker %3 = xor <16 x i8> %2, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 325*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ori.b [[R4:\$w[0-9]+]], [[R1]], 1 326*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 327*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Worker ret void 330*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v16i8_i 331*9880d681SAndroid Build Coastguard Worker} 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Workerdefine void @nor_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 334*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v8i16_i: 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 337*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 338*9880d681SAndroid Build Coastguard Worker %2 = or <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 339*9880d681SAndroid Build Coastguard Worker %3 = xor <8 x i16> %2, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 340*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 1 341*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 342*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 343*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Worker ret void 346*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v8i16_i 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine void @nor_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 350*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v4i32_i: 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 353*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 354*9880d681SAndroid Build Coastguard Worker %2 = or <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 355*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i32> %2, <i32 -1, i32 -1, i32 -1, i32 -1> 356*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 1 357*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 358*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 359*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Worker ret void 362*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v4i32_i 363*9880d681SAndroid Build Coastguard Worker} 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Workerdefine void @nor_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 366*9880d681SAndroid Build Coastguard Worker ; CHECK: nor_v2i64_i: 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 369*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 370*9880d681SAndroid Build Coastguard Worker %2 = or <2 x i64> %1, <i64 1, i64 1> 371*9880d681SAndroid Build Coastguard Worker %3 = xor <2 x i64> %2, <i64 -1, i64 -1> 372*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 1 373*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 374*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 375*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Worker ret void 378*9880d681SAndroid Build Coastguard Worker ; CHECK: .size nor_v2i64_i 379*9880d681SAndroid Build Coastguard Worker} 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Workerdefine void @xor_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 382*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v16i8: 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 385*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 386*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 387*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 388*9880d681SAndroid Build Coastguard Worker %3 = xor <16 x i8> %1, %2 389*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 390*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 391*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Worker ret void 394*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v16i8 395*9880d681SAndroid Build Coastguard Worker} 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Workerdefine void @xor_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 398*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v8i16: 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 401*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 402*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 403*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 404*9880d681SAndroid Build Coastguard Worker %3 = xor <8 x i16> %1, %2 405*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 406*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 407*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Worker ret void 410*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v8i16 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Workerdefine void @xor_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 414*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v4i32: 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 417*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 418*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 419*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 420*9880d681SAndroid Build Coastguard Worker %3 = xor <4 x i32> %1, %2 421*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 422*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 423*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 424*9880d681SAndroid Build Coastguard Worker 425*9880d681SAndroid Build Coastguard Worker ret void 426*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v4i32 427*9880d681SAndroid Build Coastguard Worker} 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Workerdefine void @xor_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 430*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v2i64: 431*9880d681SAndroid Build Coastguard Worker 432*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 433*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 434*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 435*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 436*9880d681SAndroid Build Coastguard Worker %3 = xor <2 x i64> %1, %2 437*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R3:\$w[0-9]+]], [[R1]], [[R2]] 438*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 439*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 440*9880d681SAndroid Build Coastguard Worker 441*9880d681SAndroid Build Coastguard Worker ret void 442*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v2i64 443*9880d681SAndroid Build Coastguard Worker} 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerdefine void @xor_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 446*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v16i8_i: 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 449*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 450*9880d681SAndroid Build Coastguard Worker %2 = xor <16 x i8> %1, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 451*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xori.b [[R4:\$w[0-9]+]], [[R1]], 3 452*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 453*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 454*9880d681SAndroid Build Coastguard Worker 455*9880d681SAndroid Build Coastguard Worker ret void 456*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v16i8_i 457*9880d681SAndroid Build Coastguard Worker} 458*9880d681SAndroid Build Coastguard Worker 459*9880d681SAndroid Build Coastguard Workerdefine void @xor_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 460*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v8i16_i: 461*9880d681SAndroid Build Coastguard Worker 462*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 463*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 464*9880d681SAndroid Build Coastguard Worker %2 = xor <8 x i16> %1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 465*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 3 466*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 467*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 468*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 469*9880d681SAndroid Build Coastguard Worker 470*9880d681SAndroid Build Coastguard Worker ret void 471*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v8i16_i 472*9880d681SAndroid Build Coastguard Worker} 473*9880d681SAndroid Build Coastguard Worker 474*9880d681SAndroid Build Coastguard Workerdefine void @xor_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 475*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v4i32_i: 476*9880d681SAndroid Build Coastguard Worker 477*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 478*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 479*9880d681SAndroid Build Coastguard Worker %2 = xor <4 x i32> %1, <i32 3, i32 3, i32 3, i32 3> 480*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 3 481*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 482*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 483*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Worker ret void 486*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v4i32_i 487*9880d681SAndroid Build Coastguard Worker} 488*9880d681SAndroid Build Coastguard Worker 489*9880d681SAndroid Build Coastguard Workerdefine void @xor_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 490*9880d681SAndroid Build Coastguard Worker ; CHECK: xor_v2i64_i: 491*9880d681SAndroid Build Coastguard Worker 492*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 493*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 494*9880d681SAndroid Build Coastguard Worker %2 = xor <2 x i64> %1, <i64 3, i64 3> 495*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 3 496*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: xor.v [[R4:\$w[0-9]+]], [[R1]], [[R3]] 497*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 498*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 499*9880d681SAndroid Build Coastguard Worker 500*9880d681SAndroid Build Coastguard Worker ret void 501*9880d681SAndroid Build Coastguard Worker ; CHECK: .size xor_v2i64_i 502*9880d681SAndroid Build Coastguard Worker} 503*9880d681SAndroid Build Coastguard Worker 504*9880d681SAndroid Build Coastguard Workerdefine void @sll_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 505*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v16i8: 506*9880d681SAndroid Build Coastguard Worker 507*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 508*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 509*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 510*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 511*9880d681SAndroid Build Coastguard Worker %3 = shl <16 x i8> %1, %2 512*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sll.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 513*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 514*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 515*9880d681SAndroid Build Coastguard Worker 516*9880d681SAndroid Build Coastguard Worker ret void 517*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v16i8 518*9880d681SAndroid Build Coastguard Worker} 519*9880d681SAndroid Build Coastguard Worker 520*9880d681SAndroid Build Coastguard Workerdefine void @sll_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 521*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v8i16: 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 524*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 525*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 526*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 527*9880d681SAndroid Build Coastguard Worker %3 = shl <8 x i16> %1, %2 528*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sll.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 529*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 530*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 531*9880d681SAndroid Build Coastguard Worker 532*9880d681SAndroid Build Coastguard Worker ret void 533*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v8i16 534*9880d681SAndroid Build Coastguard Worker} 535*9880d681SAndroid Build Coastguard Worker 536*9880d681SAndroid Build Coastguard Workerdefine void @sll_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 537*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v4i32: 538*9880d681SAndroid Build Coastguard Worker 539*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 540*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 541*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 542*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 543*9880d681SAndroid Build Coastguard Worker %3 = shl <4 x i32> %1, %2 544*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sll.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 545*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 546*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 547*9880d681SAndroid Build Coastguard Worker 548*9880d681SAndroid Build Coastguard Worker ret void 549*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v4i32 550*9880d681SAndroid Build Coastguard Worker} 551*9880d681SAndroid Build Coastguard Worker 552*9880d681SAndroid Build Coastguard Workerdefine void @sll_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 553*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v2i64: 554*9880d681SAndroid Build Coastguard Worker 555*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 556*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 557*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 558*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 559*9880d681SAndroid Build Coastguard Worker %3 = shl <2 x i64> %1, %2 560*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sll.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 561*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 562*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 563*9880d681SAndroid Build Coastguard Worker 564*9880d681SAndroid Build Coastguard Worker ret void 565*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v2i64 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Workerdefine void @sll_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 569*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v16i8_i: 570*9880d681SAndroid Build Coastguard Worker 571*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 572*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 573*9880d681SAndroid Build Coastguard Worker %2 = shl <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 574*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: slli.b [[R4:\$w[0-9]+]], [[R1]], 1 575*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 576*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 577*9880d681SAndroid Build Coastguard Worker 578*9880d681SAndroid Build Coastguard Worker ret void 579*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v16i8_i 580*9880d681SAndroid Build Coastguard Worker} 581*9880d681SAndroid Build Coastguard Worker 582*9880d681SAndroid Build Coastguard Workerdefine void @sll_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 583*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v8i16_i: 584*9880d681SAndroid Build Coastguard Worker 585*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 586*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 587*9880d681SAndroid Build Coastguard Worker %2 = shl <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 588*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: slli.h [[R4:\$w[0-9]+]], [[R1]], 1 589*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 590*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 591*9880d681SAndroid Build Coastguard Worker 592*9880d681SAndroid Build Coastguard Worker ret void 593*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v8i16_i 594*9880d681SAndroid Build Coastguard Worker} 595*9880d681SAndroid Build Coastguard Worker 596*9880d681SAndroid Build Coastguard Workerdefine void @sll_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 597*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v4i32_i: 598*9880d681SAndroid Build Coastguard Worker 599*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 600*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 601*9880d681SAndroid Build Coastguard Worker %2 = shl <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 602*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: slli.w [[R4:\$w[0-9]+]], [[R1]], 1 603*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 604*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 605*9880d681SAndroid Build Coastguard Worker 606*9880d681SAndroid Build Coastguard Worker ret void 607*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v4i32_i 608*9880d681SAndroid Build Coastguard Worker} 609*9880d681SAndroid Build Coastguard Worker 610*9880d681SAndroid Build Coastguard Workerdefine void @sll_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 611*9880d681SAndroid Build Coastguard Worker ; CHECK: sll_v2i64_i: 612*9880d681SAndroid Build Coastguard Worker 613*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 614*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 615*9880d681SAndroid Build Coastguard Worker %2 = shl <2 x i64> %1, <i64 1, i64 1> 616*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: slli.d [[R4:\$w[0-9]+]], [[R1]], 1 617*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 618*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 619*9880d681SAndroid Build Coastguard Worker 620*9880d681SAndroid Build Coastguard Worker ret void 621*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sll_v2i64_i 622*9880d681SAndroid Build Coastguard Worker} 623*9880d681SAndroid Build Coastguard Worker 624*9880d681SAndroid Build Coastguard Workerdefine void @sra_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 625*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v16i8: 626*9880d681SAndroid Build Coastguard Worker 627*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 628*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 629*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 630*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 631*9880d681SAndroid Build Coastguard Worker %3 = ashr <16 x i8> %1, %2 632*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sra.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 633*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 634*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 635*9880d681SAndroid Build Coastguard Worker 636*9880d681SAndroid Build Coastguard Worker ret void 637*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v16i8 638*9880d681SAndroid Build Coastguard Worker} 639*9880d681SAndroid Build Coastguard Worker 640*9880d681SAndroid Build Coastguard Workerdefine void @sra_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 641*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v8i16: 642*9880d681SAndroid Build Coastguard Worker 643*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 644*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 645*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 646*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 647*9880d681SAndroid Build Coastguard Worker %3 = ashr <8 x i16> %1, %2 648*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sra.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 649*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 650*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 651*9880d681SAndroid Build Coastguard Worker 652*9880d681SAndroid Build Coastguard Worker ret void 653*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v8i16 654*9880d681SAndroid Build Coastguard Worker} 655*9880d681SAndroid Build Coastguard Worker 656*9880d681SAndroid Build Coastguard Workerdefine void @sra_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 657*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v4i32: 658*9880d681SAndroid Build Coastguard Worker 659*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 660*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 661*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 662*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 663*9880d681SAndroid Build Coastguard Worker %3 = ashr <4 x i32> %1, %2 664*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sra.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 665*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 666*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 667*9880d681SAndroid Build Coastguard Worker 668*9880d681SAndroid Build Coastguard Worker ret void 669*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v4i32 670*9880d681SAndroid Build Coastguard Worker} 671*9880d681SAndroid Build Coastguard Worker 672*9880d681SAndroid Build Coastguard Workerdefine void @sra_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 673*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v2i64: 674*9880d681SAndroid Build Coastguard Worker 675*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 676*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 677*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 678*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 679*9880d681SAndroid Build Coastguard Worker %3 = ashr <2 x i64> %1, %2 680*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: sra.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 681*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 682*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 683*9880d681SAndroid Build Coastguard Worker 684*9880d681SAndroid Build Coastguard Worker ret void 685*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v2i64 686*9880d681SAndroid Build Coastguard Worker} 687*9880d681SAndroid Build Coastguard Worker 688*9880d681SAndroid Build Coastguard Workerdefine void @sra_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 689*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v16i8_i: 690*9880d681SAndroid Build Coastguard Worker 691*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 692*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 693*9880d681SAndroid Build Coastguard Worker %2 = ashr <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 694*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srai.b [[R4:\$w[0-9]+]], [[R1]], 1 695*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 696*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 697*9880d681SAndroid Build Coastguard Worker 698*9880d681SAndroid Build Coastguard Worker ret void 699*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v16i8_i 700*9880d681SAndroid Build Coastguard Worker} 701*9880d681SAndroid Build Coastguard Worker 702*9880d681SAndroid Build Coastguard Workerdefine void @sra_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 703*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v8i16_i: 704*9880d681SAndroid Build Coastguard Worker 705*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 706*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 707*9880d681SAndroid Build Coastguard Worker %2 = ashr <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 708*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srai.h [[R4:\$w[0-9]+]], [[R1]], 1 709*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 710*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 711*9880d681SAndroid Build Coastguard Worker 712*9880d681SAndroid Build Coastguard Worker ret void 713*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v8i16_i 714*9880d681SAndroid Build Coastguard Worker} 715*9880d681SAndroid Build Coastguard Worker 716*9880d681SAndroid Build Coastguard Workerdefine void @sra_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 717*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v4i32_i: 718*9880d681SAndroid Build Coastguard Worker 719*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 720*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 721*9880d681SAndroid Build Coastguard Worker %2 = ashr <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 722*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srai.w [[R4:\$w[0-9]+]], [[R1]], 1 723*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 724*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 725*9880d681SAndroid Build Coastguard Worker 726*9880d681SAndroid Build Coastguard Worker ret void 727*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v4i32_i 728*9880d681SAndroid Build Coastguard Worker} 729*9880d681SAndroid Build Coastguard Worker 730*9880d681SAndroid Build Coastguard Workerdefine void @sra_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 731*9880d681SAndroid Build Coastguard Worker ; CHECK: sra_v2i64_i: 732*9880d681SAndroid Build Coastguard Worker 733*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 734*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 735*9880d681SAndroid Build Coastguard Worker %2 = ashr <2 x i64> %1, <i64 1, i64 1> 736*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srai.d [[R4:\$w[0-9]+]], [[R1]], 1 737*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 738*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 739*9880d681SAndroid Build Coastguard Worker 740*9880d681SAndroid Build Coastguard Worker ret void 741*9880d681SAndroid Build Coastguard Worker ; CHECK: .size sra_v2i64_i 742*9880d681SAndroid Build Coastguard Worker} 743*9880d681SAndroid Build Coastguard Worker 744*9880d681SAndroid Build Coastguard Workerdefine void @srl_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 745*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v16i8: 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 748*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 749*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 750*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 751*9880d681SAndroid Build Coastguard Worker %3 = lshr <16 x i8> %1, %2 752*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srl.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 753*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 754*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 755*9880d681SAndroid Build Coastguard Worker 756*9880d681SAndroid Build Coastguard Worker ret void 757*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v16i8 758*9880d681SAndroid Build Coastguard Worker} 759*9880d681SAndroid Build Coastguard Worker 760*9880d681SAndroid Build Coastguard Workerdefine void @srl_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 761*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v8i16: 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 764*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 765*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 766*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 767*9880d681SAndroid Build Coastguard Worker %3 = lshr <8 x i16> %1, %2 768*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srl.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 769*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 770*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 771*9880d681SAndroid Build Coastguard Worker 772*9880d681SAndroid Build Coastguard Worker ret void 773*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v8i16 774*9880d681SAndroid Build Coastguard Worker} 775*9880d681SAndroid Build Coastguard Worker 776*9880d681SAndroid Build Coastguard Workerdefine void @srl_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 777*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v4i32: 778*9880d681SAndroid Build Coastguard Worker 779*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 780*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 781*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 782*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 783*9880d681SAndroid Build Coastguard Worker %3 = lshr <4 x i32> %1, %2 784*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srl.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 785*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 786*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 787*9880d681SAndroid Build Coastguard Worker 788*9880d681SAndroid Build Coastguard Worker ret void 789*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v4i32 790*9880d681SAndroid Build Coastguard Worker} 791*9880d681SAndroid Build Coastguard Worker 792*9880d681SAndroid Build Coastguard Workerdefine void @srl_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 793*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v2i64: 794*9880d681SAndroid Build Coastguard Worker 795*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 796*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 797*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 798*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 799*9880d681SAndroid Build Coastguard Worker %3 = lshr <2 x i64> %1, %2 800*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srl.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 801*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 802*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 803*9880d681SAndroid Build Coastguard Worker 804*9880d681SAndroid Build Coastguard Worker ret void 805*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v2i64 806*9880d681SAndroid Build Coastguard Worker} 807*9880d681SAndroid Build Coastguard Worker 808*9880d681SAndroid Build Coastguard Workerdefine void @srl_v16i8_i(<16 x i8>* %c, <16 x i8>* %a) nounwind { 809*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v16i8_i: 810*9880d681SAndroid Build Coastguard Worker 811*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 812*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 813*9880d681SAndroid Build Coastguard Worker %2 = lshr <16 x i8> %1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1> 814*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srli.b [[R4:\$w[0-9]+]], [[R1]], 1 815*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 816*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R4]], 0($4) 817*9880d681SAndroid Build Coastguard Worker 818*9880d681SAndroid Build Coastguard Worker ret void 819*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v16i8_i 820*9880d681SAndroid Build Coastguard Worker} 821*9880d681SAndroid Build Coastguard Worker 822*9880d681SAndroid Build Coastguard Workerdefine void @srl_v8i16_i(<8 x i16>* %c, <8 x i16>* %a) nounwind { 823*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v8i16_i: 824*9880d681SAndroid Build Coastguard Worker 825*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 826*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 827*9880d681SAndroid Build Coastguard Worker %2 = lshr <8 x i16> %1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1> 828*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srli.h [[R4:\$w[0-9]+]], [[R1]], 1 829*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 830*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R4]], 0($4) 831*9880d681SAndroid Build Coastguard Worker 832*9880d681SAndroid Build Coastguard Worker ret void 833*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v8i16_i 834*9880d681SAndroid Build Coastguard Worker} 835*9880d681SAndroid Build Coastguard Worker 836*9880d681SAndroid Build Coastguard Workerdefine void @srl_v4i32_i(<4 x i32>* %c, <4 x i32>* %a) nounwind { 837*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v4i32_i: 838*9880d681SAndroid Build Coastguard Worker 839*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 840*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 841*9880d681SAndroid Build Coastguard Worker %2 = lshr <4 x i32> %1, <i32 1, i32 1, i32 1, i32 1> 842*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srli.w [[R4:\$w[0-9]+]], [[R1]], 1 843*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 844*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R4]], 0($4) 845*9880d681SAndroid Build Coastguard Worker 846*9880d681SAndroid Build Coastguard Worker ret void 847*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v4i32_i 848*9880d681SAndroid Build Coastguard Worker} 849*9880d681SAndroid Build Coastguard Worker 850*9880d681SAndroid Build Coastguard Workerdefine void @srl_v2i64_i(<2 x i64>* %c, <2 x i64>* %a) nounwind { 851*9880d681SAndroid Build Coastguard Worker ; CHECK: srl_v2i64_i: 852*9880d681SAndroid Build Coastguard Worker 853*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 854*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 855*9880d681SAndroid Build Coastguard Worker %2 = lshr <2 x i64> %1, <i64 1, i64 1> 856*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: srli.d [[R4:\$w[0-9]+]], [[R1]], 1 857*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 858*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R4]], 0($4) 859*9880d681SAndroid Build Coastguard Worker 860*9880d681SAndroid Build Coastguard Worker ret void 861*9880d681SAndroid Build Coastguard Worker ; CHECK: .size srl_v2i64_i 862*9880d681SAndroid Build Coastguard Worker} 863*9880d681SAndroid Build Coastguard Worker 864*9880d681SAndroid Build Coastguard Workerdefine void @ctpop_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 865*9880d681SAndroid Build Coastguard Worker ; CHECK: ctpop_v16i8: 866*9880d681SAndroid Build Coastguard Worker 867*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 868*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 869*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.ctpop.v16i8 (<16 x i8> %1) 870*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pcnt.b [[R3:\$w[0-9]+]], [[R1]] 871*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 872*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 873*9880d681SAndroid Build Coastguard Worker 874*9880d681SAndroid Build Coastguard Worker ret void 875*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctpop_v16i8 876*9880d681SAndroid Build Coastguard Worker} 877*9880d681SAndroid Build Coastguard Worker 878*9880d681SAndroid Build Coastguard Workerdefine void @ctpop_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 879*9880d681SAndroid Build Coastguard Worker ; CHECK: ctpop_v8i16: 880*9880d681SAndroid Build Coastguard Worker 881*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 882*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 883*9880d681SAndroid Build Coastguard Worker %2 = tail call <8 x i16> @llvm.ctpop.v8i16 (<8 x i16> %1) 884*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pcnt.h [[R3:\$w[0-9]+]], [[R1]] 885*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 886*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 887*9880d681SAndroid Build Coastguard Worker 888*9880d681SAndroid Build Coastguard Worker ret void 889*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctpop_v8i16 890*9880d681SAndroid Build Coastguard Worker} 891*9880d681SAndroid Build Coastguard Worker 892*9880d681SAndroid Build Coastguard Workerdefine void @ctpop_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 893*9880d681SAndroid Build Coastguard Worker ; CHECK: ctpop_v4i32: 894*9880d681SAndroid Build Coastguard Worker 895*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 896*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 897*9880d681SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.ctpop.v4i32 (<4 x i32> %1) 898*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pcnt.w [[R3:\$w[0-9]+]], [[R1]] 899*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 900*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 901*9880d681SAndroid Build Coastguard Worker 902*9880d681SAndroid Build Coastguard Worker ret void 903*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctpop_v4i32 904*9880d681SAndroid Build Coastguard Worker} 905*9880d681SAndroid Build Coastguard Worker 906*9880d681SAndroid Build Coastguard Workerdefine void @ctpop_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 907*9880d681SAndroid Build Coastguard Worker ; CHECK: ctpop_v2i64: 908*9880d681SAndroid Build Coastguard Worker 909*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 910*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 911*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.ctpop.v2i64 (<2 x i64> %1) 912*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pcnt.d [[R3:\$w[0-9]+]], [[R1]] 913*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 914*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 915*9880d681SAndroid Build Coastguard Worker 916*9880d681SAndroid Build Coastguard Worker ret void 917*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctpop_v2i64 918*9880d681SAndroid Build Coastguard Worker} 919*9880d681SAndroid Build Coastguard Worker 920*9880d681SAndroid Build Coastguard Workerdefine void @ctlz_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 921*9880d681SAndroid Build Coastguard Worker ; CHECK: ctlz_v16i8: 922*9880d681SAndroid Build Coastguard Worker 923*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 924*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 925*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.ctlz.v16i8 (<16 x i8> %1) 926*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nlzc.b [[R3:\$w[0-9]+]], [[R1]] 927*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 928*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 929*9880d681SAndroid Build Coastguard Worker 930*9880d681SAndroid Build Coastguard Worker ret void 931*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctlz_v16i8 932*9880d681SAndroid Build Coastguard Worker} 933*9880d681SAndroid Build Coastguard Worker 934*9880d681SAndroid Build Coastguard Workerdefine void @ctlz_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 935*9880d681SAndroid Build Coastguard Worker ; CHECK: ctlz_v8i16: 936*9880d681SAndroid Build Coastguard Worker 937*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 938*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 939*9880d681SAndroid Build Coastguard Worker %2 = tail call <8 x i16> @llvm.ctlz.v8i16 (<8 x i16> %1) 940*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nlzc.h [[R3:\$w[0-9]+]], [[R1]] 941*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 942*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 943*9880d681SAndroid Build Coastguard Worker 944*9880d681SAndroid Build Coastguard Worker ret void 945*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctlz_v8i16 946*9880d681SAndroid Build Coastguard Worker} 947*9880d681SAndroid Build Coastguard Worker 948*9880d681SAndroid Build Coastguard Workerdefine void @ctlz_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 949*9880d681SAndroid Build Coastguard Worker ; CHECK: ctlz_v4i32: 950*9880d681SAndroid Build Coastguard Worker 951*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 952*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 953*9880d681SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.ctlz.v4i32 (<4 x i32> %1) 954*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nlzc.w [[R3:\$w[0-9]+]], [[R1]] 955*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 956*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 957*9880d681SAndroid Build Coastguard Worker 958*9880d681SAndroid Build Coastguard Worker ret void 959*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctlz_v4i32 960*9880d681SAndroid Build Coastguard Worker} 961*9880d681SAndroid Build Coastguard Worker 962*9880d681SAndroid Build Coastguard Workerdefine void @ctlz_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 963*9880d681SAndroid Build Coastguard Worker ; CHECK: ctlz_v2i64: 964*9880d681SAndroid Build Coastguard Worker 965*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 966*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 967*9880d681SAndroid Build Coastguard Worker %2 = tail call <2 x i64> @llvm.ctlz.v2i64 (<2 x i64> %1) 968*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: nlzc.d [[R3:\$w[0-9]+]], [[R1]] 969*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 970*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 971*9880d681SAndroid Build Coastguard Worker 972*9880d681SAndroid Build Coastguard Worker ret void 973*9880d681SAndroid Build Coastguard Worker ; CHECK: .size ctlz_v2i64 974*9880d681SAndroid Build Coastguard Worker} 975*9880d681SAndroid Build Coastguard Worker 976*9880d681SAndroid Build Coastguard Workerdefine void @bsel_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b, <16 x i8>* %m) nounwind { 977*9880d681SAndroid Build Coastguard Worker ; CHECK: bsel_v16i8: 978*9880d681SAndroid Build Coastguard Worker 979*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 980*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 981*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 982*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 983*9880d681SAndroid Build Coastguard Worker %3 = load <16 x i8>, <16 x i8>* %m 984*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($7) 985*9880d681SAndroid Build Coastguard Worker %4 = xor <16 x i8> %3, <i8 -1, i8 -1, i8 -1, i8 -1, 986*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1, 987*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1, 988*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1> 989*9880d681SAndroid Build Coastguard Worker %5 = and <16 x i8> %1, %3 990*9880d681SAndroid Build Coastguard Worker %6 = and <16 x i8> %2, %4 991*9880d681SAndroid Build Coastguard Worker %7 = or <16 x i8> %5, %6 992*9880d681SAndroid Build Coastguard Worker ; bmnz is the same operation 993*9880d681SAndroid Build Coastguard Worker ; (vselect Mask, IfSet, IfClr) -> (BMNZ IfClr, IfSet, Mask) 994*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bmnz.v [[R2]], [[R1]], [[R3]] 995*9880d681SAndroid Build Coastguard Worker store <16 x i8> %7, <16 x i8>* %c 996*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R2]], 0($4) 997*9880d681SAndroid Build Coastguard Worker 998*9880d681SAndroid Build Coastguard Worker ret void 999*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bsel_v16i8 1000*9880d681SAndroid Build Coastguard Worker} 1001*9880d681SAndroid Build Coastguard Worker 1002*9880d681SAndroid Build Coastguard Workerdefine void @bsel_v16i8_i(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %m) nounwind { 1003*9880d681SAndroid Build Coastguard Worker ; CHECK: bsel_v16i8_i: 1004*9880d681SAndroid Build Coastguard Worker 1005*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1006*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1007*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %m 1008*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0($6) 1009*9880d681SAndroid Build Coastguard Worker %3 = xor <16 x i8> %2, <i8 -1, i8 -1, i8 -1, i8 -1, 1010*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1, 1011*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1, 1012*9880d681SAndroid Build Coastguard Worker i8 -1, i8 -1, i8 -1, i8 -1> 1013*9880d681SAndroid Build Coastguard Worker %4 = and <16 x i8> %1, %3 1014*9880d681SAndroid Build Coastguard Worker %5 = and <16 x i8> <i8 6, i8 6, i8 6, i8 6, 1015*9880d681SAndroid Build Coastguard Worker i8 6, i8 6, i8 6, i8 6, 1016*9880d681SAndroid Build Coastguard Worker i8 6, i8 6, i8 6, i8 6, 1017*9880d681SAndroid Build Coastguard Worker i8 6, i8 6, i8 6, i8 6>, %2 1018*9880d681SAndroid Build Coastguard Worker %6 = or <16 x i8> %4, %5 1019*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bseli.b [[R3]], [[R1]], 6 1020*9880d681SAndroid Build Coastguard Worker store <16 x i8> %6, <16 x i8>* %c 1021*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1022*9880d681SAndroid Build Coastguard Worker 1023*9880d681SAndroid Build Coastguard Worker ret void 1024*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bsel_v16i8_i 1025*9880d681SAndroid Build Coastguard Worker} 1026*9880d681SAndroid Build Coastguard Worker 1027*9880d681SAndroid Build Coastguard Workerdefine void @bsel_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1028*9880d681SAndroid Build Coastguard Worker ; CHECK: bsel_v8i16: 1029*9880d681SAndroid Build Coastguard Worker 1030*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1031*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1032*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1033*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1034*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i16> %1, <i16 6, i16 6, i16 6, i16 6, 1035*9880d681SAndroid Build Coastguard Worker i16 6, i16 6, i16 6, i16 6> 1036*9880d681SAndroid Build Coastguard Worker %4 = and <8 x i16> %2, <i16 65529, i16 65529, i16 65529, i16 65529, 1037*9880d681SAndroid Build Coastguard Worker i16 65529, i16 65529, i16 65529, i16 65529> 1038*9880d681SAndroid Build Coastguard Worker %5 = or <8 x i16> %3, %4 1039*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.h [[R3:\$w[0-9]+]], 6 1040*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bsel.v [[R3]], [[R2]], [[R1]] 1041*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %c 1042*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1043*9880d681SAndroid Build Coastguard Worker 1044*9880d681SAndroid Build Coastguard Worker ret void 1045*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bsel_v8i16 1046*9880d681SAndroid Build Coastguard Worker} 1047*9880d681SAndroid Build Coastguard Worker 1048*9880d681SAndroid Build Coastguard Workerdefine void @bsel_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1049*9880d681SAndroid Build Coastguard Worker ; CHECK: bsel_v4i32: 1050*9880d681SAndroid Build Coastguard Worker 1051*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1052*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1053*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1054*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1055*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, <i32 6, i32 6, i32 6, i32 6> 1056*9880d681SAndroid Build Coastguard Worker %4 = and <4 x i32> %2, <i32 4294967289, i32 4294967289, i32 4294967289, i32 4294967289> 1057*9880d681SAndroid Build Coastguard Worker %5 = or <4 x i32> %3, %4 1058*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.w [[R3:\$w[0-9]+]], 6 1059*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bsel.v [[R3]], [[R2]], [[R1]] 1060*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %c 1061*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1062*9880d681SAndroid Build Coastguard Worker 1063*9880d681SAndroid Build Coastguard Worker ret void 1064*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bsel_v4i32 1065*9880d681SAndroid Build Coastguard Worker} 1066*9880d681SAndroid Build Coastguard Worker 1067*9880d681SAndroid Build Coastguard Workerdefine void @bsel_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1068*9880d681SAndroid Build Coastguard Worker ; CHECK: bsel_v2i64: 1069*9880d681SAndroid Build Coastguard Worker 1070*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1071*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1072*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1073*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1074*9880d681SAndroid Build Coastguard Worker %3 = and <2 x i64> %1, <i64 6, i64 6> 1075*9880d681SAndroid Build Coastguard Worker %4 = and <2 x i64> %2, <i64 18446744073709551609, i64 18446744073709551609> 1076*9880d681SAndroid Build Coastguard Worker %5 = or <2 x i64> %3, %4 1077*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ldi.d [[R3:\$w[0-9]+]], 6 1078*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bsel.v [[R3]], [[R2]], [[R1]] 1079*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %c 1080*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1081*9880d681SAndroid Build Coastguard Worker 1082*9880d681SAndroid Build Coastguard Worker ret void 1083*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bsel_v2i64 1084*9880d681SAndroid Build Coastguard Worker} 1085*9880d681SAndroid Build Coastguard Worker 1086*9880d681SAndroid Build Coastguard Workerdefine void @binsl_v16i8_i(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1087*9880d681SAndroid Build Coastguard Worker ; CHECK: binsl_v16i8_i: 1088*9880d681SAndroid Build Coastguard Worker 1089*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1090*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1091*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1092*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1093*9880d681SAndroid Build Coastguard Worker %3 = and <16 x i8> %1, <i8 192, i8 192, i8 192, i8 192, 1094*9880d681SAndroid Build Coastguard Worker i8 192, i8 192, i8 192, i8 192, 1095*9880d681SAndroid Build Coastguard Worker i8 192, i8 192, i8 192, i8 192, 1096*9880d681SAndroid Build Coastguard Worker i8 192, i8 192, i8 192, i8 192> 1097*9880d681SAndroid Build Coastguard Worker %4 = and <16 x i8> %2, <i8 63, i8 63, i8 63, i8 63, 1098*9880d681SAndroid Build Coastguard Worker i8 63, i8 63, i8 63, i8 63, 1099*9880d681SAndroid Build Coastguard Worker i8 63, i8 63, i8 63, i8 63, 1100*9880d681SAndroid Build Coastguard Worker i8 63, i8 63, i8 63, i8 63> 1101*9880d681SAndroid Build Coastguard Worker %5 = or <16 x i8> %3, %4 1102*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsli.b [[R2]], [[R1]], 2 1103*9880d681SAndroid Build Coastguard Worker store <16 x i8> %5, <16 x i8>* %c 1104*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R2]], 0($4) 1105*9880d681SAndroid Build Coastguard Worker 1106*9880d681SAndroid Build Coastguard Worker ret void 1107*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsl_v16i8_i 1108*9880d681SAndroid Build Coastguard Worker} 1109*9880d681SAndroid Build Coastguard Worker 1110*9880d681SAndroid Build Coastguard Workerdefine void @binsl_v8i16_i(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1111*9880d681SAndroid Build Coastguard Worker ; CHECK: binsl_v8i16_i: 1112*9880d681SAndroid Build Coastguard Worker 1113*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1114*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1115*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1116*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1117*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i16> %1, <i16 49152, i16 49152, i16 49152, i16 49152, 1118*9880d681SAndroid Build Coastguard Worker i16 49152, i16 49152, i16 49152, i16 49152> 1119*9880d681SAndroid Build Coastguard Worker %4 = and <8 x i16> %2, <i16 16383, i16 16383, i16 16383, i16 16383, 1120*9880d681SAndroid Build Coastguard Worker i16 16383, i16 16383, i16 16383, i16 16383> 1121*9880d681SAndroid Build Coastguard Worker %5 = or <8 x i16> %3, %4 1122*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsli.h [[R2]], [[R1]], 2 1123*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %c 1124*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R2]], 0($4) 1125*9880d681SAndroid Build Coastguard Worker 1126*9880d681SAndroid Build Coastguard Worker ret void 1127*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsl_v8i16_i 1128*9880d681SAndroid Build Coastguard Worker} 1129*9880d681SAndroid Build Coastguard Worker 1130*9880d681SAndroid Build Coastguard Workerdefine void @binsl_v4i32_i(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1131*9880d681SAndroid Build Coastguard Worker ; CHECK: binsl_v4i32_i: 1132*9880d681SAndroid Build Coastguard Worker 1133*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1134*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1135*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1136*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1137*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, <i32 3221225472, i32 3221225472, i32 3221225472, i32 3221225472> 1138*9880d681SAndroid Build Coastguard Worker %4 = and <4 x i32> %2, <i32 1073741823, i32 1073741823, i32 1073741823, i32 1073741823> 1139*9880d681SAndroid Build Coastguard Worker %5 = or <4 x i32> %3, %4 1140*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsli.w [[R2]], [[R1]], 2 1141*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %c 1142*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R2]], 0($4) 1143*9880d681SAndroid Build Coastguard Worker 1144*9880d681SAndroid Build Coastguard Worker ret void 1145*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsl_v4i32_i 1146*9880d681SAndroid Build Coastguard Worker} 1147*9880d681SAndroid Build Coastguard Worker 1148*9880d681SAndroid Build Coastguard Workerdefine void @binsl_v2i64_i(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1149*9880d681SAndroid Build Coastguard Worker ; CHECK: binsl_v2i64_i: 1150*9880d681SAndroid Build Coastguard Worker 1151*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1152*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1153*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1154*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1155*9880d681SAndroid Build Coastguard Worker %3 = and <2 x i64> %1, <i64 18446744073709551608, i64 18446744073709551608> 1156*9880d681SAndroid Build Coastguard Worker %4 = and <2 x i64> %2, <i64 7, i64 7> 1157*9880d681SAndroid Build Coastguard Worker %5 = or <2 x i64> %3, %4 1158*9880d681SAndroid Build Coastguard Worker ; TODO: We use a particularly wide mask here to work around a legalization 1159*9880d681SAndroid Build Coastguard Worker ; issue. If the mask doesn't fit within a 10-bit immediate, it gets 1160*9880d681SAndroid Build Coastguard Worker ; legalized into a constant pool. We should add a test to cover the 1161*9880d681SAndroid Build Coastguard Worker ; other cases once they correctly select binsli.d. 1162*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsli.d [[R2]], [[R1]], 61 1163*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %c 1164*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R2]], 0($4) 1165*9880d681SAndroid Build Coastguard Worker 1166*9880d681SAndroid Build Coastguard Worker ret void 1167*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsl_v2i64_i 1168*9880d681SAndroid Build Coastguard Worker} 1169*9880d681SAndroid Build Coastguard Worker 1170*9880d681SAndroid Build Coastguard Workerdefine void @binsr_v16i8_i(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1171*9880d681SAndroid Build Coastguard Worker ; CHECK: binsr_v16i8_i: 1172*9880d681SAndroid Build Coastguard Worker 1173*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1174*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1175*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1176*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1177*9880d681SAndroid Build Coastguard Worker %3 = and <16 x i8> %1, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, 1178*9880d681SAndroid Build Coastguard Worker i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 1179*9880d681SAndroid Build Coastguard Worker %4 = and <16 x i8> %2, <i8 252, i8 252, i8 252, i8 252, 1180*9880d681SAndroid Build Coastguard Worker i8 252, i8 252, i8 252, i8 252, 1181*9880d681SAndroid Build Coastguard Worker i8 252, i8 252, i8 252, i8 252, 1182*9880d681SAndroid Build Coastguard Worker i8 252, i8 252, i8 252, i8 252> 1183*9880d681SAndroid Build Coastguard Worker %5 = or <16 x i8> %3, %4 1184*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsri.b [[R2]], [[R1]], 2 1185*9880d681SAndroid Build Coastguard Worker store <16 x i8> %5, <16 x i8>* %c 1186*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R2]], 0($4) 1187*9880d681SAndroid Build Coastguard Worker 1188*9880d681SAndroid Build Coastguard Worker ret void 1189*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsr_v16i8_i 1190*9880d681SAndroid Build Coastguard Worker} 1191*9880d681SAndroid Build Coastguard Worker 1192*9880d681SAndroid Build Coastguard Workerdefine void @binsr_v8i16_i(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1193*9880d681SAndroid Build Coastguard Worker ; CHECK: binsr_v8i16_i: 1194*9880d681SAndroid Build Coastguard Worker 1195*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1196*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1197*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1198*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1199*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i16> %1, <i16 3, i16 3, i16 3, i16 3, 1200*9880d681SAndroid Build Coastguard Worker i16 3, i16 3, i16 3, i16 3> 1201*9880d681SAndroid Build Coastguard Worker %4 = and <8 x i16> %2, <i16 65532, i16 65532, i16 65532, i16 65532, 1202*9880d681SAndroid Build Coastguard Worker i16 65532, i16 65532, i16 65532, i16 65532> 1203*9880d681SAndroid Build Coastguard Worker %5 = or <8 x i16> %3, %4 1204*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsri.h [[R2]], [[R1]], 2 1205*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %c 1206*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R2]], 0($4) 1207*9880d681SAndroid Build Coastguard Worker 1208*9880d681SAndroid Build Coastguard Worker ret void 1209*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsr_v8i16_i 1210*9880d681SAndroid Build Coastguard Worker} 1211*9880d681SAndroid Build Coastguard Worker 1212*9880d681SAndroid Build Coastguard Workerdefine void @binsr_v4i32_i(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1213*9880d681SAndroid Build Coastguard Worker ; CHECK: binsr_v4i32_i: 1214*9880d681SAndroid Build Coastguard Worker 1215*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1216*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1217*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1218*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1219*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, <i32 3, i32 3, i32 3, i32 3> 1220*9880d681SAndroid Build Coastguard Worker %4 = and <4 x i32> %2, <i32 4294967292, i32 4294967292, i32 4294967292, i32 4294967292> 1221*9880d681SAndroid Build Coastguard Worker %5 = or <4 x i32> %3, %4 1222*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsri.w [[R2]], [[R1]], 2 1223*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %c 1224*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R2]], 0($4) 1225*9880d681SAndroid Build Coastguard Worker 1226*9880d681SAndroid Build Coastguard Worker ret void 1227*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsr_v4i32_i 1228*9880d681SAndroid Build Coastguard Worker} 1229*9880d681SAndroid Build Coastguard Worker 1230*9880d681SAndroid Build Coastguard Workerdefine void @binsr_v2i64_i(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1231*9880d681SAndroid Build Coastguard Worker ; CHECK: binsr_v2i64_i: 1232*9880d681SAndroid Build Coastguard Worker 1233*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1234*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1235*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1236*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1237*9880d681SAndroid Build Coastguard Worker %3 = and <2 x i64> %1, <i64 3, i64 3> 1238*9880d681SAndroid Build Coastguard Worker %4 = and <2 x i64> %2, <i64 18446744073709551612, i64 18446744073709551612> 1239*9880d681SAndroid Build Coastguard Worker %5 = or <2 x i64> %3, %4 1240*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: binsri.d [[R2]], [[R1]], 2 1241*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %c 1242*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R2]], 0($4) 1243*9880d681SAndroid Build Coastguard Worker 1244*9880d681SAndroid Build Coastguard Worker ret void 1245*9880d681SAndroid Build Coastguard Worker ; CHECK: .size binsr_v2i64_i 1246*9880d681SAndroid Build Coastguard Worker} 1247*9880d681SAndroid Build Coastguard Worker 1248*9880d681SAndroid Build Coastguard Workerdefine void @bclr_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1249*9880d681SAndroid Build Coastguard Worker ; CHECK: bclr_v16i8: 1250*9880d681SAndroid Build Coastguard Worker 1251*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1252*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1253*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1254*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1255*9880d681SAndroid Build Coastguard Worker %3 = shl <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, %2 1256*9880d681SAndroid Build Coastguard Worker %4 = xor <16 x i8> %3, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 1257*9880d681SAndroid Build Coastguard Worker %5 = and <16 x i8> %1, %4 1258*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclr.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1259*9880d681SAndroid Build Coastguard Worker store <16 x i8> %5, <16 x i8>* %c 1260*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1261*9880d681SAndroid Build Coastguard Worker 1262*9880d681SAndroid Build Coastguard Worker ret void 1263*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclr_v16i8 1264*9880d681SAndroid Build Coastguard Worker} 1265*9880d681SAndroid Build Coastguard Worker 1266*9880d681SAndroid Build Coastguard Workerdefine void @bclr_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1267*9880d681SAndroid Build Coastguard Worker ; CHECK: bclr_v8i16: 1268*9880d681SAndroid Build Coastguard Worker 1269*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1270*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1271*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1272*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1273*9880d681SAndroid Build Coastguard Worker %3 = shl <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, %2 1274*9880d681SAndroid Build Coastguard Worker %4 = xor <8 x i16> %3, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 1275*9880d681SAndroid Build Coastguard Worker %5 = and <8 x i16> %1, %4 1276*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclr.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1277*9880d681SAndroid Build Coastguard Worker store <8 x i16> %5, <8 x i16>* %c 1278*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1279*9880d681SAndroid Build Coastguard Worker 1280*9880d681SAndroid Build Coastguard Worker ret void 1281*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclr_v8i16 1282*9880d681SAndroid Build Coastguard Worker} 1283*9880d681SAndroid Build Coastguard Worker 1284*9880d681SAndroid Build Coastguard Workerdefine void @bclr_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1285*9880d681SAndroid Build Coastguard Worker ; CHECK: bclr_v4i32: 1286*9880d681SAndroid Build Coastguard Worker 1287*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1288*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1289*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1290*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1291*9880d681SAndroid Build Coastguard Worker %3 = shl <4 x i32> <i32 1, i32 1, i32 1, i32 1>, %2 1292*9880d681SAndroid Build Coastguard Worker %4 = xor <4 x i32> %3, <i32 -1, i32 -1, i32 -1, i32 -1> 1293*9880d681SAndroid Build Coastguard Worker %5 = and <4 x i32> %1, %4 1294*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclr.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1295*9880d681SAndroid Build Coastguard Worker store <4 x i32> %5, <4 x i32>* %c 1296*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1297*9880d681SAndroid Build Coastguard Worker 1298*9880d681SAndroid Build Coastguard Worker ret void 1299*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclr_v4i32 1300*9880d681SAndroid Build Coastguard Worker} 1301*9880d681SAndroid Build Coastguard Worker 1302*9880d681SAndroid Build Coastguard Workerdefine void @bclr_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1303*9880d681SAndroid Build Coastguard Worker ; CHECK: bclr_v2i64: 1304*9880d681SAndroid Build Coastguard Worker 1305*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1306*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1307*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1308*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1309*9880d681SAndroid Build Coastguard Worker %3 = shl <2 x i64> <i64 1, i64 1>, %2 1310*9880d681SAndroid Build Coastguard Worker %4 = xor <2 x i64> %3, <i64 -1, i64 -1> 1311*9880d681SAndroid Build Coastguard Worker %5 = and <2 x i64> %1, %4 1312*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclr.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1313*9880d681SAndroid Build Coastguard Worker store <2 x i64> %5, <2 x i64>* %c 1314*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1315*9880d681SAndroid Build Coastguard Worker 1316*9880d681SAndroid Build Coastguard Worker ret void 1317*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclr_v2i64 1318*9880d681SAndroid Build Coastguard Worker} 1319*9880d681SAndroid Build Coastguard Worker 1320*9880d681SAndroid Build Coastguard Workerdefine void @bset_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1321*9880d681SAndroid Build Coastguard Worker ; CHECK: bset_v16i8: 1322*9880d681SAndroid Build Coastguard Worker 1323*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1324*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1325*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1326*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1327*9880d681SAndroid Build Coastguard Worker %3 = shl <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, %2 1328*9880d681SAndroid Build Coastguard Worker %4 = or <16 x i8> %1, %3 1329*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bset.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1330*9880d681SAndroid Build Coastguard Worker store <16 x i8> %4, <16 x i8>* %c 1331*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1332*9880d681SAndroid Build Coastguard Worker 1333*9880d681SAndroid Build Coastguard Worker ret void 1334*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bset_v16i8 1335*9880d681SAndroid Build Coastguard Worker} 1336*9880d681SAndroid Build Coastguard Worker 1337*9880d681SAndroid Build Coastguard Workerdefine void @bset_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1338*9880d681SAndroid Build Coastguard Worker ; CHECK: bset_v8i16: 1339*9880d681SAndroid Build Coastguard Worker 1340*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1341*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1342*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1343*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1344*9880d681SAndroid Build Coastguard Worker %3 = shl <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, %2 1345*9880d681SAndroid Build Coastguard Worker %4 = or <8 x i16> %1, %3 1346*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bset.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1347*9880d681SAndroid Build Coastguard Worker store <8 x i16> %4, <8 x i16>* %c 1348*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1349*9880d681SAndroid Build Coastguard Worker 1350*9880d681SAndroid Build Coastguard Worker ret void 1351*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bset_v8i16 1352*9880d681SAndroid Build Coastguard Worker} 1353*9880d681SAndroid Build Coastguard Worker 1354*9880d681SAndroid Build Coastguard Workerdefine void @bset_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1355*9880d681SAndroid Build Coastguard Worker ; CHECK: bset_v4i32: 1356*9880d681SAndroid Build Coastguard Worker 1357*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1358*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1359*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1360*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1361*9880d681SAndroid Build Coastguard Worker %3 = shl <4 x i32> <i32 1, i32 1, i32 1, i32 1>, %2 1362*9880d681SAndroid Build Coastguard Worker %4 = or <4 x i32> %1, %3 1363*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bset.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1364*9880d681SAndroid Build Coastguard Worker store <4 x i32> %4, <4 x i32>* %c 1365*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1366*9880d681SAndroid Build Coastguard Worker 1367*9880d681SAndroid Build Coastguard Worker ret void 1368*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bset_v4i32 1369*9880d681SAndroid Build Coastguard Worker} 1370*9880d681SAndroid Build Coastguard Worker 1371*9880d681SAndroid Build Coastguard Workerdefine void @bset_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1372*9880d681SAndroid Build Coastguard Worker ; CHECK: bset_v2i64: 1373*9880d681SAndroid Build Coastguard Worker 1374*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1375*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1376*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1377*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1378*9880d681SAndroid Build Coastguard Worker %3 = shl <2 x i64> <i64 1, i64 1>, %2 1379*9880d681SAndroid Build Coastguard Worker %4 = or <2 x i64> %1, %3 1380*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bset.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1381*9880d681SAndroid Build Coastguard Worker store <2 x i64> %4, <2 x i64>* %c 1382*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1383*9880d681SAndroid Build Coastguard Worker 1384*9880d681SAndroid Build Coastguard Worker ret void 1385*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bset_v2i64 1386*9880d681SAndroid Build Coastguard Worker} 1387*9880d681SAndroid Build Coastguard Worker 1388*9880d681SAndroid Build Coastguard Workerdefine void @bneg_v16i8(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1389*9880d681SAndroid Build Coastguard Worker ; CHECK: bneg_v16i8: 1390*9880d681SAndroid Build Coastguard Worker 1391*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1392*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1393*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1394*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1395*9880d681SAndroid Build Coastguard Worker %3 = shl <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, %2 1396*9880d681SAndroid Build Coastguard Worker %4 = xor <16 x i8> %1, %3 1397*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bneg.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1398*9880d681SAndroid Build Coastguard Worker store <16 x i8> %4, <16 x i8>* %c 1399*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1400*9880d681SAndroid Build Coastguard Worker 1401*9880d681SAndroid Build Coastguard Worker ret void 1402*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bneg_v16i8 1403*9880d681SAndroid Build Coastguard Worker} 1404*9880d681SAndroid Build Coastguard Worker 1405*9880d681SAndroid Build Coastguard Workerdefine void @bneg_v8i16(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1406*9880d681SAndroid Build Coastguard Worker ; CHECK: bneg_v8i16: 1407*9880d681SAndroid Build Coastguard Worker 1408*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1409*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1410*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1411*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1412*9880d681SAndroid Build Coastguard Worker %3 = shl <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, %2 1413*9880d681SAndroid Build Coastguard Worker %4 = xor <8 x i16> %1, %3 1414*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bneg.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1415*9880d681SAndroid Build Coastguard Worker store <8 x i16> %4, <8 x i16>* %c 1416*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1417*9880d681SAndroid Build Coastguard Worker 1418*9880d681SAndroid Build Coastguard Worker ret void 1419*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bneg_v8i16 1420*9880d681SAndroid Build Coastguard Worker} 1421*9880d681SAndroid Build Coastguard Worker 1422*9880d681SAndroid Build Coastguard Workerdefine void @bneg_v4i32(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1423*9880d681SAndroid Build Coastguard Worker ; CHECK: bneg_v4i32: 1424*9880d681SAndroid Build Coastguard Worker 1425*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1426*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1427*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1428*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1429*9880d681SAndroid Build Coastguard Worker %3 = shl <4 x i32> <i32 1, i32 1, i32 1, i32 1>, %2 1430*9880d681SAndroid Build Coastguard Worker %4 = xor <4 x i32> %1, %3 1431*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bneg.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1432*9880d681SAndroid Build Coastguard Worker store <4 x i32> %4, <4 x i32>* %c 1433*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1434*9880d681SAndroid Build Coastguard Worker 1435*9880d681SAndroid Build Coastguard Worker ret void 1436*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bneg_v4i32 1437*9880d681SAndroid Build Coastguard Worker} 1438*9880d681SAndroid Build Coastguard Worker 1439*9880d681SAndroid Build Coastguard Workerdefine void @bneg_v2i64(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1440*9880d681SAndroid Build Coastguard Worker ; CHECK: bneg_v2i64: 1441*9880d681SAndroid Build Coastguard Worker 1442*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1443*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1444*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1445*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1446*9880d681SAndroid Build Coastguard Worker %3 = shl <2 x i64> <i64 1, i64 1>, %2 1447*9880d681SAndroid Build Coastguard Worker %4 = xor <2 x i64> %1, %3 1448*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bneg.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1449*9880d681SAndroid Build Coastguard Worker store <2 x i64> %4, <2 x i64>* %c 1450*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1451*9880d681SAndroid Build Coastguard Worker 1452*9880d681SAndroid Build Coastguard Worker ret void 1453*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bneg_v2i64 1454*9880d681SAndroid Build Coastguard Worker} 1455*9880d681SAndroid Build Coastguard Worker 1456*9880d681SAndroid Build Coastguard Workerdefine void @bclri_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1457*9880d681SAndroid Build Coastguard Worker ; CHECK: bclri_v16i8: 1458*9880d681SAndroid Build Coastguard Worker 1459*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1460*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1461*9880d681SAndroid Build Coastguard Worker %2 = xor <16 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>, 1462*9880d681SAndroid Build Coastguard Worker <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1> 1463*9880d681SAndroid Build Coastguard Worker %3 = and <16 x i8> %1, %2 1464*9880d681SAndroid Build Coastguard Worker ; bclri.b and andi.b are exactly equivalent. 1465*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: andi.b [[R3:\$w[0-9]+]], [[R1]], 247 1466*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1467*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1468*9880d681SAndroid Build Coastguard Worker 1469*9880d681SAndroid Build Coastguard Worker ret void 1470*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclri_v16i8 1471*9880d681SAndroid Build Coastguard Worker} 1472*9880d681SAndroid Build Coastguard Worker 1473*9880d681SAndroid Build Coastguard Workerdefine void @bclri_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1474*9880d681SAndroid Build Coastguard Worker ; CHECK: bclri_v8i16: 1475*9880d681SAndroid Build Coastguard Worker 1476*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1477*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1478*9880d681SAndroid Build Coastguard Worker %2 = xor <8 x i16> <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>, 1479*9880d681SAndroid Build Coastguard Worker <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1> 1480*9880d681SAndroid Build Coastguard Worker %3 = and <8 x i16> %1, %2 1481*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclri.h [[R3:\$w[0-9]+]], [[R1]], 3 1482*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1483*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1484*9880d681SAndroid Build Coastguard Worker 1485*9880d681SAndroid Build Coastguard Worker ret void 1486*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclri_v8i16 1487*9880d681SAndroid Build Coastguard Worker} 1488*9880d681SAndroid Build Coastguard Worker 1489*9880d681SAndroid Build Coastguard Workerdefine void @bclri_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1490*9880d681SAndroid Build Coastguard Worker ; CHECK: bclri_v4i32: 1491*9880d681SAndroid Build Coastguard Worker 1492*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1493*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1494*9880d681SAndroid Build Coastguard Worker %2 = xor <4 x i32> <i32 8, i32 8, i32 8, i32 8>, 1495*9880d681SAndroid Build Coastguard Worker <i32 -1, i32 -1, i32 -1, i32 -1> 1496*9880d681SAndroid Build Coastguard Worker %3 = and <4 x i32> %1, %2 1497*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclri.w [[R3:\$w[0-9]+]], [[R1]], 3 1498*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1499*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1500*9880d681SAndroid Build Coastguard Worker 1501*9880d681SAndroid Build Coastguard Worker ret void 1502*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclri_v4i32 1503*9880d681SAndroid Build Coastguard Worker} 1504*9880d681SAndroid Build Coastguard Worker 1505*9880d681SAndroid Build Coastguard Workerdefine void @bclri_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1506*9880d681SAndroid Build Coastguard Worker ; CHECK: bclri_v2i64: 1507*9880d681SAndroid Build Coastguard Worker 1508*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1509*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1510*9880d681SAndroid Build Coastguard Worker %2 = xor <2 x i64> <i64 8, i64 8>, 1511*9880d681SAndroid Build Coastguard Worker <i64 -1, i64 -1> 1512*9880d681SAndroid Build Coastguard Worker %3 = and <2 x i64> %1, %2 1513*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bclri.d [[R3:\$w[0-9]+]], [[R1]], 3 1514*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1515*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1516*9880d681SAndroid Build Coastguard Worker 1517*9880d681SAndroid Build Coastguard Worker ret void 1518*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bclri_v2i64 1519*9880d681SAndroid Build Coastguard Worker} 1520*9880d681SAndroid Build Coastguard Worker 1521*9880d681SAndroid Build Coastguard Workerdefine void @bseti_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1522*9880d681SAndroid Build Coastguard Worker ; CHECK: bseti_v16i8: 1523*9880d681SAndroid Build Coastguard Worker 1524*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1525*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1526*9880d681SAndroid Build Coastguard Worker %2 = or <16 x i8> %1, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8> 1527*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bseti.b [[R3:\$w[0-9]+]], [[R1]], 3 1528*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 1529*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1530*9880d681SAndroid Build Coastguard Worker 1531*9880d681SAndroid Build Coastguard Worker ret void 1532*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bseti_v16i8 1533*9880d681SAndroid Build Coastguard Worker} 1534*9880d681SAndroid Build Coastguard Worker 1535*9880d681SAndroid Build Coastguard Workerdefine void @bseti_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1536*9880d681SAndroid Build Coastguard Worker ; CHECK: bseti_v8i16: 1537*9880d681SAndroid Build Coastguard Worker 1538*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1539*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1540*9880d681SAndroid Build Coastguard Worker %2 = or <8 x i16> %1, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8> 1541*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bseti.h [[R3:\$w[0-9]+]], [[R1]], 3 1542*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 1543*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1544*9880d681SAndroid Build Coastguard Worker 1545*9880d681SAndroid Build Coastguard Worker ret void 1546*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bseti_v8i16 1547*9880d681SAndroid Build Coastguard Worker} 1548*9880d681SAndroid Build Coastguard Worker 1549*9880d681SAndroid Build Coastguard Workerdefine void @bseti_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1550*9880d681SAndroid Build Coastguard Worker ; CHECK: bseti_v4i32: 1551*9880d681SAndroid Build Coastguard Worker 1552*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1553*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1554*9880d681SAndroid Build Coastguard Worker %2 = or <4 x i32> %1, <i32 8, i32 8, i32 8, i32 8> 1555*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bseti.w [[R3:\$w[0-9]+]], [[R1]], 3 1556*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 1557*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1558*9880d681SAndroid Build Coastguard Worker 1559*9880d681SAndroid Build Coastguard Worker ret void 1560*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bseti_v4i32 1561*9880d681SAndroid Build Coastguard Worker} 1562*9880d681SAndroid Build Coastguard Worker 1563*9880d681SAndroid Build Coastguard Workerdefine void @bseti_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1564*9880d681SAndroid Build Coastguard Worker ; CHECK: bseti_v2i64: 1565*9880d681SAndroid Build Coastguard Worker 1566*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1567*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1568*9880d681SAndroid Build Coastguard Worker %2 = or <2 x i64> %1, <i64 8, i64 8> 1569*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bseti.d [[R3:\$w[0-9]+]], [[R1]], 3 1570*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 1571*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1572*9880d681SAndroid Build Coastguard Worker 1573*9880d681SAndroid Build Coastguard Worker ret void 1574*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bseti_v2i64 1575*9880d681SAndroid Build Coastguard Worker} 1576*9880d681SAndroid Build Coastguard Worker 1577*9880d681SAndroid Build Coastguard Workerdefine void @bnegi_v16i8(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1578*9880d681SAndroid Build Coastguard Worker ; CHECK: bnegi_v16i8: 1579*9880d681SAndroid Build Coastguard Worker 1580*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1581*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1582*9880d681SAndroid Build Coastguard Worker %2 = xor <16 x i8> %1, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8> 1583*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bnegi.b [[R3:\$w[0-9]+]], [[R1]], 3 1584*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 1585*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1586*9880d681SAndroid Build Coastguard Worker 1587*9880d681SAndroid Build Coastguard Worker ret void 1588*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bnegi_v16i8 1589*9880d681SAndroid Build Coastguard Worker} 1590*9880d681SAndroid Build Coastguard Worker 1591*9880d681SAndroid Build Coastguard Workerdefine void @bnegi_v8i16(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1592*9880d681SAndroid Build Coastguard Worker ; CHECK: bnegi_v8i16: 1593*9880d681SAndroid Build Coastguard Worker 1594*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1595*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1596*9880d681SAndroid Build Coastguard Worker %2 = xor <8 x i16> %1, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8> 1597*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bnegi.h [[R3:\$w[0-9]+]], [[R1]], 3 1598*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 1599*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1600*9880d681SAndroid Build Coastguard Worker 1601*9880d681SAndroid Build Coastguard Worker ret void 1602*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bnegi_v8i16 1603*9880d681SAndroid Build Coastguard Worker} 1604*9880d681SAndroid Build Coastguard Worker 1605*9880d681SAndroid Build Coastguard Workerdefine void @bnegi_v4i32(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1606*9880d681SAndroid Build Coastguard Worker ; CHECK: bnegi_v4i32: 1607*9880d681SAndroid Build Coastguard Worker 1608*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1609*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1610*9880d681SAndroid Build Coastguard Worker %2 = xor <4 x i32> %1, <i32 8, i32 8, i32 8, i32 8> 1611*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bnegi.w [[R3:\$w[0-9]+]], [[R1]], 3 1612*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 1613*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1614*9880d681SAndroid Build Coastguard Worker 1615*9880d681SAndroid Build Coastguard Worker ret void 1616*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bnegi_v4i32 1617*9880d681SAndroid Build Coastguard Worker} 1618*9880d681SAndroid Build Coastguard Worker 1619*9880d681SAndroid Build Coastguard Workerdefine void @bnegi_v2i64(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1620*9880d681SAndroid Build Coastguard Worker ; CHECK: bnegi_v2i64: 1621*9880d681SAndroid Build Coastguard Worker 1622*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1623*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1624*9880d681SAndroid Build Coastguard Worker %2 = xor <2 x i64> %1, <i64 8, i64 8> 1625*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: bnegi.d [[R3:\$w[0-9]+]], [[R1]], 3 1626*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 1627*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1628*9880d681SAndroid Build Coastguard Worker 1629*9880d681SAndroid Build Coastguard Worker ret void 1630*9880d681SAndroid Build Coastguard Worker ; CHECK: .size bnegi_v2i64 1631*9880d681SAndroid Build Coastguard Worker} 1632*9880d681SAndroid Build Coastguard Worker 1633*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %val) 1634*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %val) 1635*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %val) 1636*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %val) 1637*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %val) 1638*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %val) 1639*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %val) 1640*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %val) 1641