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 @vshf_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 5*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v16i8_0: 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 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0> 10*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 11*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]]) 12*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.b [[R3]], [[R1]], [[R1]] 13*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <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} 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 20*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v16i8_1: 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 23*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 24*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 25*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][1] 26*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 27*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 33*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v16i8_2: 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 36*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 37*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 38*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 16> 39*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 40*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]]) 41*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.b [[R3]], [[R2]], [[R2]] 42*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 43*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_3(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 49*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v16i8_3: 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 52*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 53*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 54*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 55*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, <16 x i32> <i32 17, i32 24, i32 25, i32 18, i32 19, i32 20, i32 28, i32 19, i32 1, i32 8, i32 9, i32 2, i32 3, i32 4, i32 12, i32 3> 56*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 57*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R3:\$w[0-9]+]], 0([[PTR_A]]) 58*9880d681SAndroid Build Coastguard Worker ; The concatenation step of vshf is bitwise not vectorwise so we must reverse 59*9880d681SAndroid Build Coastguard Worker ; the operands to get the right answer. 60*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.b [[R3]], [[R2]], [[R1]] 61*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 62*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v16i8_4(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 68*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v16i8_4: 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 71*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 72*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> %1, <16 x i32> <i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17, i32 1, i32 17> 73*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][1] 74*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 75*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker ret void 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 81*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v8i16_0: 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 84*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 85*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0> 86*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 87*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]]) 88*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.h [[R3]], [[R1]], [[R1]] 89*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 90*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 96*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v8i16_1: 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 99*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 100*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> 101*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][1] 102*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 103*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker ret void 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 109*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v8i16_2: 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 112*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 113*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 114*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 8> 115*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 116*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]]) 117*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.h [[R3]], [[R2]], [[R2]] 118*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 119*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker ret void 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_3(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 125*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v8i16_3: 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 128*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 129*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 130*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 131*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 8, i32 9, i32 2, i32 3, i32 4, i32 12, i32 3> 132*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 133*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R3:\$w[0-9]+]], 0([[PTR_A]]) 134*9880d681SAndroid Build Coastguard Worker ; The concatenation step of vshf is bitwise not vectorwise so we must reverse 135*9880d681SAndroid Build Coastguard Worker ; the operands to get the right answer. 136*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.h [[R3]], [[R2]], [[R1]] 137*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 138*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker ret void 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v8i16_4(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 144*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v8i16_4: 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 = shufflevector <8 x i16> %1, <8 x i16> %1, <8 x i32> <i32 1, i32 9, i32 1, i32 9, i32 1, i32 9, i32 1, i32 9> 149*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][1] 150*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 151*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Worker ret void 154*9880d681SAndroid Build Coastguard Worker} 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker; Note: v4i32 only has one 4-element set so it's impossible to get a vshf.w 157*9880d681SAndroid Build Coastguard Worker; instruction when using a single vector. 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 160*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v4i32_0: 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 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> 165*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R1]], 27 166*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 167*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker ret void 170*9880d681SAndroid Build Coastguard Worker} 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 173*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v4i32_1: 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 176*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 177*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 178*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][1] 179*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 180*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker ret void 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 186*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v4i32_2: 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 189*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 190*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 191*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 5, i32 6, i32 4> 192*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R2]], 36 193*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 194*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker ret void 197*9880d681SAndroid Build Coastguard Worker} 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_3(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 200*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v4i32_3: 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 203*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 204*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 205*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 206*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 5, i32 6, i32 4> 207*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 208*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R3:\$w[0-9]+]], 0([[PTR_A]]) 209*9880d681SAndroid Build Coastguard Worker ; The concatenation step of vshf is bitwise not vectorwise so we must reverse 210*9880d681SAndroid Build Coastguard Worker ; the operands to get the right answer. 211*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.w [[R3]], [[R2]], [[R1]] 212*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 213*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker ret void 216*9880d681SAndroid Build Coastguard Worker} 217*9880d681SAndroid Build Coastguard Worker 218*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v4i32_4(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 219*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v4i32_4: 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 222*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 223*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> %1, <4 x i32> <i32 1, i32 5, i32 5, i32 1> 224*9880d681SAndroid Build Coastguard Worker ; The two operand vectors are the same so element 1 and 5 are equivalent. 225*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][1] 226*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 227*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker ret void 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 233*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v2i64_0: 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 236*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 237*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 0> 238*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 239*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]]) 240*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.d [[R3]], [[R1]], [[R1]] 241*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 242*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 248*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v2i64_1: 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 251*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 252*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 253*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 254*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 255*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Worker ret void 258*9880d681SAndroid Build Coastguard Worker} 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 261*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v2i64_2: 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 264*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 265*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 266*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 2> 267*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 268*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]]) 269*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.d [[R3]], [[R2]], [[R2]] 270*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 271*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker ret void 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_3(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 277*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v2i64_3: 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 280*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 281*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 282*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 283*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 2> 284*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: addiu [[PTR_A:\$[0-9]+]], {{.*}}, %lo($ 285*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R3:\$w[0-9]+]], 0([[PTR_A]]) 286*9880d681SAndroid Build Coastguard Worker ; The concatenation step of vshf is bitwise not vectorwise so we must reverse 287*9880d681SAndroid Build Coastguard Worker ; the operands to get the right answer. 288*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: vshf.d [[R3]], [[R2]], [[R1]] 289*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 290*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker ret void 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdefine void @vshf_v2i64_4(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 296*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: vshf_v2i64_4: 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 299*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 300*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> %1, <2 x i32> <i32 1, i32 3> 301*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 302*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 303*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Worker ret void 306*9880d681SAndroid Build Coastguard Worker} 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Workerdefine void @shf_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 309*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: shf_v16i8_0: 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 312*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 313*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 2, i32 0, i32 5, i32 7, i32 6, i32 4, i32 9, i32 11, i32 10, i32 8, i32 13, i32 15, i32 14, i32 12> 314*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: shf.b [[R3:\$w[0-9]+]], [[R1]], 45 315*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 316*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 317*9880d681SAndroid Build Coastguard Worker 318*9880d681SAndroid Build Coastguard Worker ret void 319*9880d681SAndroid Build Coastguard Worker} 320*9880d681SAndroid Build Coastguard Worker 321*9880d681SAndroid Build Coastguard Workerdefine void @shf_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 322*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: shf_v8i16_0: 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 325*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 326*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> 327*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: shf.h [[R3:\$w[0-9]+]], [[R1]], 27 328*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 329*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Worker ret void 332*9880d681SAndroid Build Coastguard Worker} 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Workerdefine void @shf_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 335*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: shf_v4i32_0: 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 338*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 339*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0> 340*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: shf.w [[R3:\$w[0-9]+]], [[R1]], 27 341*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 342*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 343*9880d681SAndroid Build Coastguard Worker 344*9880d681SAndroid Build Coastguard Worker ret void 345*9880d681SAndroid Build Coastguard Worker} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Worker; shf.d does not exist 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 350*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v16i8_0: 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 353*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 354*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 355*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 356*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 357*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30> 358*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R2]], [[R1]] 359*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 360*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 361*9880d681SAndroid Build Coastguard Worker 362*9880d681SAndroid Build Coastguard Worker ret void 363*9880d681SAndroid Build Coastguard Worker} 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 366*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v8i16_0: 367*9880d681SAndroid Build Coastguard Worker 368*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 369*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 370*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 371*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 372*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14> 373*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R2]], [[R1]] 374*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 375*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 376*9880d681SAndroid Build Coastguard Worker 377*9880d681SAndroid Build Coastguard Worker ret void 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 381*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v4i32_0: 382*9880d681SAndroid Build Coastguard Worker 383*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 384*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 385*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 386*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 387*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 4, i32 2, i32 6> 388*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R2]], [[R1]] 389*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 390*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Worker ret void 393*9880d681SAndroid Build Coastguard Worker} 394*9880d681SAndroid Build Coastguard Worker 395*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 396*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v2i64_0: 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 399*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 400*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 401*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 402*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2> 403*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]] 404*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 405*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Worker ret void 408*9880d681SAndroid Build Coastguard Worker} 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Worker; Interleaving one operand with itself. 411*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 412*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v16i8_1: 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 415*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 416*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 417*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 418*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14> 419*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 420*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 421*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Worker ret void 424*9880d681SAndroid Build Coastguard Worker} 425*9880d681SAndroid Build Coastguard Worker 426*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 427*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v8i16_1: 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 430*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 431*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 432*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6> 433*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 434*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 435*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 436*9880d681SAndroid Build Coastguard Worker 437*9880d681SAndroid Build Coastguard Worker ret void 438*9880d681SAndroid Build Coastguard Worker} 439*9880d681SAndroid Build Coastguard Worker 440*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 441*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v4i32_1: 442*9880d681SAndroid Build Coastguard Worker 443*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 444*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 445*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 446*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 447*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 448*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 449*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 450*9880d681SAndroid Build Coastguard Worker 451*9880d681SAndroid Build Coastguard Worker ret void 452*9880d681SAndroid Build Coastguard Worker} 453*9880d681SAndroid Build Coastguard Worker 454*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 455*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v2i64_1: 456*9880d681SAndroid Build Coastguard Worker 457*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 458*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 459*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 460*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0> 461*9880d681SAndroid Build Coastguard Worker ; ilvev.d with two identical operands is equivalent to splati.d 462*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0] 463*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 464*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 465*9880d681SAndroid Build Coastguard Worker 466*9880d681SAndroid Build Coastguard Worker ret void 467*9880d681SAndroid Build Coastguard Worker} 468*9880d681SAndroid Build Coastguard Worker 469*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 470*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v16i8_2: 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 473*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 474*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 475*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 476*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 16, i32 16, i32 18, i32 18, i32 20, i32 20, i32 22, i32 22, i32 24, i32 24, i32 26, i32 26, i32 28, i32 28, i32 30, i32 30> 477*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 478*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 479*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 480*9880d681SAndroid Build Coastguard Worker 481*9880d681SAndroid Build Coastguard Worker ret void 482*9880d681SAndroid Build Coastguard Worker} 483*9880d681SAndroid Build Coastguard Worker 484*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 485*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v8i16_2: 486*9880d681SAndroid Build Coastguard Worker 487*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 488*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 489*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 490*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14> 491*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 492*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 493*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 494*9880d681SAndroid Build Coastguard Worker 495*9880d681SAndroid Build Coastguard Worker ret void 496*9880d681SAndroid Build Coastguard Worker} 497*9880d681SAndroid Build Coastguard Worker 498*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 499*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v4i32_2: 500*9880d681SAndroid Build Coastguard Worker 501*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 502*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 503*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 504*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 4, i32 6, i32 6> 505*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 506*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 507*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 508*9880d681SAndroid Build Coastguard Worker 509*9880d681SAndroid Build Coastguard Worker ret void 510*9880d681SAndroid Build Coastguard Worker} 511*9880d681SAndroid Build Coastguard Worker 512*9880d681SAndroid Build Coastguard Workerdefine void @ilvev_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 513*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvev_v2i64_2: 514*9880d681SAndroid Build Coastguard Worker 515*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 516*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 517*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 518*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2> 519*9880d681SAndroid Build Coastguard Worker ; ilvev.d with two identical operands is equivalent to splati.d 520*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0] 521*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 522*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 523*9880d681SAndroid Build Coastguard Worker 524*9880d681SAndroid Build Coastguard Worker ret void 525*9880d681SAndroid Build Coastguard Worker} 526*9880d681SAndroid Build Coastguard Worker 527*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 528*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v16i8_0: 529*9880d681SAndroid Build Coastguard Worker 530*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 531*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 532*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 533*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 534*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 535*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 1, i32 17, i32 3, i32 19, i32 5, i32 21, i32 7, i32 23, i32 9, i32 25, i32 11, i32 27, i32 13, i32 29, i32 15, i32 31> 536*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R1]], [[R2]] 537*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 538*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 539*9880d681SAndroid Build Coastguard Worker 540*9880d681SAndroid Build Coastguard Worker ret void 541*9880d681SAndroid Build Coastguard Worker} 542*9880d681SAndroid Build Coastguard Worker 543*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 544*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v8i16_0: 545*9880d681SAndroid Build Coastguard Worker 546*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 547*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 548*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 549*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 550*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15> 551*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R1]], [[R2]] 552*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 553*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 554*9880d681SAndroid Build Coastguard Worker 555*9880d681SAndroid Build Coastguard Worker ret void 556*9880d681SAndroid Build Coastguard Worker} 557*9880d681SAndroid Build Coastguard Worker 558*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 559*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v4i32_0: 560*9880d681SAndroid Build Coastguard Worker 561*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 562*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 563*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 564*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 565*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 5, i32 3, i32 7> 566*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R1]], [[R2]] 567*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 568*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 569*9880d681SAndroid Build Coastguard Worker 570*9880d681SAndroid Build Coastguard Worker ret void 571*9880d681SAndroid Build Coastguard Worker} 572*9880d681SAndroid Build Coastguard Worker 573*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 574*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v2i64_0: 575*9880d681SAndroid Build Coastguard Worker 576*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 577*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 578*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 579*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 580*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3> 581*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 582*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 583*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 584*9880d681SAndroid Build Coastguard Worker 585*9880d681SAndroid Build Coastguard Worker ret void 586*9880d681SAndroid Build Coastguard Worker} 587*9880d681SAndroid Build Coastguard Worker 588*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 589*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v16i8_1: 590*9880d681SAndroid Build Coastguard Worker 591*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 592*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 593*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 594*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 595*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15> 596*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 597*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 598*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 599*9880d681SAndroid Build Coastguard Worker 600*9880d681SAndroid Build Coastguard Worker ret void 601*9880d681SAndroid Build Coastguard Worker} 602*9880d681SAndroid Build Coastguard Worker 603*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 604*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v8i16_1: 605*9880d681SAndroid Build Coastguard Worker 606*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 607*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 608*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 609*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7> 610*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 611*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 612*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 613*9880d681SAndroid Build Coastguard Worker 614*9880d681SAndroid Build Coastguard Worker ret void 615*9880d681SAndroid Build Coastguard Worker} 616*9880d681SAndroid Build Coastguard Worker 617*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 618*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v4i32_1: 619*9880d681SAndroid Build Coastguard Worker 620*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 621*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 622*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 623*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 624*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 625*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 626*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker ret void 629*9880d681SAndroid Build Coastguard Worker} 630*9880d681SAndroid Build Coastguard Worker 631*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 632*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v2i64_1: 633*9880d681SAndroid Build Coastguard Worker 634*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 635*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 636*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 637*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1> 638*9880d681SAndroid Build Coastguard Worker ; ilvod.d with two identical operands is equivalent to splati.d 639*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 640*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 641*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 642*9880d681SAndroid Build Coastguard Worker 643*9880d681SAndroid Build Coastguard Worker ret void 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 647*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v16i8_2: 648*9880d681SAndroid Build Coastguard Worker 649*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 650*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 651*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 652*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 653*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 17, i32 17, i32 19, i32 19, i32 21, i32 21, i32 23, i32 23, i32 25, i32 25, i32 27, i32 27, i32 29, i32 29, i32 31, i32 31> 654*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 655*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 656*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 657*9880d681SAndroid Build Coastguard Worker 658*9880d681SAndroid Build Coastguard Worker ret void 659*9880d681SAndroid Build Coastguard Worker} 660*9880d681SAndroid Build Coastguard Worker 661*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 662*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v8i16_2: 663*9880d681SAndroid Build Coastguard Worker 664*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 665*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 666*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 667*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15> 668*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 669*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 670*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 671*9880d681SAndroid Build Coastguard Worker 672*9880d681SAndroid Build Coastguard Worker ret void 673*9880d681SAndroid Build Coastguard Worker} 674*9880d681SAndroid Build Coastguard Worker 675*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 676*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v4i32_2: 677*9880d681SAndroid Build Coastguard Worker 678*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 679*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 680*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 681*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 5, i32 5, i32 7, i32 7> 682*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 683*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 684*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 685*9880d681SAndroid Build Coastguard Worker 686*9880d681SAndroid Build Coastguard Worker ret void 687*9880d681SAndroid Build Coastguard Worker} 688*9880d681SAndroid Build Coastguard Worker 689*9880d681SAndroid Build Coastguard Workerdefine void @ilvod_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 690*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvod_v2i64_2: 691*9880d681SAndroid Build Coastguard Worker 692*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 693*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 694*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 695*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3> 696*9880d681SAndroid Build Coastguard Worker ; ilvod.d with two identical operands is equivalent to splati.d 697*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1] 698*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 699*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 700*9880d681SAndroid Build Coastguard Worker 701*9880d681SAndroid Build Coastguard Worker ret void 702*9880d681SAndroid Build Coastguard Worker} 703*9880d681SAndroid Build Coastguard Worker 704*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 705*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v16i8_0: 706*9880d681SAndroid Build Coastguard Worker 707*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 708*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 709*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 710*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 711*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 712*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> 713*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R2]], [[R1]] 714*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 715*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 716*9880d681SAndroid Build Coastguard Worker 717*9880d681SAndroid Build Coastguard Worker ret void 718*9880d681SAndroid Build Coastguard Worker} 719*9880d681SAndroid Build Coastguard Worker 720*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 721*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v8i16_0: 722*9880d681SAndroid Build Coastguard Worker 723*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 724*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 725*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 726*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 727*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11> 728*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R2]], [[R1]] 729*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 730*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 731*9880d681SAndroid Build Coastguard Worker 732*9880d681SAndroid Build Coastguard Worker ret void 733*9880d681SAndroid Build Coastguard Worker} 734*9880d681SAndroid Build Coastguard Worker 735*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 736*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v4i32_0: 737*9880d681SAndroid Build Coastguard Worker 738*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 739*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 740*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 741*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 742*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 743*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R2]], [[R1]] 744*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 745*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 746*9880d681SAndroid Build Coastguard Worker 747*9880d681SAndroid Build Coastguard Worker ret void 748*9880d681SAndroid Build Coastguard Worker} 749*9880d681SAndroid Build Coastguard Worker 750*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 751*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v2i64_0: 752*9880d681SAndroid Build Coastguard Worker 753*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 754*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 755*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 756*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 757*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2> 758*9880d681SAndroid Build Coastguard Worker ; ilvr.d and ilvev.d are equivalent for v2i64 759*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]] 760*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 761*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Worker ret void 764*9880d681SAndroid Build Coastguard Worker} 765*9880d681SAndroid Build Coastguard Worker 766*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 767*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v16i8_1: 768*9880d681SAndroid Build Coastguard Worker 769*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 770*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 771*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 772*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 773*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 16, i32 16, i32 17, i32 17, i32 18, i32 18, i32 19, i32 19, i32 20, i32 20, i32 21, i32 21, i32 22, i32 22, i32 23, i32 23> 774*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 775*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 776*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 777*9880d681SAndroid Build Coastguard Worker 778*9880d681SAndroid Build Coastguard Worker ret void 779*9880d681SAndroid Build Coastguard Worker} 780*9880d681SAndroid Build Coastguard Worker 781*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 782*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v8i16_1: 783*9880d681SAndroid Build Coastguard Worker 784*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 785*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 786*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 787*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 8, i32 9, i32 9, i32 10, i32 10, i32 11, i32 11> 788*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 789*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 790*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 791*9880d681SAndroid Build Coastguard Worker 792*9880d681SAndroid Build Coastguard Worker ret void 793*9880d681SAndroid Build Coastguard Worker} 794*9880d681SAndroid Build Coastguard Worker 795*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 796*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v4i32_1: 797*9880d681SAndroid Build Coastguard Worker 798*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 799*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 800*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 801*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 4, i32 5, i32 5> 802*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 803*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 804*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 805*9880d681SAndroid Build Coastguard Worker 806*9880d681SAndroid Build Coastguard Worker ret void 807*9880d681SAndroid Build Coastguard Worker} 808*9880d681SAndroid Build Coastguard Worker 809*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 810*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v2i64_1: 811*9880d681SAndroid Build Coastguard Worker 812*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 813*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 814*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 815*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2> 816*9880d681SAndroid Build Coastguard Worker ; ilvr.d and splati.d are equivalent for v2i64 817*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0] 818*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 819*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 820*9880d681SAndroid Build Coastguard Worker 821*9880d681SAndroid Build Coastguard Worker ret void 822*9880d681SAndroid Build Coastguard Worker} 823*9880d681SAndroid Build Coastguard Worker 824*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 825*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v16i8_2: 826*9880d681SAndroid Build Coastguard Worker 827*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 828*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 829*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 830*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 831*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7> 832*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 833*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 834*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 835*9880d681SAndroid Build Coastguard Worker 836*9880d681SAndroid Build Coastguard Worker ret void 837*9880d681SAndroid Build Coastguard Worker} 838*9880d681SAndroid Build Coastguard Worker 839*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 840*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v8i16_2: 841*9880d681SAndroid Build Coastguard Worker 842*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 843*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 844*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 845*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3> 846*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 847*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 848*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 849*9880d681SAndroid Build Coastguard Worker 850*9880d681SAndroid Build Coastguard Worker ret void 851*9880d681SAndroid Build Coastguard Worker} 852*9880d681SAndroid Build Coastguard Worker 853*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 854*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v4i32_2: 855*9880d681SAndroid Build Coastguard Worker 856*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 857*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 858*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 859*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 0, i32 1, i32 1> 860*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvr.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 861*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 862*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 863*9880d681SAndroid Build Coastguard Worker 864*9880d681SAndroid Build Coastguard Worker ret void 865*9880d681SAndroid Build Coastguard Worker} 866*9880d681SAndroid Build Coastguard Worker 867*9880d681SAndroid Build Coastguard Workerdefine void @ilvr_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 868*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvr_v2i64_2: 869*9880d681SAndroid Build Coastguard Worker 870*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 871*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 872*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 873*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0> 874*9880d681SAndroid Build Coastguard Worker ; ilvr.d and splati.d are equivalent for v2i64 875*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0] 876*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 877*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 878*9880d681SAndroid Build Coastguard Worker 879*9880d681SAndroid Build Coastguard Worker ret void 880*9880d681SAndroid Build Coastguard Worker} 881*9880d681SAndroid Build Coastguard Worker 882*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 883*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v16i8_0: 884*9880d681SAndroid Build Coastguard Worker 885*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 886*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 887*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 888*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 889*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 890*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31> 891*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R2]], [[R1]] 892*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 893*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 894*9880d681SAndroid Build Coastguard Worker 895*9880d681SAndroid Build Coastguard Worker ret void 896*9880d681SAndroid Build Coastguard Worker} 897*9880d681SAndroid Build Coastguard Worker 898*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 899*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v8i16_0: 900*9880d681SAndroid Build Coastguard Worker 901*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 902*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 903*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 904*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 905*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15> 906*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R2]], [[R1]] 907*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 908*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 909*9880d681SAndroid Build Coastguard Worker 910*9880d681SAndroid Build Coastguard Worker ret void 911*9880d681SAndroid Build Coastguard Worker} 912*9880d681SAndroid Build Coastguard Worker 913*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 914*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v4i32_0: 915*9880d681SAndroid Build Coastguard Worker 916*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 917*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 918*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 919*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 920*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7> 921*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R2]], [[R1]] 922*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 923*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 924*9880d681SAndroid Build Coastguard Worker 925*9880d681SAndroid Build Coastguard Worker ret void 926*9880d681SAndroid Build Coastguard Worker} 927*9880d681SAndroid Build Coastguard Worker 928*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 929*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v2i64_0: 930*9880d681SAndroid Build Coastguard Worker 931*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 932*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 933*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 934*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 935*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3> 936*9880d681SAndroid Build Coastguard Worker ; ilvl.d and ilvod.d are equivalent for v2i64 937*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 938*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 939*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 940*9880d681SAndroid Build Coastguard Worker 941*9880d681SAndroid Build Coastguard Worker ret void 942*9880d681SAndroid Build Coastguard Worker} 943*9880d681SAndroid Build Coastguard Worker 944*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 945*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v16i8_1: 946*9880d681SAndroid Build Coastguard Worker 947*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 948*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 949*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 950*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 951*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 24, i32 24, i32 25, i32 25, i32 26, i32 26, i32 27, i32 27, i32 28, i32 28, i32 29, i32 29, i32 30, i32 30, i32 31, i32 31> 952*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 953*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 954*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 955*9880d681SAndroid Build Coastguard Worker 956*9880d681SAndroid Build Coastguard Worker ret void 957*9880d681SAndroid Build Coastguard Worker} 958*9880d681SAndroid Build Coastguard Worker 959*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 960*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v8i16_1: 961*9880d681SAndroid Build Coastguard Worker 962*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 963*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 964*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 965*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 12, i32 12, i32 13, i32 13, i32 14, i32 14, i32 15, i32 15> 966*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 967*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 968*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 969*9880d681SAndroid Build Coastguard Worker 970*9880d681SAndroid Build Coastguard Worker ret void 971*9880d681SAndroid Build Coastguard Worker} 972*9880d681SAndroid Build Coastguard Worker 973*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 974*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v4i32_1: 975*9880d681SAndroid Build Coastguard Worker 976*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 977*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 978*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 979*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 6, i32 6, i32 7, i32 7> 980*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 981*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 982*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 983*9880d681SAndroid Build Coastguard Worker 984*9880d681SAndroid Build Coastguard Worker ret void 985*9880d681SAndroid Build Coastguard Worker} 986*9880d681SAndroid Build Coastguard Worker 987*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 988*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v2i64_1: 989*9880d681SAndroid Build Coastguard Worker 990*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 991*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 992*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 993*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3> 994*9880d681SAndroid Build Coastguard Worker ; ilvl.d and splati.d are equivalent for v2i64 995*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1] 996*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 997*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 998*9880d681SAndroid Build Coastguard Worker 999*9880d681SAndroid Build Coastguard Worker ret void 1000*9880d681SAndroid Build Coastguard Worker} 1001*9880d681SAndroid Build Coastguard Worker 1002*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1003*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v16i8_2: 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>* %b 1008*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1009*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 8, i32 8, i32 9, i32 9, i32 10, i32 10, i32 11, i32 11, i32 12, i32 12, i32 13, i32 13, i32 14, i32 14, i32 15, i32 15> 1010*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1011*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1012*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1013*9880d681SAndroid Build Coastguard Worker 1014*9880d681SAndroid Build Coastguard Worker ret void 1015*9880d681SAndroid Build Coastguard Worker} 1016*9880d681SAndroid Build Coastguard Worker 1017*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1018*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v8i16_2: 1019*9880d681SAndroid Build Coastguard Worker 1020*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1021*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1022*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1023*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7> 1024*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1025*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1026*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1027*9880d681SAndroid Build Coastguard Worker 1028*9880d681SAndroid Build Coastguard Worker ret void 1029*9880d681SAndroid Build Coastguard Worker} 1030*9880d681SAndroid Build Coastguard Worker 1031*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1032*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v4i32_2: 1033*9880d681SAndroid Build Coastguard Worker 1034*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1035*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1036*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1037*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 2, i32 2, i32 3, i32 3> 1038*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvl.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1039*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1040*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1041*9880d681SAndroid Build Coastguard Worker 1042*9880d681SAndroid Build Coastguard Worker ret void 1043*9880d681SAndroid Build Coastguard Worker} 1044*9880d681SAndroid Build Coastguard Worker 1045*9880d681SAndroid Build Coastguard Workerdefine void @ilvl_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1046*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: ilvl_v2i64_2: 1047*9880d681SAndroid Build Coastguard Worker 1048*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1049*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1050*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1051*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1> 1052*9880d681SAndroid Build Coastguard Worker ; ilvl.d and splati.d are equivalent for v2i64 1053*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 1054*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1055*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1056*9880d681SAndroid Build Coastguard Worker 1057*9880d681SAndroid Build Coastguard Worker ret void 1058*9880d681SAndroid Build Coastguard Worker} 1059*9880d681SAndroid Build Coastguard Worker 1060*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1061*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v16i8_0: 1062*9880d681SAndroid Build Coastguard Worker 1063*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1064*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1065*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1066*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1067*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1068*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30> 1069*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1070*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1071*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1072*9880d681SAndroid Build Coastguard Worker 1073*9880d681SAndroid Build Coastguard Worker ret void 1074*9880d681SAndroid Build Coastguard Worker} 1075*9880d681SAndroid Build Coastguard Worker 1076*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1077*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v8i16_0: 1078*9880d681SAndroid Build Coastguard Worker 1079*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1080*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1081*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1082*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1083*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14> 1084*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1085*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1086*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1087*9880d681SAndroid Build Coastguard Worker 1088*9880d681SAndroid Build Coastguard Worker ret void 1089*9880d681SAndroid Build Coastguard Worker} 1090*9880d681SAndroid Build Coastguard Worker 1091*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1092*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v4i32_0: 1093*9880d681SAndroid Build Coastguard Worker 1094*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1095*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1096*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1097*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1098*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 2, i32 4, i32 6> 1099*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1100*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1101*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1102*9880d681SAndroid Build Coastguard Worker 1103*9880d681SAndroid Build Coastguard Worker ret void 1104*9880d681SAndroid Build Coastguard Worker} 1105*9880d681SAndroid Build Coastguard Worker 1106*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1107*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v2i64_0: 1108*9880d681SAndroid Build Coastguard Worker 1109*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1110*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1111*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1112*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1113*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 2> 1114*9880d681SAndroid Build Coastguard Worker ; pckev.d and ilvev.d are equivalent for v2i64 1115*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvev.d [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1116*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1117*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1118*9880d681SAndroid Build Coastguard Worker 1119*9880d681SAndroid Build Coastguard Worker ret void 1120*9880d681SAndroid Build Coastguard Worker} 1121*9880d681SAndroid Build Coastguard Worker 1122*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1123*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v16i8_1: 1124*9880d681SAndroid Build Coastguard Worker 1125*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1126*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1127*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1128*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1129*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30> 1130*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1131*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1132*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1133*9880d681SAndroid Build Coastguard Worker 1134*9880d681SAndroid Build Coastguard Worker ret void 1135*9880d681SAndroid Build Coastguard Worker} 1136*9880d681SAndroid Build Coastguard Worker 1137*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1138*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v8i16_1: 1139*9880d681SAndroid Build Coastguard Worker 1140*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1141*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1142*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1143*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 8, i32 10, i32 12, i32 14, i32 8, i32 10, i32 12, i32 14> 1144*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1145*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1146*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1147*9880d681SAndroid Build Coastguard Worker 1148*9880d681SAndroid Build Coastguard Worker ret void 1149*9880d681SAndroid Build Coastguard Worker} 1150*9880d681SAndroid Build Coastguard Worker 1151*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1152*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v4i32_1: 1153*9880d681SAndroid Build Coastguard Worker 1154*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1155*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1156*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1157*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 4, i32 6, i32 4, i32 6> 1158*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1159*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1160*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1161*9880d681SAndroid Build Coastguard Worker 1162*9880d681SAndroid Build Coastguard Worker ret void 1163*9880d681SAndroid Build Coastguard Worker} 1164*9880d681SAndroid Build Coastguard Worker 1165*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1166*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v2i64_1: 1167*9880d681SAndroid Build Coastguard Worker 1168*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1169*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1170*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1171*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 2, i32 2> 1172*9880d681SAndroid Build Coastguard Worker ; pckev.d and splati.d are equivalent for v2i64 1173*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][0] 1174*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1175*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1176*9880d681SAndroid Build Coastguard Worker 1177*9880d681SAndroid Build Coastguard Worker ret void 1178*9880d681SAndroid Build Coastguard Worker} 1179*9880d681SAndroid Build Coastguard Worker 1180*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1181*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v16i8_2: 1182*9880d681SAndroid Build Coastguard Worker 1183*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1184*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1185*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1186*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1187*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14> 1188*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1189*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1190*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1191*9880d681SAndroid Build Coastguard Worker 1192*9880d681SAndroid Build Coastguard Worker ret void 1193*9880d681SAndroid Build Coastguard Worker} 1194*9880d681SAndroid Build Coastguard Worker 1195*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1196*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v8i16_2: 1197*9880d681SAndroid Build Coastguard Worker 1198*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1199*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1200*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1201*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 0, i32 2, i32 4, i32 6> 1202*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1203*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1204*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1205*9880d681SAndroid Build Coastguard Worker 1206*9880d681SAndroid Build Coastguard Worker ret void 1207*9880d681SAndroid Build Coastguard Worker} 1208*9880d681SAndroid Build Coastguard Worker 1209*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1210*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v4i32_2: 1211*9880d681SAndroid Build Coastguard Worker 1212*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1213*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1214*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1215*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 0, i32 2, i32 0, i32 2> 1216*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckev.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1217*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1218*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1219*9880d681SAndroid Build Coastguard Worker 1220*9880d681SAndroid Build Coastguard Worker ret void 1221*9880d681SAndroid Build Coastguard Worker} 1222*9880d681SAndroid Build Coastguard Worker 1223*9880d681SAndroid Build Coastguard Workerdefine void @pckev_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1224*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckev_v2i64_2: 1225*9880d681SAndroid Build Coastguard Worker 1226*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1227*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1228*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1229*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 0, i32 0> 1230*9880d681SAndroid Build Coastguard Worker ; pckev.d and splati.d are equivalent for v2i64 1231*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][0] 1232*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1233*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1234*9880d681SAndroid Build Coastguard Worker 1235*9880d681SAndroid Build Coastguard Worker ret void 1236*9880d681SAndroid Build Coastguard Worker} 1237*9880d681SAndroid Build Coastguard Worker 1238*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_0(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1239*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v16i8_0: 1240*9880d681SAndroid Build Coastguard Worker 1241*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1242*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1243*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1244*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1245*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1246*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31> 1247*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1248*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1249*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1250*9880d681SAndroid Build Coastguard Worker 1251*9880d681SAndroid Build Coastguard Worker ret void 1252*9880d681SAndroid Build Coastguard Worker} 1253*9880d681SAndroid Build Coastguard Worker 1254*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_0(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1255*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v8i16_0: 1256*9880d681SAndroid Build Coastguard Worker 1257*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1258*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1259*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1260*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1261*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15> 1262*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1263*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1264*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1265*9880d681SAndroid Build Coastguard Worker 1266*9880d681SAndroid Build Coastguard Worker ret void 1267*9880d681SAndroid Build Coastguard Worker} 1268*9880d681SAndroid Build Coastguard Worker 1269*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_0(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1270*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v4i32_0: 1271*9880d681SAndroid Build Coastguard Worker 1272*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1273*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1274*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1275*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1276*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 3, i32 5, i32 7> 1277*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R2]], [[R1]] 1278*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1279*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1280*9880d681SAndroid Build Coastguard Worker 1281*9880d681SAndroid Build Coastguard Worker ret void 1282*9880d681SAndroid Build Coastguard Worker} 1283*9880d681SAndroid Build Coastguard Worker 1284*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_0(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1285*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v2i64_0: 1286*9880d681SAndroid Build Coastguard Worker 1287*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1288*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1289*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1290*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1291*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 3> 1292*9880d681SAndroid Build Coastguard Worker ; pckod.d and ilvod.d are equivalent for v2i64 1293*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ilvod.d [[R3:\$w[0-9]+]], [[R1]], [[R2]] 1294*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1295*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1296*9880d681SAndroid Build Coastguard Worker 1297*9880d681SAndroid Build Coastguard Worker ret void 1298*9880d681SAndroid Build Coastguard Worker} 1299*9880d681SAndroid Build Coastguard Worker 1300*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_1(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1301*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v16i8_1: 1302*9880d681SAndroid Build Coastguard Worker 1303*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1304*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1305*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R2:\$w[0-9]+]], 0($6) 1306*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1307*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31> 1308*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1309*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1310*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1311*9880d681SAndroid Build Coastguard Worker 1312*9880d681SAndroid Build Coastguard Worker ret void 1313*9880d681SAndroid Build Coastguard Worker} 1314*9880d681SAndroid Build Coastguard Worker 1315*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_1(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1316*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v8i16_1: 1317*9880d681SAndroid Build Coastguard Worker 1318*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1319*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1320*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R2:\$w[0-9]+]], 0($6) 1321*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 9, i32 11, i32 13, i32 15, i32 9, i32 11, i32 13, i32 15> 1322*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1323*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1324*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1325*9880d681SAndroid Build Coastguard Worker 1326*9880d681SAndroid Build Coastguard Worker ret void 1327*9880d681SAndroid Build Coastguard Worker} 1328*9880d681SAndroid Build Coastguard Worker 1329*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_1(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1330*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v4i32_1: 1331*9880d681SAndroid Build Coastguard Worker 1332*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1333*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1334*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R2:\$w[0-9]+]], 0($6) 1335*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 5, i32 7, i32 5, i32 7> 1336*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R2]], [[R2]] 1337*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1338*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1339*9880d681SAndroid Build Coastguard Worker 1340*9880d681SAndroid Build Coastguard Worker ret void 1341*9880d681SAndroid Build Coastguard Worker} 1342*9880d681SAndroid Build Coastguard Worker 1343*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_1(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1344*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v2i64_1: 1345*9880d681SAndroid Build Coastguard Worker 1346*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1347*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1348*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R2:\$w[0-9]+]], 0($6) 1349*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 3, i32 3> 1350*9880d681SAndroid Build Coastguard Worker ; pckod.d and splati.d are equivalent for v2i64 1351*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R2]][1] 1352*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1353*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1354*9880d681SAndroid Build Coastguard Worker 1355*9880d681SAndroid Build Coastguard Worker ret void 1356*9880d681SAndroid Build Coastguard Worker} 1357*9880d681SAndroid Build Coastguard Worker 1358*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v16i8_2(<16 x i8>* %c, <16 x i8>* %a, <16 x i8>* %b) nounwind { 1359*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v16i8_2: 1360*9880d681SAndroid Build Coastguard Worker 1361*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1362*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1363*9880d681SAndroid Build Coastguard Worker %2 = load <16 x i8>, <16 x i8>* %b 1364*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <16 x i8> %1, <16 x i8> %2, 1365*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15> 1366*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.b [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1367*9880d681SAndroid Build Coastguard Worker store <16 x i8> %3, <16 x i8>* %c 1368*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1369*9880d681SAndroid Build Coastguard Worker 1370*9880d681SAndroid Build Coastguard Worker ret void 1371*9880d681SAndroid Build Coastguard Worker} 1372*9880d681SAndroid Build Coastguard Worker 1373*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v8i16_2(<8 x i16>* %c, <8 x i16>* %a, <8 x i16>* %b) nounwind { 1374*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v8i16_2: 1375*9880d681SAndroid Build Coastguard Worker 1376*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1377*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1378*9880d681SAndroid Build Coastguard Worker %2 = load <8 x i16>, <8 x i16>* %b 1379*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <8 x i16> %1, <8 x i16> %2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 1, i32 3, i32 5, i32 7> 1380*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.h [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1381*9880d681SAndroid Build Coastguard Worker store <8 x i16> %3, <8 x i16>* %c 1382*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1383*9880d681SAndroid Build Coastguard Worker 1384*9880d681SAndroid Build Coastguard Worker ret void 1385*9880d681SAndroid Build Coastguard Worker} 1386*9880d681SAndroid Build Coastguard Worker 1387*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v4i32_2(<4 x i32>* %c, <4 x i32>* %a, <4 x i32>* %b) nounwind { 1388*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v4i32_2: 1389*9880d681SAndroid Build Coastguard Worker 1390*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1391*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1392*9880d681SAndroid Build Coastguard Worker %2 = load <4 x i32>, <4 x i32>* %b 1393*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x i32> %1, <4 x i32> %2, <4 x i32> <i32 1, i32 3, i32 1, i32 3> 1394*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: pckod.w [[R3:\$w[0-9]+]], [[R1]], [[R1]] 1395*9880d681SAndroid Build Coastguard Worker store <4 x i32> %3, <4 x i32>* %c 1396*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1397*9880d681SAndroid Build Coastguard Worker 1398*9880d681SAndroid Build Coastguard Worker ret void 1399*9880d681SAndroid Build Coastguard Worker} 1400*9880d681SAndroid Build Coastguard Worker 1401*9880d681SAndroid Build Coastguard Workerdefine void @pckod_v2i64_2(<2 x i64>* %c, <2 x i64>* %a, <2 x i64>* %b) nounwind { 1402*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: pckod_v2i64_2: 1403*9880d681SAndroid Build Coastguard Worker 1404*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1405*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1406*9880d681SAndroid Build Coastguard Worker %2 = load <2 x i64>, <2 x i64>* %b 1407*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x i64> %1, <2 x i64> %2, <2 x i32> <i32 1, i32 1> 1408*9880d681SAndroid Build Coastguard Worker ; pckod.d and splati.d are equivalent for v2i64 1409*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 1410*9880d681SAndroid Build Coastguard Worker store <2 x i64> %3, <2 x i64>* %c 1411*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1412*9880d681SAndroid Build Coastguard Worker 1413*9880d681SAndroid Build Coastguard Worker ret void 1414*9880d681SAndroid Build Coastguard Worker} 1415*9880d681SAndroid Build Coastguard Worker 1416*9880d681SAndroid Build Coastguard Workerdefine void @splati_v16i8_0(<16 x i8>* %c, <16 x i8>* %a) nounwind { 1417*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: splati_v16i8_0: 1418*9880d681SAndroid Build Coastguard Worker 1419*9880d681SAndroid Build Coastguard Worker %1 = load <16 x i8>, <16 x i8>* %a 1420*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.b [[R1:\$w[0-9]+]], 0($5) 1421*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> undef, 1422*9880d681SAndroid Build Coastguard Worker <16 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 1423*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.b [[R3:\$w[0-9]+]], [[R1]][4] 1424*9880d681SAndroid Build Coastguard Worker store <16 x i8> %2, <16 x i8>* %c 1425*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.b [[R3]], 0($4) 1426*9880d681SAndroid Build Coastguard Worker 1427*9880d681SAndroid Build Coastguard Worker ret void 1428*9880d681SAndroid Build Coastguard Worker} 1429*9880d681SAndroid Build Coastguard Worker 1430*9880d681SAndroid Build Coastguard Workerdefine void @splati_v8i16_0(<8 x i16>* %c, <8 x i16>* %a) nounwind { 1431*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: splati_v8i16_0: 1432*9880d681SAndroid Build Coastguard Worker 1433*9880d681SAndroid Build Coastguard Worker %1 = load <8 x i16>, <8 x i16>* %a 1434*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.h [[R1:\$w[0-9]+]], 0($5) 1435*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i16> %1, <8 x i16> undef, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 1436*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.h [[R3:\$w[0-9]+]], [[R1]][4] 1437*9880d681SAndroid Build Coastguard Worker store <8 x i16> %2, <8 x i16>* %c 1438*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.h [[R3]], 0($4) 1439*9880d681SAndroid Build Coastguard Worker 1440*9880d681SAndroid Build Coastguard Worker ret void 1441*9880d681SAndroid Build Coastguard Worker} 1442*9880d681SAndroid Build Coastguard Worker 1443*9880d681SAndroid Build Coastguard Workerdefine void @splati_v4i32_0(<4 x i32>* %c, <4 x i32>* %a) nounwind { 1444*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: splati_v4i32_0: 1445*9880d681SAndroid Build Coastguard Worker 1446*9880d681SAndroid Build Coastguard Worker %1 = load <4 x i32>, <4 x i32>* %a 1447*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.w [[R1:\$w[0-9]+]], 0($5) 1448*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %1, <4 x i32> undef, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1449*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.w [[R3:\$w[0-9]+]], [[R1]][3] 1450*9880d681SAndroid Build Coastguard Worker store <4 x i32> %2, <4 x i32>* %c 1451*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.w [[R3]], 0($4) 1452*9880d681SAndroid Build Coastguard Worker 1453*9880d681SAndroid Build Coastguard Worker ret void 1454*9880d681SAndroid Build Coastguard Worker} 1455*9880d681SAndroid Build Coastguard Worker 1456*9880d681SAndroid Build Coastguard Workerdefine void @splati_v2i64_0(<2 x i64>* %c, <2 x i64>* %a) nounwind { 1457*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: splati_v2i64_0: 1458*9880d681SAndroid Build Coastguard Worker 1459*9880d681SAndroid Build Coastguard Worker %1 = load <2 x i64>, <2 x i64>* %a 1460*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: ld.d [[R1:\$w[0-9]+]], 0($5) 1461*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i64> %1, <2 x i64> undef, <2 x i32> <i32 1, i32 1> 1462*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: splati.d [[R3:\$w[0-9]+]], [[R1]][1] 1463*9880d681SAndroid Build Coastguard Worker store <2 x i64> %2, <2 x i64>* %c 1464*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: st.d [[R3]], 0($4) 1465*9880d681SAndroid Build Coastguard Worker 1466*9880d681SAndroid Build Coastguard Worker ret void 1467*9880d681SAndroid Build Coastguard Worker} 1468