1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - -lower-interleaved-accesses=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vextd(<8 x i8>* %A, <8 x i8>* %B) nounwind { 4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextd: 5*9880d681SAndroid Build Coastguard Worker;CHECK: vext 6*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 7*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 8*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10> 9*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vextRd(<8 x i8>* %A, <8 x i8>* %B) nounwind { 13*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextRd: 14*9880d681SAndroid Build Coastguard Worker;CHECK: vext 15*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 16*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 17*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4> 18*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vextq(<16 x i8>* %A, <16 x i8>* %B) nounwind { 22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextq: 23*9880d681SAndroid Build Coastguard Worker;CHECK: vext 24*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 25*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 26*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <16 x i32> <i32 3, 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> 27*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vextRq(<16 x i8>* %A, <16 x i8>* %B) nounwind { 31*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextRq: 32*9880d681SAndroid Build Coastguard Worker;CHECK: vext 33*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 34*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 35*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <16 x i32> <i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6> 36*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vextd16(<4 x i16>* %A, <4 x i16>* %B) nounwind { 40*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextd16: 41*9880d681SAndroid Build Coastguard Worker;CHECK: vext 42*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 43*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 44*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <4 x i16> %tmp1, <4 x i16> %tmp2, <4 x i32> <i32 3, i32 4, i32 5, i32 6> 45*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vextq32(<4 x i32>* %A, <4 x i32>* %B) nounwind { 49*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextq32: 50*9880d681SAndroid Build Coastguard Worker;CHECK: vext 51*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 52*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 53*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <4 x i32> %tmp1, <4 x i32> %tmp2, <4 x i32> <i32 3, i32 4, i32 5, i32 6> 54*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp3 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; Undef shuffle indices should not prevent matching to VEXT: 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vextd_undef(<8 x i8>* %A, <8 x i8>* %B) nounwind { 60*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextd_undef: 61*9880d681SAndroid Build Coastguard Worker;CHECK: vext 62*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 63*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 64*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 3, i32 undef, i32 undef, i32 6, i32 7, i32 8, i32 9, i32 10> 65*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vextRq_undef(<16 x i8>* %A, <16 x i8>* %B) nounwind { 69*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextRq_undef: 70*9880d681SAndroid Build Coastguard Worker;CHECK: vext 71*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 72*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 73*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <16 x i32> <i32 23, i32 24, i32 25, i32 26, i32 undef, i32 undef, i32 29, i32 30, i32 31, i32 0, i32 1, i32 2, i32 3, i32 4, i32 undef, i32 6> 74*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vextq_undef_op2(<16 x i8> %a) nounwind { 78*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextq_undef_op2: 79*9880d681SAndroid Build Coastguard Worker;CHECK: vext 80*9880d681SAndroid Build Coastguard Workerentry: 81*9880d681SAndroid Build Coastguard Worker %tmp1 = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 2, i32 3, 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 0, i32 1> 82*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp1 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vextd_undef_op2(<8 x i8> %a) nounwind { 86*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextd_undef_op2: 87*9880d681SAndroid Build Coastguard Worker;CHECK: vext 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker %tmp1 = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1> 90*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp1 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vextq_undef_op2_undef(<16 x i8> %a) nounwind { 95*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextq_undef_op2_undef: 96*9880d681SAndroid Build Coastguard Worker;CHECK: vext 97*9880d681SAndroid Build Coastguard Workerentry: 98*9880d681SAndroid Build Coastguard Worker %tmp1 = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> <i32 2, i32 3, i32 4, i32 undef, i32 undef, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1> 99*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp1 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vextd_undef_op2_undef(<8 x i8> %a) nounwind { 103*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_vextd_undef_op2_undef: 104*9880d681SAndroid Build Coastguard Worker;CHECK: vext 105*9880d681SAndroid Build Coastguard Workerentry: 106*9880d681SAndroid Build Coastguard Worker %tmp1 = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 6, i32 7, i32 undef, i32 1> 107*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp1 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; Tests for ReconstructShuffle function. Indices have to be carefully 111*9880d681SAndroid Build Coastguard Worker; chosen to reach lowering phase as a BUILD_VECTOR. 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; One vector needs vext, the other can be handled by extract_subvector 114*9880d681SAndroid Build Coastguard Worker; Also checks interleaving of sources is handled correctly. 115*9880d681SAndroid Build Coastguard Worker; Essence: a vext is used on %A and something saner than stack load/store for final result. 116*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_interleaved(<8 x i16>* %A, <8 x i16>* %B) nounwind { 117*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_interleaved: 118*9880d681SAndroid Build Coastguard Worker;CHECK: vext.16 119*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: vext.16 120*9880d681SAndroid Build Coastguard Worker;CHECK: vzip.16 121*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 122*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 123*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <4 x i32> <i32 3, i32 8, i32 5, i32 9> 124*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; An undef in the shuffle list should still be optimizable 128*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_undef(<8 x i16>* %A, <8 x i16>* %B) nounwind { 129*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_undef: 130*9880d681SAndroid Build Coastguard Worker;CHECK: vzip.16 131*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 132*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 133*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <4 x i32> <i32 undef, i32 8, i32 5, i32 9> 134*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; We should ignore a build_vector with more than two sources. 138*9880d681SAndroid Build Coastguard Worker; Use illegal <32 x i16> type to produce such a shuffle after legalizing types. 139*9880d681SAndroid Build Coastguard Worker; Try to look for fallback to by-element inserts. 140*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_multisource(<32 x i16>* %B) nounwind { 141*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_multisource: 142*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG:d[0-9]+]][0] 143*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][1] 144*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][2] 145*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][3] 146*9880d681SAndroid Build Coastguard Worker %tmp1 = load <32 x i16>, <32 x i16>* %B 147*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <32 x i16> %tmp1, <32 x i16> undef, <4 x i32> <i32 0, i32 8, i32 16, i32 24> 148*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; We don't handle shuffles using more than half of a 128-bit vector. 152*9880d681SAndroid Build Coastguard Worker; Again, test for fallback to by-element inserts. 153*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_largespan(<8 x i16>* %B) nounwind { 154*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_largespan: 155*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG:d[0-9]+]][0] 156*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][1] 157*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][2] 158*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][3] 159*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %B 160*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6> 161*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp2 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Worker; The actual shuffle code only handles some cases, make sure we check 165*9880d681SAndroid Build Coastguard Worker; this rather than blindly emitting a VECTOR_SHUFFLE (infinite 166*9880d681SAndroid Build Coastguard Worker; lowering loop can result otherwise). 167*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_illegal(<8 x i16>* %A, <8 x i16>* %B) nounwind { 168*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_illegal: 169*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG:d[0-9]+]][0] 170*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][1] 171*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][2] 172*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG]][3] 173*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG2:d[0-9]+]][0] 174*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG2]][1] 175*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG2]][2] 176*9880d681SAndroid Build Coastguard Worker;CHECK: vmov.16 [[REG2]][3] 177*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 178*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 179*9880d681SAndroid Build Coastguard Worker %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <8 x i32> <i32 0, i32 7, i32 5, i32 13, i32 3, i32 2, i32 2, i32 9> 180*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp3 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; PR11129 184*9880d681SAndroid Build Coastguard Worker; Make sure this doesn't crash 185*9880d681SAndroid Build Coastguard Workerdefine arm_aapcscc void @test_elem_mismatch(<2 x i64>* nocapture %src, <4 x i16>* nocapture %dest) nounwind { 186*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_elem_mismatch: 187*9880d681SAndroid Build Coastguard Worker; CHECK: vstr 188*9880d681SAndroid Build Coastguard Worker %tmp0 = load <2 x i64>, <2 x i64>* %src, align 16 189*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast <2 x i64> %tmp0 to <4 x i32> 190*9880d681SAndroid Build Coastguard Worker %tmp2 = extractelement <4 x i32> %tmp1, i32 0 191*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i32> %tmp1, i32 2 192*9880d681SAndroid Build Coastguard Worker %tmp4 = trunc i32 %tmp2 to i16 193*9880d681SAndroid Build Coastguard Worker %tmp5 = trunc i32 %tmp3 to i16 194*9880d681SAndroid Build Coastguard Worker %tmp6 = insertelement <4 x i16> undef, i16 %tmp4, i32 0 195*9880d681SAndroid Build Coastguard Worker %tmp7 = insertelement <4 x i16> %tmp6, i16 %tmp5, i32 1 196*9880d681SAndroid Build Coastguard Worker store <4 x i16> %tmp7, <4 x i16>* %dest, align 4 197*9880d681SAndroid Build Coastguard Worker ret void 198*9880d681SAndroid Build Coastguard Worker} 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_reverse_and_extract(<2 x i32>* %A) { 201*9880d681SAndroid Build Coastguard Workerentry: 202*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_reverse_and_extract 203*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: vtrn 204*9880d681SAndroid Build Coastguard Worker ; CHECK: vrev 205*9880d681SAndroid Build Coastguard Worker ; CHECK: vext 206*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 207*9880d681SAndroid Build Coastguard Worker %0 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <4 x i32> <i32 undef, i32 undef, i32 1, i32 0> 208*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %0 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_dup_and_extract(<2 x i32>* %A) { 212*9880d681SAndroid Build Coastguard Workerentry: 213*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_dup_and_extract 214*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: vtrn 215*9880d681SAndroid Build Coastguard Worker ; CHECK: vdup 216*9880d681SAndroid Build Coastguard Worker ; CHECK: vext 217*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 218*9880d681SAndroid Build Coastguard Worker %0 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 1> 219*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %0 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_zip_and_extract(<2 x i32>* %A) { 223*9880d681SAndroid Build Coastguard Workerentry: 224*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: test_zip_and_extract 225*9880d681SAndroid Build Coastguard Worker ; CHECK: vzip 226*9880d681SAndroid Build Coastguard Worker ; CHECK: vext 227*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 228*9880d681SAndroid Build Coastguard Worker %0 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 0, i32 1> 229*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %0 230*9880d681SAndroid Build Coastguard Worker} 231