1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s8() nounwind ssp { 4*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_s8: 5*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#1}} 6*9880d681SAndroid Build Coastguard Worker %xS8x8 = alloca <8 x i8>, align 8 7*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i8>, align 8 8*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i8>, align 8 9*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i8>, <8 x i8>* %xS8x8, align 8 10*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp, <8 x i8>* %__a, align 8 11*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %xS8x8, align 8 12*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp1, <8 x i8>* %__b, align 8 13*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8 14*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8 15*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8> 16*9880d681SAndroid Build Coastguard Worker store <8 x i8> %vext, <8 x i8>* %xS8x8, align 8 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u8() nounwind ssp { 21*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_u8: 22*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#2}} 23*9880d681SAndroid Build Coastguard Worker %xU8x8 = alloca <8 x i8>, align 8 24*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i8>, align 8 25*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i8>, align 8 26*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i8>, <8 x i8>* %xU8x8, align 8 27*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp, <8 x i8>* %__a, align 8 28*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %xU8x8, align 8 29*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp1, <8 x i8>* %__b, align 8 30*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8 31*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8 32*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9> 33*9880d681SAndroid Build Coastguard Worker store <8 x i8> %vext, <8 x i8>* %xU8x8, align 8 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_p8() nounwind ssp { 38*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_p8: 39*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#3}} 40*9880d681SAndroid Build Coastguard Worker %xP8x8 = alloca <8 x i8>, align 8 41*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i8>, align 8 42*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i8>, align 8 43*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i8>, <8 x i8>* %xP8x8, align 8 44*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp, <8 x i8>* %__a, align 8 45*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %xP8x8, align 8 46*9880d681SAndroid Build Coastguard Worker store <8 x i8> %tmp1, <8 x i8>* %__b, align 8 47*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %__a, align 8 48*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x i8>, <8 x i8>* %__b, align 8 49*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i8> %tmp2, <8 x i8> %tmp3, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10> 50*9880d681SAndroid Build Coastguard Worker store <8 x i8> %vext, <8 x i8>* %xP8x8, align 8 51*9880d681SAndroid Build Coastguard Worker ret void 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s16() nounwind ssp { 55*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_s16: 56*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#2}} 57*9880d681SAndroid Build Coastguard Worker %xS16x4 = alloca <4 x i16>, align 8 58*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x i16>, align 8 59*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x i16>, align 8 60*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i16>, <4 x i16>* %xS16x4, align 8 61*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp, <4 x i16>* %__a, align 8 62*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %xS16x4, align 8 63*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp1, <4 x i16>* %__b, align 8 64*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8 65*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8> 66*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8 67*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8> 68*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16> 69*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16> 70*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 1, i32 2, i32 3, i32 4> 71*9880d681SAndroid Build Coastguard Worker store <4 x i16> %vext, <4 x i16>* %xS16x4, align 8 72*9880d681SAndroid Build Coastguard Worker ret void 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u16() nounwind ssp { 76*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_u16: 77*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#4}} 78*9880d681SAndroid Build Coastguard Worker %xU16x4 = alloca <4 x i16>, align 8 79*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x i16>, align 8 80*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x i16>, align 8 81*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i16>, <4 x i16>* %xU16x4, align 8 82*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp, <4 x i16>* %__a, align 8 83*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %xU16x4, align 8 84*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp1, <4 x i16>* %__b, align 8 85*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8 86*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8> 87*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8 88*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8> 89*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16> 90*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16> 91*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 2, i32 3, i32 4, i32 5> 92*9880d681SAndroid Build Coastguard Worker store <4 x i16> %vext, <4 x i16>* %xU16x4, align 8 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_p16() nounwind ssp { 97*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_p16: 98*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#6}} 99*9880d681SAndroid Build Coastguard Worker %xP16x4 = alloca <4 x i16>, align 8 100*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x i16>, align 8 101*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x i16>, align 8 102*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i16>, <4 x i16>* %xP16x4, align 8 103*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp, <4 x i16>* %__a, align 8 104*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %xP16x4, align 8 105*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp1, <4 x i16>* %__b, align 8 106*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %__a, align 8 107*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x i16> %tmp2 to <8 x i8> 108*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i16>, <4 x i16>* %__b, align 8 109*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x i16> %tmp4 to <8 x i8> 110*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <4 x i16> 111*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <4 x i16> 112*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x i16> %tmp6, <4 x i16> %tmp7, <4 x i32> <i32 3, i32 4, i32 5, i32 6> 113*9880d681SAndroid Build Coastguard Worker store <4 x i16> %vext, <4 x i16>* %xP16x4, align 8 114*9880d681SAndroid Build Coastguard Worker ret void 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s32() nounwind ssp { 118*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_s32: 119*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#4}} 120*9880d681SAndroid Build Coastguard Worker %xS32x2 = alloca <2 x i32>, align 8 121*9880d681SAndroid Build Coastguard Worker %__a = alloca <2 x i32>, align 8 122*9880d681SAndroid Build Coastguard Worker %__b = alloca <2 x i32>, align 8 123*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i32>, <2 x i32>* %xS32x2, align 8 124*9880d681SAndroid Build Coastguard Worker store <2 x i32> %tmp, <2 x i32>* %__a, align 8 125*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %xS32x2, align 8 126*9880d681SAndroid Build Coastguard Worker store <2 x i32> %tmp1, <2 x i32>* %__b, align 8 127*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %__a, align 8 128*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <2 x i32> %tmp2 to <8 x i8> 129*9880d681SAndroid Build Coastguard Worker %tmp4 = load <2 x i32>, <2 x i32>* %__b, align 8 130*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <2 x i32> %tmp4 to <8 x i8> 131*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <2 x i32> 132*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <2 x i32> 133*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <2 x i32> %tmp6, <2 x i32> %tmp7, <2 x i32> <i32 1, i32 2> 134*9880d681SAndroid Build Coastguard Worker store <2 x i32> %vext, <2 x i32>* %xS32x2, align 8 135*9880d681SAndroid Build Coastguard Worker ret void 136*9880d681SAndroid Build Coastguard Worker} 137*9880d681SAndroid Build Coastguard Worker 138*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u32() nounwind ssp { 139*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_u32: 140*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#4}} 141*9880d681SAndroid Build Coastguard Worker %xU32x2 = alloca <2 x i32>, align 8 142*9880d681SAndroid Build Coastguard Worker %__a = alloca <2 x i32>, align 8 143*9880d681SAndroid Build Coastguard Worker %__b = alloca <2 x i32>, align 8 144*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i32>, <2 x i32>* %xU32x2, align 8 145*9880d681SAndroid Build Coastguard Worker store <2 x i32> %tmp, <2 x i32>* %__a, align 8 146*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %xU32x2, align 8 147*9880d681SAndroid Build Coastguard Worker store <2 x i32> %tmp1, <2 x i32>* %__b, align 8 148*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %__a, align 8 149*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <2 x i32> %tmp2 to <8 x i8> 150*9880d681SAndroid Build Coastguard Worker %tmp4 = load <2 x i32>, <2 x i32>* %__b, align 8 151*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <2 x i32> %tmp4 to <8 x i8> 152*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <2 x i32> 153*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <2 x i32> 154*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <2 x i32> %tmp6, <2 x i32> %tmp7, <2 x i32> <i32 1, i32 2> 155*9880d681SAndroid Build Coastguard Worker store <2 x i32> %vext, <2 x i32>* %xU32x2, align 8 156*9880d681SAndroid Build Coastguard Worker ret void 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_f32() nounwind ssp { 160*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_f32: 161*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.8.*#4}} 162*9880d681SAndroid Build Coastguard Worker %xF32x2 = alloca <2 x float>, align 8 163*9880d681SAndroid Build Coastguard Worker %__a = alloca <2 x float>, align 8 164*9880d681SAndroid Build Coastguard Worker %__b = alloca <2 x float>, align 8 165*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x float>, <2 x float>* %xF32x2, align 8 166*9880d681SAndroid Build Coastguard Worker store <2 x float> %tmp, <2 x float>* %__a, align 8 167*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x float>, <2 x float>* %xF32x2, align 8 168*9880d681SAndroid Build Coastguard Worker store <2 x float> %tmp1, <2 x float>* %__b, align 8 169*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x float>, <2 x float>* %__a, align 8 170*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <2 x float> %tmp2 to <8 x i8> 171*9880d681SAndroid Build Coastguard Worker %tmp4 = load <2 x float>, <2 x float>* %__b, align 8 172*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <2 x float> %tmp4 to <8 x i8> 173*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <2 x float> 174*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <2 x float> 175*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <2 x float> %tmp6, <2 x float> %tmp7, <2 x i32> <i32 1, i32 2> 176*9880d681SAndroid Build Coastguard Worker store <2 x float> %vext, <2 x float>* %xF32x2, align 8 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_s64() nounwind ssp { 181*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_s64: 182*9880d681SAndroid Build Coastguard Worker ; CHECK_FIXME: {{ext.8.*#1}} 183*9880d681SAndroid Build Coastguard Worker ; this just turns into a load of the second element 184*9880d681SAndroid Build Coastguard Worker %xS64x1 = alloca <1 x i64>, align 8 185*9880d681SAndroid Build Coastguard Worker %__a = alloca <1 x i64>, align 8 186*9880d681SAndroid Build Coastguard Worker %__b = alloca <1 x i64>, align 8 187*9880d681SAndroid Build Coastguard Worker %tmp = load <1 x i64>, <1 x i64>* %xS64x1, align 8 188*9880d681SAndroid Build Coastguard Worker store <1 x i64> %tmp, <1 x i64>* %__a, align 8 189*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %xS64x1, align 8 190*9880d681SAndroid Build Coastguard Worker store <1 x i64> %tmp1, <1 x i64>* %__b, align 8 191*9880d681SAndroid Build Coastguard Worker %tmp2 = load <1 x i64>, <1 x i64>* %__a, align 8 192*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <1 x i64> %tmp2 to <8 x i8> 193*9880d681SAndroid Build Coastguard Worker %tmp4 = load <1 x i64>, <1 x i64>* %__b, align 8 194*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <1 x i64> %tmp4 to <8 x i8> 195*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <1 x i64> 196*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <1 x i64> 197*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <1 x i64> %tmp6, <1 x i64> %tmp7, <1 x i32> <i32 1> 198*9880d681SAndroid Build Coastguard Worker store <1 x i64> %vext, <1 x i64>* %xS64x1, align 8 199*9880d681SAndroid Build Coastguard Worker ret void 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine void @test_vext_u64() nounwind ssp { 203*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vext_u64: 204*9880d681SAndroid Build Coastguard Worker ; CHECK_FIXME: {{ext.8.*#1}} 205*9880d681SAndroid Build Coastguard Worker ; this is turned into a simple load of the 2nd element 206*9880d681SAndroid Build Coastguard Worker %xU64x1 = alloca <1 x i64>, align 8 207*9880d681SAndroid Build Coastguard Worker %__a = alloca <1 x i64>, align 8 208*9880d681SAndroid Build Coastguard Worker %__b = alloca <1 x i64>, align 8 209*9880d681SAndroid Build Coastguard Worker %tmp = load <1 x i64>, <1 x i64>* %xU64x1, align 8 210*9880d681SAndroid Build Coastguard Worker store <1 x i64> %tmp, <1 x i64>* %__a, align 8 211*9880d681SAndroid Build Coastguard Worker %tmp1 = load <1 x i64>, <1 x i64>* %xU64x1, align 8 212*9880d681SAndroid Build Coastguard Worker store <1 x i64> %tmp1, <1 x i64>* %__b, align 8 213*9880d681SAndroid Build Coastguard Worker %tmp2 = load <1 x i64>, <1 x i64>* %__a, align 8 214*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <1 x i64> %tmp2 to <8 x i8> 215*9880d681SAndroid Build Coastguard Worker %tmp4 = load <1 x i64>, <1 x i64>* %__b, align 8 216*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <1 x i64> %tmp4 to <8 x i8> 217*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <8 x i8> %tmp3 to <1 x i64> 218*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <8 x i8> %tmp5 to <1 x i64> 219*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <1 x i64> %tmp6, <1 x i64> %tmp7, <1 x i32> <i32 1> 220*9880d681SAndroid Build Coastguard Worker store <1 x i64> %vext, <1 x i64>* %xU64x1, align 8 221*9880d681SAndroid Build Coastguard Worker ret void 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s8() nounwind ssp { 225*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_s8: 226*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#4}} 227*9880d681SAndroid Build Coastguard Worker %xS8x16 = alloca <16 x i8>, align 16 228*9880d681SAndroid Build Coastguard Worker %__a = alloca <16 x i8>, align 16 229*9880d681SAndroid Build Coastguard Worker %__b = alloca <16 x i8>, align 16 230*9880d681SAndroid Build Coastguard Worker %tmp = load <16 x i8>, <16 x i8>* %xS8x16, align 16 231*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp, <16 x i8>* %__a, align 16 232*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %xS8x16, align 16 233*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp1, <16 x i8>* %__b, align 16 234*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16 235*9880d681SAndroid Build Coastguard Worker %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16 236*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19> 237*9880d681SAndroid Build Coastguard Worker store <16 x i8> %vext, <16 x i8>* %xS8x16, align 16 238*9880d681SAndroid Build Coastguard Worker ret void 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u8() nounwind ssp { 242*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_u8: 243*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#5}} 244*9880d681SAndroid Build Coastguard Worker %xU8x16 = alloca <16 x i8>, align 16 245*9880d681SAndroid Build Coastguard Worker %__a = alloca <16 x i8>, align 16 246*9880d681SAndroid Build Coastguard Worker %__b = alloca <16 x i8>, align 16 247*9880d681SAndroid Build Coastguard Worker %tmp = load <16 x i8>, <16 x i8>* %xU8x16, align 16 248*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp, <16 x i8>* %__a, align 16 249*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %xU8x16, align 16 250*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp1, <16 x i8>* %__b, align 16 251*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16 252*9880d681SAndroid Build Coastguard Worker %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16 253*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20> 254*9880d681SAndroid Build Coastguard Worker store <16 x i8> %vext, <16 x i8>* %xU8x16, align 16 255*9880d681SAndroid Build Coastguard Worker ret void 256*9880d681SAndroid Build Coastguard Worker} 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_p8() nounwind ssp { 259*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_p8: 260*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#6}} 261*9880d681SAndroid Build Coastguard Worker %xP8x16 = alloca <16 x i8>, align 16 262*9880d681SAndroid Build Coastguard Worker %__a = alloca <16 x i8>, align 16 263*9880d681SAndroid Build Coastguard Worker %__b = alloca <16 x i8>, align 16 264*9880d681SAndroid Build Coastguard Worker %tmp = load <16 x i8>, <16 x i8>* %xP8x16, align 16 265*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp, <16 x i8>* %__a, align 16 266*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %xP8x16, align 16 267*9880d681SAndroid Build Coastguard Worker store <16 x i8> %tmp1, <16 x i8>* %__b, align 16 268*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %__a, align 16 269*9880d681SAndroid Build Coastguard Worker %tmp3 = load <16 x i8>, <16 x i8>* %__b, align 16 270*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <16 x i8> %tmp2, <16 x i8> %tmp3, <16 x i32> <i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21> 271*9880d681SAndroid Build Coastguard Worker store <16 x i8> %vext, <16 x i8>* %xP8x16, align 16 272*9880d681SAndroid Build Coastguard Worker ret void 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s16() nounwind ssp { 276*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_s16: 277*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#14}} 278*9880d681SAndroid Build Coastguard Worker %xS16x8 = alloca <8 x i16>, align 16 279*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i16>, align 16 280*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i16>, align 16 281*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i16>, <8 x i16>* %xS16x8, align 16 282*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp, <8 x i16>* %__a, align 16 283*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %xS16x8, align 16 284*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp1, <8 x i16>* %__b, align 16 285*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16 286*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8> 287*9880d681SAndroid Build Coastguard Worker %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16 288*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8> 289*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16> 290*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16> 291*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14> 292*9880d681SAndroid Build Coastguard Worker store <8 x i16> %vext, <8 x i16>* %xS16x8, align 16 293*9880d681SAndroid Build Coastguard Worker ret void 294*9880d681SAndroid Build Coastguard Worker} 295*9880d681SAndroid Build Coastguard Worker 296*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u16() nounwind ssp { 297*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_u16: 298*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#8}} 299*9880d681SAndroid Build Coastguard Worker %xU16x8 = alloca <8 x i16>, align 16 300*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i16>, align 16 301*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i16>, align 16 302*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i16>, <8 x i16>* %xU16x8, align 16 303*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp, <8 x i16>* %__a, align 16 304*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %xU16x8, align 16 305*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp1, <8 x i16>* %__b, align 16 306*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16 307*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8> 308*9880d681SAndroid Build Coastguard Worker %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16 309*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8> 310*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16> 311*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16> 312*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11> 313*9880d681SAndroid Build Coastguard Worker store <8 x i16> %vext, <8 x i16>* %xU16x8, align 16 314*9880d681SAndroid Build Coastguard Worker ret void 315*9880d681SAndroid Build Coastguard Worker} 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_p16() nounwind ssp { 318*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_p16: 319*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#10}} 320*9880d681SAndroid Build Coastguard Worker %xP16x8 = alloca <8 x i16>, align 16 321*9880d681SAndroid Build Coastguard Worker %__a = alloca <8 x i16>, align 16 322*9880d681SAndroid Build Coastguard Worker %__b = alloca <8 x i16>, align 16 323*9880d681SAndroid Build Coastguard Worker %tmp = load <8 x i16>, <8 x i16>* %xP16x8, align 16 324*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp, <8 x i16>* %__a, align 16 325*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %xP16x8, align 16 326*9880d681SAndroid Build Coastguard Worker store <8 x i16> %tmp1, <8 x i16>* %__b, align 16 327*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %__a, align 16 328*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <8 x i16> %tmp2 to <16 x i8> 329*9880d681SAndroid Build Coastguard Worker %tmp4 = load <8 x i16>, <8 x i16>* %__b, align 16 330*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <8 x i16> %tmp4 to <16 x i8> 331*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <8 x i16> 332*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <8 x i16> 333*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <8 x i16> %tmp6, <8 x i16> %tmp7, <8 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12> 334*9880d681SAndroid Build Coastguard Worker store <8 x i16> %vext, <8 x i16>* %xP16x8, align 16 335*9880d681SAndroid Build Coastguard Worker ret void 336*9880d681SAndroid Build Coastguard Worker} 337*9880d681SAndroid Build Coastguard Worker 338*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s32() nounwind ssp { 339*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_s32: 340*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#4}} 341*9880d681SAndroid Build Coastguard Worker %xS32x4 = alloca <4 x i32>, align 16 342*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x i32>, align 16 343*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x i32>, align 16 344*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i32>, <4 x i32>* %xS32x4, align 16 345*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp, <4 x i32>* %__a, align 16 346*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %xS32x4, align 16 347*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp1, <4 x i32>* %__b, align 16 348*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %__a, align 16 349*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8> 350*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i32>, <4 x i32>* %__b, align 16 351*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x i32> %tmp4 to <16 x i8> 352*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <4 x i32> 353*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <4 x i32> 354*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x i32> %tmp6, <4 x i32> %tmp7, <4 x i32> <i32 1, i32 2, i32 3, i32 4> 355*9880d681SAndroid Build Coastguard Worker store <4 x i32> %vext, <4 x i32>* %xS32x4, align 16 356*9880d681SAndroid Build Coastguard Worker ret void 357*9880d681SAndroid Build Coastguard Worker} 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u32() nounwind ssp { 360*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_u32: 361*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#8}} 362*9880d681SAndroid Build Coastguard Worker %xU32x4 = alloca <4 x i32>, align 16 363*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x i32>, align 16 364*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x i32>, align 16 365*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x i32>, <4 x i32>* %xU32x4, align 16 366*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp, <4 x i32>* %__a, align 16 367*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %xU32x4, align 16 368*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp1, <4 x i32>* %__b, align 16 369*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %__a, align 16 370*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x i32> %tmp2 to <16 x i8> 371*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i32>, <4 x i32>* %__b, align 16 372*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x i32> %tmp4 to <16 x i8> 373*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <4 x i32> 374*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <4 x i32> 375*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x i32> %tmp6, <4 x i32> %tmp7, <4 x i32> <i32 2, i32 3, i32 4, i32 5> 376*9880d681SAndroid Build Coastguard Worker store <4 x i32> %vext, <4 x i32>* %xU32x4, align 16 377*9880d681SAndroid Build Coastguard Worker ret void 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_f32() nounwind ssp { 381*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_f32: 382*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#12}} 383*9880d681SAndroid Build Coastguard Worker %xF32x4 = alloca <4 x float>, align 16 384*9880d681SAndroid Build Coastguard Worker %__a = alloca <4 x float>, align 16 385*9880d681SAndroid Build Coastguard Worker %__b = alloca <4 x float>, align 16 386*9880d681SAndroid Build Coastguard Worker %tmp = load <4 x float>, <4 x float>* %xF32x4, align 16 387*9880d681SAndroid Build Coastguard Worker store <4 x float> %tmp, <4 x float>* %__a, align 16 388*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %xF32x4, align 16 389*9880d681SAndroid Build Coastguard Worker store <4 x float> %tmp1, <4 x float>* %__b, align 16 390*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x float>, <4 x float>* %__a, align 16 391*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <4 x float> %tmp2 to <16 x i8> 392*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x float>, <4 x float>* %__b, align 16 393*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <4 x float> %tmp4 to <16 x i8> 394*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <4 x float> 395*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <4 x float> 396*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <4 x float> %tmp6, <4 x float> %tmp7, <4 x i32> <i32 3, i32 4, i32 5, i32 6> 397*9880d681SAndroid Build Coastguard Worker store <4 x float> %vext, <4 x float>* %xF32x4, align 16 398*9880d681SAndroid Build Coastguard Worker ret void 399*9880d681SAndroid Build Coastguard Worker} 400*9880d681SAndroid Build Coastguard Worker 401*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_s64() nounwind ssp { 402*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_s64: 403*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#8}} 404*9880d681SAndroid Build Coastguard Worker %xS64x2 = alloca <2 x i64>, align 16 405*9880d681SAndroid Build Coastguard Worker %__a = alloca <2 x i64>, align 16 406*9880d681SAndroid Build Coastguard Worker %__b = alloca <2 x i64>, align 16 407*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i64>, <2 x i64>* %xS64x2, align 16 408*9880d681SAndroid Build Coastguard Worker store <2 x i64> %tmp, <2 x i64>* %__a, align 16 409*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %xS64x2, align 16 410*9880d681SAndroid Build Coastguard Worker store <2 x i64> %tmp1, <2 x i64>* %__b, align 16 411*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %__a, align 16 412*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <2 x i64> %tmp2 to <16 x i8> 413*9880d681SAndroid Build Coastguard Worker %tmp4 = load <2 x i64>, <2 x i64>* %__b, align 16 414*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <2 x i64> %tmp4 to <16 x i8> 415*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <2 x i64> 416*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <2 x i64> 417*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <2 x i64> %tmp6, <2 x i64> %tmp7, <2 x i32> <i32 1, i32 2> 418*9880d681SAndroid Build Coastguard Worker store <2 x i64> %vext, <2 x i64>* %xS64x2, align 16 419*9880d681SAndroid Build Coastguard Worker ret void 420*9880d681SAndroid Build Coastguard Worker} 421*9880d681SAndroid Build Coastguard Worker 422*9880d681SAndroid Build Coastguard Workerdefine void @test_vextq_u64() nounwind ssp { 423*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_vextq_u64: 424*9880d681SAndroid Build Coastguard Worker ; CHECK: {{ext.16.*#8}} 425*9880d681SAndroid Build Coastguard Worker %xU64x2 = alloca <2 x i64>, align 16 426*9880d681SAndroid Build Coastguard Worker %__a = alloca <2 x i64>, align 16 427*9880d681SAndroid Build Coastguard Worker %__b = alloca <2 x i64>, align 16 428*9880d681SAndroid Build Coastguard Worker %tmp = load <2 x i64>, <2 x i64>* %xU64x2, align 16 429*9880d681SAndroid Build Coastguard Worker store <2 x i64> %tmp, <2 x i64>* %__a, align 16 430*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %xU64x2, align 16 431*9880d681SAndroid Build Coastguard Worker store <2 x i64> %tmp1, <2 x i64>* %__b, align 16 432*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %__a, align 16 433*9880d681SAndroid Build Coastguard Worker %tmp3 = bitcast <2 x i64> %tmp2 to <16 x i8> 434*9880d681SAndroid Build Coastguard Worker %tmp4 = load <2 x i64>, <2 x i64>* %__b, align 16 435*9880d681SAndroid Build Coastguard Worker %tmp5 = bitcast <2 x i64> %tmp4 to <16 x i8> 436*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <16 x i8> %tmp3 to <2 x i64> 437*9880d681SAndroid Build Coastguard Worker %tmp7 = bitcast <16 x i8> %tmp5 to <2 x i64> 438*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <2 x i64> %tmp6, <2 x i64> %tmp7, <2 x i32> <i32 1, i32 2> 439*9880d681SAndroid Build Coastguard Worker store <2 x i64> %vext, <2 x i64>* %xU64x2, align 16 440*9880d681SAndroid Build Coastguard Worker ret void 441*9880d681SAndroid Build Coastguard Worker} 442*9880d681SAndroid Build Coastguard Worker 443*9880d681SAndroid Build Coastguard Worker; shuffles with an undef second operand can use an EXT also so long as the 444*9880d681SAndroid Build Coastguard Worker; indices wrap and stay sequential. 445*9880d681SAndroid Build Coastguard Worker; rdar://12051674 446*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @vext1(<16 x i8> %_a) nounwind { 447*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vext1: 448*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b v0, v0, v0, #8 449*9880d681SAndroid Build Coastguard Worker %vext = shufflevector <16 x i8> %_a, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 450*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vext 451*9880d681SAndroid Build Coastguard Worker} 452*9880d681SAndroid Build Coastguard Worker 453*9880d681SAndroid Build Coastguard Worker; <rdar://problem/12212062> 454*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vext2(<2 x i64> %p0, <2 x i64> %p1) nounwind readnone ssp { 455*9880d681SAndroid Build Coastguard Workerentry: 456*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vext2: 457*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b v1, v1, v1, #8 458*9880d681SAndroid Build Coastguard Worker; CHECK: ext.16b v0, v0, v0, #8 459*9880d681SAndroid Build Coastguard Worker; CHECK: add.2d v0, v0, v1 460*9880d681SAndroid Build Coastguard Worker %t0 = shufflevector <2 x i64> %p1, <2 x i64> undef, <2 x i32> <i32 1, i32 0> 461*9880d681SAndroid Build Coastguard Worker %t1 = shufflevector <2 x i64> %p0, <2 x i64> undef, <2 x i32> <i32 1, i32 0> 462*9880d681SAndroid Build Coastguard Worker %t2 = add <2 x i64> %t1, %t0 463*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %t2 464*9880d681SAndroid Build Coastguard Worker} 465