1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins16bw(<16 x i8> %tmp1, i8 %tmp2) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16bw: 6*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{w[0-9]+}} 7*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <16 x i8> %tmp1, i8 %tmp2, i32 15 8*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp3 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins8hw(<8 x i16> %tmp1, i16 %tmp2) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8hw: 13*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[6], {{w[0-9]+}} 14*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <8 x i16> %tmp1, i16 %tmp2, i32 6 15*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp3 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins4sw(<4 x i32> %tmp1, i32 %tmp2) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4sw: 20*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[2], {{w[0-9]+}} 21*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <4 x i32> %tmp1, i32 %tmp2, i32 2 22*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp3 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins2dw(<2 x i64> %tmp1, i64 %tmp2) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2dw: 27*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{x[0-9]+}} 28*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <2 x i64> %tmp1, i64 %tmp2, i32 1 29*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp3 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins8bw(<8 x i8> %tmp1, i8 %tmp2) { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8bw: 34*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[5], {{w[0-9]+}} 35*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <8 x i8> %tmp1, i8 %tmp2, i32 5 36*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins4hw(<4 x i16> %tmp1, i16 %tmp2) { 40*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4hw: 41*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{w[0-9]+}} 42*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <4 x i16> %tmp1, i16 %tmp2, i32 3 43*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins2sw(<2 x i32> %tmp1, i32 %tmp2) { 47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2sw: 48*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{w[0-9]+}} 49*9880d681SAndroid Build Coastguard Worker %tmp3 = insertelement <2 x i32> %tmp1, i32 %tmp2, i32 1 50*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins16b16(<16 x i8> %tmp1, <16 x i8> %tmp2) { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16b16: 55*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{v[0-9]+}}.b[2] 56*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <16 x i8> %tmp1, i32 2 57*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <16 x i8> %tmp2, i8 %tmp3, i32 15 58*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp4 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins8h8(<8 x i16> %tmp1, <8 x i16> %tmp2) { 62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8h8: 63*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[7], {{v[0-9]+}}.h[2] 64*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %tmp1, i32 2 65*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <8 x i16> %tmp2, i16 %tmp3, i32 7 66*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp4 67*9880d681SAndroid Build Coastguard Worker} 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins4s4(<4 x i32> %tmp1, <4 x i32> %tmp2) { 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4s4: 71*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2] 72*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i32> %tmp1, i32 2 73*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i32> %tmp2, i32 %tmp3, i32 1 74*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp4 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins2d2(<2 x i64> %tmp1, <2 x i64> %tmp2) { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2d2: 79*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 80*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i64> %tmp1, i32 0 81*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x i64> %tmp2, i64 %tmp3, i32 1 82*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp4 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ins4f4(<4 x float> %tmp1, <4 x float> %tmp2) { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4f4: 87*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2] 88*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x float> %tmp1, i32 2 89*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x float> %tmp2, float %tmp3, i32 1 90*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp4 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ins2df2(<2 x double> %tmp1, <2 x double> %tmp2) { 94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2df2: 95*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 96*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x double> %tmp1, i32 0 97*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x double> %tmp2, double %tmp3, i32 1 98*9880d681SAndroid Build Coastguard Worker ret <2 x double> %tmp4 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @ins8b16(<8 x i8> %tmp1, <16 x i8> %tmp2) { 102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8b16: 103*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[15], {{v[0-9]+}}.b[2] 104*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i8> %tmp1, i32 2 105*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <16 x i8> %tmp2, i8 %tmp3, i32 15 106*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %tmp4 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ins4h8(<4 x i16> %tmp1, <8 x i16> %tmp2) { 110*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4h8: 111*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[7], {{v[0-9]+}}.h[2] 112*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i16> %tmp1, i32 2 113*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <8 x i16> %tmp2, i16 %tmp3, i32 7 114*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp4 115*9880d681SAndroid Build Coastguard Worker} 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ins2s4(<2 x i32> %tmp1, <4 x i32> %tmp2) { 118*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2s4: 119*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[1] 120*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i32> %tmp1, i32 1 121*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i32> %tmp2, i32 %tmp3, i32 1 122*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp4 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ins1d2(<1 x i64> %tmp1, <2 x i64> %tmp2) { 126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1d2: 127*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 128*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <1 x i64> %tmp1, i32 0 129*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x i64> %tmp2, i64 %tmp3, i32 1 130*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp4 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ins2f4(<2 x float> %tmp1, <4 x float> %tmp2) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f4: 135*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[1] 136*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x float> %tmp1, i32 1 137*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x float> %tmp2, float %tmp3, i32 1 138*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp4 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ins1f2(<1 x double> %tmp1, <2 x double> %tmp2) { 142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1f2: 143*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 144*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <1 x double> %tmp1, i32 0 145*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x double> %tmp2, double %tmp3, i32 1 146*9880d681SAndroid Build Coastguard Worker ret <2 x double> %tmp4 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins16b8(<16 x i8> %tmp1, <8 x i8> %tmp2) { 150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins16b8: 151*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[7], {{v[0-9]+}}.b[2] 152*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <16 x i8> %tmp1, i32 2 153*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <8 x i8> %tmp2, i8 %tmp3, i32 7 154*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp4 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins8h4(<8 x i16> %tmp1, <4 x i16> %tmp2) { 158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8h4: 159*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{v[0-9]+}}.h[2] 160*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %tmp1, i32 2 161*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 3 162*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp4 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins4s2(<4 x i32> %tmp1, <2 x i32> %tmp2) { 166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4s2: 167*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2] 168*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i32> %tmp1, i32 2 169*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x i32> %tmp2, i32 %tmp3, i32 1 170*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp4 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @ins2d1(<2 x i64> %tmp1, <1 x i64> %tmp2) { 174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2d1: 175*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[0] 176*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i64> %tmp1, i32 0 177*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <1 x i64> %tmp2, i64 %tmp3, i32 0 178*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp4 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @ins4f2(<4 x float> %tmp1, <2 x float> %tmp2) { 182*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4f2: 183*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[2] 184*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x float> %tmp1, i32 2 185*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x float> %tmp2, float %tmp3, i32 1 186*9880d681SAndroid Build Coastguard Worker ret <2 x float> %tmp4 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @ins2f1(<2 x double> %tmp1, <1 x double> %tmp2) { 190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f1: 191*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{d[0-9]+}}, {{v[0-9]+}}.d[1] 192*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x double> %tmp1, i32 1 193*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <1 x double> %tmp2, double %tmp3, i32 0 194*9880d681SAndroid Build Coastguard Worker ret <1 x double> %tmp4 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @ins8b8(<8 x i8> %tmp1, <8 x i8> %tmp2) { 198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins8b8: 199*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[4], {{v[0-9]+}}.b[2] 200*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i8> %tmp1, i32 2 201*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <8 x i8> %tmp2, i8 %tmp3, i32 4 202*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp4 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @ins4h4(<4 x i16> %tmp1, <4 x i16> %tmp2) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins4h4: 207*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.h[3], {{v[0-9]+}}.h[2] 208*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i16> %tmp1, i32 2 209*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 3 210*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp4 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @ins2s2(<2 x i32> %tmp1, <2 x i32> %tmp2) { 214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2s2: 215*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[0] 216*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i32> %tmp1, i32 0 217*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x i32> %tmp2, i32 %tmp3, i32 1 218*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp4 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @ins1d1(<1 x i64> %tmp1, <1 x i64> %tmp2) { 222*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1d1: 223*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[0] 224*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <1 x i64> %tmp1, i32 0 225*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <1 x i64> %tmp2, i64 %tmp3, i32 0 226*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %tmp4 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @ins2f2(<2 x float> %tmp1, <2 x float> %tmp2) { 230*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins2f2: 231*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], {{v[0-9]+}}.s[0] 232*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x float> %tmp1, i32 0 233*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <2 x float> %tmp2, float %tmp3, i32 1 234*9880d681SAndroid Build Coastguard Worker ret <2 x float> %tmp4 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @ins1df1(<1 x double> %tmp1, <1 x double> %tmp2) { 238*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ins1df1: 239*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ins {{v[0-9]+}} 240*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <1 x double> %tmp1, i32 0 241*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <1 x double> %tmp2, double %tmp3, i32 0 242*9880d681SAndroid Build Coastguard Worker ret <1 x double> %tmp4 243*9880d681SAndroid Build Coastguard Worker} 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw16b(<16 x i8> %tmp1) { 246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw16b: 247*9880d681SAndroid Build Coastguard Worker; CHECK: umov {{w[0-9]+}}, {{v[0-9]+}}.b[8] 248*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <16 x i8> %tmp1, i32 8 249*9880d681SAndroid Build Coastguard Worker %tmp4 = zext i8 %tmp3 to i32 250*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw8h(<8 x i16> %tmp1) { 254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw8h: 255*9880d681SAndroid Build Coastguard Worker; CHECK: umov {{w[0-9]+}}, {{v[0-9]+}}.h[2] 256*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %tmp1, i32 2 257*9880d681SAndroid Build Coastguard Worker %tmp4 = zext i16 %tmp3 to i32 258*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw4s(<4 x i32> %tmp1) { 262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw4s: 263*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.s[2] 264*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i32> %tmp1, i32 2 265*9880d681SAndroid Build Coastguard Worker ret i32 %tmp3 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine i64 @umovx2d(<2 x i64> %tmp1) { 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovx2d: 270*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{x[0-9]+}}, {{v[0-9]+}}.d[1] 271*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i64> %tmp1, i32 1 272*9880d681SAndroid Build Coastguard Worker ret i64 %tmp3 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw8b(<8 x i8> %tmp1) { 276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw8b: 277*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.b[7] 278*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i8> %tmp1, i32 7 279*9880d681SAndroid Build Coastguard Worker %tmp4 = zext i8 %tmp3 to i32 280*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 281*9880d681SAndroid Build Coastguard Worker} 282*9880d681SAndroid Build Coastguard Worker 283*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw4h(<4 x i16> %tmp1) { 284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw4h: 285*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.h[2] 286*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i16> %tmp1, i32 2 287*9880d681SAndroid Build Coastguard Worker %tmp4 = zext i16 %tmp3 to i32 288*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine i32 @umovw2s(<2 x i32> %tmp1) { 292*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovw2s: 293*9880d681SAndroid Build Coastguard Worker; CHECK: mov {{w[0-9]+}}, {{v[0-9]+}}.s[1] 294*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i32> %tmp1, i32 1 295*9880d681SAndroid Build Coastguard Worker ret i32 %tmp3 296*9880d681SAndroid Build Coastguard Worker} 297*9880d681SAndroid Build Coastguard Worker 298*9880d681SAndroid Build Coastguard Workerdefine i64 @umovx1d(<1 x i64> %tmp1) { 299*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: umovx1d: 300*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 301*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <1 x i64> %tmp1, i32 0 302*9880d681SAndroid Build Coastguard Worker ret i64 %tmp3 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw16b(<16 x i8> %tmp1) { 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw16b: 307*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.b[8] 308*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <16 x i8> %tmp1, i32 8 309*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i8 %tmp3 to i32 310*9880d681SAndroid Build Coastguard Worker %tmp5 = add i32 %tmp4, %tmp4 311*9880d681SAndroid Build Coastguard Worker ret i32 %tmp5 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw8h(<8 x i16> %tmp1) { 315*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw8h: 316*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.h[2] 317*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %tmp1, i32 2 318*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i16 %tmp3 to i32 319*9880d681SAndroid Build Coastguard Worker %tmp5 = add i32 %tmp4, %tmp4 320*9880d681SAndroid Build Coastguard Worker ret i32 %tmp5 321*9880d681SAndroid Build Coastguard Worker} 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx16b(<16 x i8> %tmp1) { 324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx16b: 325*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.b[8] 326*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <16 x i8> %tmp1, i32 8 327*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i8 %tmp3 to i64 328*9880d681SAndroid Build Coastguard Worker ret i64 %tmp4 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx8h(<8 x i16> %tmp1) { 332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx8h: 333*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.h[2] 334*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %tmp1, i32 2 335*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i16 %tmp3 to i64 336*9880d681SAndroid Build Coastguard Worker ret i64 %tmp4 337*9880d681SAndroid Build Coastguard Worker} 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx4s(<4 x i32> %tmp1) { 340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx4s: 341*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.s[2] 342*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i32> %tmp1, i32 2 343*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i32 %tmp3 to i64 344*9880d681SAndroid Build Coastguard Worker ret i64 %tmp4 345*9880d681SAndroid Build Coastguard Worker} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw8b(<8 x i8> %tmp1) { 348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw8b: 349*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.b[4] 350*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i8> %tmp1, i32 4 351*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i8 %tmp3 to i32 352*9880d681SAndroid Build Coastguard Worker %tmp5 = add i32 %tmp4, %tmp4 353*9880d681SAndroid Build Coastguard Worker ret i32 %tmp5 354*9880d681SAndroid Build Coastguard Worker} 355*9880d681SAndroid Build Coastguard Worker 356*9880d681SAndroid Build Coastguard Workerdefine i32 @smovw4h(<4 x i16> %tmp1) { 357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovw4h: 358*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{w[0-9]+}}, {{v[0-9]+}}.h[2] 359*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i16> %tmp1, i32 2 360*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i16 %tmp3 to i32 361*9880d681SAndroid Build Coastguard Worker %tmp5 = add i32 %tmp4, %tmp4 362*9880d681SAndroid Build Coastguard Worker ret i32 %tmp5 363*9880d681SAndroid Build Coastguard Worker} 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Workerdefine i32 @smovx8b(<8 x i8> %tmp1) { 366*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx8b: 367*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{[xw][0-9]+}}, {{v[0-9]+}}.b[6] 368*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i8> %tmp1, i32 6 369*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i8 %tmp3 to i32 370*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Workerdefine i32 @smovx4h(<4 x i16> %tmp1) { 374*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx4h: 375*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{[xw][0-9]+}}, {{v[0-9]+}}.h[2] 376*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <4 x i16> %tmp1, i32 2 377*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i16 %tmp3 to i32 378*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 379*9880d681SAndroid Build Coastguard Worker} 380*9880d681SAndroid Build Coastguard Worker 381*9880d681SAndroid Build Coastguard Workerdefine i64 @smovx2s(<2 x i32> %tmp1) { 382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: smovx2s: 383*9880d681SAndroid Build Coastguard Worker; CHECK: smov {{x[0-9]+}}, {{v[0-9]+}}.s[1] 384*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <2 x i32> %tmp1, i32 1 385*9880d681SAndroid Build Coastguard Worker %tmp4 = sext i32 %tmp3 to i64 386*9880d681SAndroid Build Coastguard Worker ret i64 %tmp4 387*9880d681SAndroid Build Coastguard Worker} 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vcopy_lane_s8(<8 x i8> %v1, <8 x i8> %v2) { 390*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopy_lane_s8: 391*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[5], {{v[0-9]+}}.b[3] 392*9880d681SAndroid Build Coastguard Worker %vset_lane = shufflevector <8 x i8> %v1, <8 x i8> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 11, i32 6, i32 7> 393*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %vset_lane 394*9880d681SAndroid Build Coastguard Worker} 395*9880d681SAndroid Build Coastguard Worker 396*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vcopyq_laneq_s8(<16 x i8> %v1, <16 x i8> %v2) { 397*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopyq_laneq_s8: 398*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[14], {{v[0-9]+}}.b[6] 399*9880d681SAndroid Build Coastguard Worker %vset_lane = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 0, i32 1, 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 22, i32 15> 400*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vset_lane 401*9880d681SAndroid Build Coastguard Worker} 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vcopy_lane_swap_s8(<8 x i8> %v1, <8 x i8> %v2) { 404*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopy_lane_swap_s8: 405*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[7], {{v[0-9]+}}.b[0] 406*9880d681SAndroid Build Coastguard Worker %vset_lane = shufflevector <8 x i8> %v1, <8 x i8> %v2, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0> 407*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %vset_lane 408*9880d681SAndroid Build Coastguard Worker} 409*9880d681SAndroid Build Coastguard Worker 410*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vcopyq_laneq_swap_s8(<16 x i8> %v1, <16 x i8> %v2) { 411*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcopyq_laneq_swap_s8: 412*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.b[0], {{v[0-9]+}}.b[15] 413*9880d681SAndroid Build Coastguard Worker %vset_lane = shufflevector <16 x i8> %v1, <16 x i8> %v2, <16 x i32> <i32 15, 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 31> 414*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vset_lane 415*9880d681SAndroid Build Coastguard Worker} 416*9880d681SAndroid Build Coastguard Worker 417*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_n_u8(i8 %v1) #0 { 418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u8: 419*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{w[0-9]+}} 420*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <8 x i8> undef, i8 %v1, i32 0 421*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <8 x i8> %vecinit.i, i8 %v1, i32 1 422*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <8 x i8> %vecinit1.i, i8 %v1, i32 2 423*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <8 x i8> %vecinit2.i, i8 %v1, i32 3 424*9880d681SAndroid Build Coastguard Worker %vecinit4.i = insertelement <8 x i8> %vecinit3.i, i8 %v1, i32 4 425*9880d681SAndroid Build Coastguard Worker %vecinit5.i = insertelement <8 x i8> %vecinit4.i, i8 %v1, i32 5 426*9880d681SAndroid Build Coastguard Worker %vecinit6.i = insertelement <8 x i8> %vecinit5.i, i8 %v1, i32 6 427*9880d681SAndroid Build Coastguard Worker %vecinit7.i = insertelement <8 x i8> %vecinit6.i, i8 %v1, i32 7 428*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %vecinit7.i 429*9880d681SAndroid Build Coastguard Worker} 430*9880d681SAndroid Build Coastguard Worker 431*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_n_u16(i16 %v1) #0 { 432*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u16: 433*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{w[0-9]+}} 434*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i16> undef, i16 %v1, i32 0 435*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %v1, i32 1 436*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %v1, i32 2 437*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %v1, i32 3 438*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vecinit3.i 439*9880d681SAndroid Build Coastguard Worker} 440*9880d681SAndroid Build Coastguard Worker 441*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_n_u32(i32 %v1) #0 { 442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u32: 443*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{w[0-9]+}} 444*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x i32> undef, i32 %v1, i32 0 445*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %v1, i32 1 446*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit1.i 447*9880d681SAndroid Build Coastguard Worker} 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_vdup_n_u64(i64 %v1) #0 { 450*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_n_u64: 451*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 452*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <1 x i64> undef, i64 %v1, i32 0 453*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vecinit.i 454*9880d681SAndroid Build Coastguard Worker} 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_n_u8(i8 %v1) #0 { 457*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u8: 458*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.16b, {{w[0-9]+}} 459*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <16 x i8> undef, i8 %v1, i32 0 460*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <16 x i8> %vecinit.i, i8 %v1, i32 1 461*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <16 x i8> %vecinit1.i, i8 %v1, i32 2 462*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <16 x i8> %vecinit2.i, i8 %v1, i32 3 463*9880d681SAndroid Build Coastguard Worker %vecinit4.i = insertelement <16 x i8> %vecinit3.i, i8 %v1, i32 4 464*9880d681SAndroid Build Coastguard Worker %vecinit5.i = insertelement <16 x i8> %vecinit4.i, i8 %v1, i32 5 465*9880d681SAndroid Build Coastguard Worker %vecinit6.i = insertelement <16 x i8> %vecinit5.i, i8 %v1, i32 6 466*9880d681SAndroid Build Coastguard Worker %vecinit7.i = insertelement <16 x i8> %vecinit6.i, i8 %v1, i32 7 467*9880d681SAndroid Build Coastguard Worker %vecinit8.i = insertelement <16 x i8> %vecinit7.i, i8 %v1, i32 8 468*9880d681SAndroid Build Coastguard Worker %vecinit9.i = insertelement <16 x i8> %vecinit8.i, i8 %v1, i32 9 469*9880d681SAndroid Build Coastguard Worker %vecinit10.i = insertelement <16 x i8> %vecinit9.i, i8 %v1, i32 10 470*9880d681SAndroid Build Coastguard Worker %vecinit11.i = insertelement <16 x i8> %vecinit10.i, i8 %v1, i32 11 471*9880d681SAndroid Build Coastguard Worker %vecinit12.i = insertelement <16 x i8> %vecinit11.i, i8 %v1, i32 12 472*9880d681SAndroid Build Coastguard Worker %vecinit13.i = insertelement <16 x i8> %vecinit12.i, i8 %v1, i32 13 473*9880d681SAndroid Build Coastguard Worker %vecinit14.i = insertelement <16 x i8> %vecinit13.i, i8 %v1, i32 14 474*9880d681SAndroid Build Coastguard Worker %vecinit15.i = insertelement <16 x i8> %vecinit14.i, i8 %v1, i32 15 475*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vecinit15.i 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_n_u16(i16 %v1) #0 { 479*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u16: 480*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8h, {{w[0-9]+}} 481*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <8 x i16> undef, i16 %v1, i32 0 482*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %v1, i32 1 483*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %v1, i32 2 484*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %v1, i32 3 485*9880d681SAndroid Build Coastguard Worker %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %v1, i32 4 486*9880d681SAndroid Build Coastguard Worker %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %v1, i32 5 487*9880d681SAndroid Build Coastguard Worker %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %v1, i32 6 488*9880d681SAndroid Build Coastguard Worker %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %v1, i32 7 489*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit7.i 490*9880d681SAndroid Build Coastguard Worker} 491*9880d681SAndroid Build Coastguard Worker 492*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_n_u32(i32 %v1) #0 { 493*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u32: 494*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4s, {{w[0-9]+}} 495*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i32> undef, i32 %v1, i32 0 496*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i32> %vecinit.i, i32 %v1, i32 1 497*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i32> %vecinit1.i, i32 %v1, i32 2 498*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i32> %vecinit2.i, i32 %v1, i32 3 499*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit3.i 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_n_u64(i64 %v1) #0 { 503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_n_u64: 504*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2d, {{x[0-9]+}} 505*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x i64> undef, i64 %v1, i32 0 506*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i64> %vecinit.i, i64 %v1, i32 1 507*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vecinit1.i 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_lane_s8(<8 x i8> %v1) #0 { 511*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s8: 512*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{v[0-9]+}}.b[5] 513*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i8> %v1, <8 x i8> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 514*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle 515*9880d681SAndroid Build Coastguard Worker} 516*9880d681SAndroid Build Coastguard Worker 517*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_lane_s16(<4 x i16> %v1) #0 { 518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s16: 519*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{v[0-9]+}}.h[2] 520*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v1, <4 x i16> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2> 521*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle 522*9880d681SAndroid Build Coastguard Worker} 523*9880d681SAndroid Build Coastguard Worker 524*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_lane_s32(<2 x i32> %v1) #0 { 525*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_lane_s32: 526*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 527*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v1, <2 x i32> undef, <2 x i32> <i32 1, i32 1> 528*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle 529*9880d681SAndroid Build Coastguard Worker} 530*9880d681SAndroid Build Coastguard Worker 531*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_lane_s8(<8 x i8> %v1) #0 { 532*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s8: 533*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.16b, {{v[0-9]+}}.b[5] 534*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i8> %v1, <8 x i8> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 535*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shuffle 536*9880d681SAndroid Build Coastguard Worker} 537*9880d681SAndroid Build Coastguard Worker 538*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_lane_s16(<4 x i16> %v1) #0 { 539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s16: 540*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.8h, {{v[0-9]+}}.h[2] 541*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i16> %v1, <4 x i16> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 542*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shuffle 543*9880d681SAndroid Build Coastguard Worker} 544*9880d681SAndroid Build Coastguard Worker 545*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_lane_s32(<2 x i32> %v1) #0 { 546*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s32: 547*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 548*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i32> %v1, <2 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 549*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shuffle 550*9880d681SAndroid Build Coastguard Worker} 551*9880d681SAndroid Build Coastguard Worker 552*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_lane_s64(<1 x i64> %v1) #0 { 553*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_lane_s64: 554*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 555*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <1 x i64> %v1, <1 x i64> undef, <2 x i32> zeroinitializer 556*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shuffle 557*9880d681SAndroid Build Coastguard Worker} 558*9880d681SAndroid Build Coastguard Worker 559*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_vdup_laneq_s8(<16 x i8> %v1) #0 { 560*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s8: 561*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.8b, {{v[0-9]+}}.b[5] 562*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i8> %v1, <16 x i8> undef, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 563*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %shuffle 564*9880d681SAndroid Build Coastguard Worker} 565*9880d681SAndroid Build Coastguard Worker 566*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_vdup_laneq_s16(<8 x i16> %v1) #0 { 567*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s16: 568*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4h, {{v[0-9]+}}.h[2] 569*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v1, <8 x i16> undef, <4 x i32> <i32 2, i32 2, i32 2, i32 2> 570*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %shuffle 571*9880d681SAndroid Build Coastguard Worker} 572*9880d681SAndroid Build Coastguard Worker 573*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_vdup_laneq_s32(<4 x i32> %v1) #0 { 574*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdup_laneq_s32: 575*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1] 576*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 1, i32 1> 577*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %shuffle 578*9880d681SAndroid Build Coastguard Worker} 579*9880d681SAndroid Build Coastguard Worker 580*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vdupq_laneq_s8(<16 x i8> %v1) #0 { 581*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s8: 582*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.16b, {{v[0-9]+}}.b[5] 583*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <16 x i8> %v1, <16 x i8> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> 584*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %shuffle 585*9880d681SAndroid Build Coastguard Worker} 586*9880d681SAndroid Build Coastguard Worker 587*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vdupq_laneq_s16(<8 x i16> %v1) #0 { 588*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s16: 589*9880d681SAndroid Build Coastguard Worker; CHECK: {{v[0-9]+}}.8h, {{v[0-9]+}}.h[2] 590*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <8 x i16> %v1, <8 x i16> undef, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2> 591*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %shuffle 592*9880d681SAndroid Build Coastguard Worker} 593*9880d681SAndroid Build Coastguard Worker 594*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vdupq_laneq_s32(<4 x i32> %v1) #0 { 595*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s32: 596*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1] 597*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %v1, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 598*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %shuffle 599*9880d681SAndroid Build Coastguard Worker} 600*9880d681SAndroid Build Coastguard Worker 601*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vdupq_laneq_s64(<2 x i64> %v1) #0 { 602*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vdupq_laneq_s64: 603*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0] 604*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i64> %v1, <2 x i64> undef, <2 x i32> zeroinitializer 605*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shuffle 606*9880d681SAndroid Build Coastguard Worker} 607*9880d681SAndroid Build Coastguard Worker 608*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv8i8toi64(<8 x i8> %in) { 609*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv8i8toi64: 610*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i8> %in to i64 611*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 612*9880d681SAndroid Build Coastguard Worker ret i64 %res 613*9880d681SAndroid Build Coastguard Worker} 614*9880d681SAndroid Build Coastguard Worker 615*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv4i16toi64(<4 x i16> %in) { 616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv4i16toi64: 617*9880d681SAndroid Build Coastguard Worker %res = bitcast <4 x i16> %in to i64 618*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 619*9880d681SAndroid Build Coastguard Worker ret i64 %res 620*9880d681SAndroid Build Coastguard Worker} 621*9880d681SAndroid Build Coastguard Worker 622*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv2i32toi64(<2 x i32> %in) { 623*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2i32toi64: 624*9880d681SAndroid Build Coastguard Worker %res = bitcast <2 x i32> %in to i64 625*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 626*9880d681SAndroid Build Coastguard Worker ret i64 %res 627*9880d681SAndroid Build Coastguard Worker} 628*9880d681SAndroid Build Coastguard Worker 629*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv2f32toi64(<2 x float> %in) { 630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2f32toi64: 631*9880d681SAndroid Build Coastguard Worker %res = bitcast <2 x float> %in to i64 632*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 633*9880d681SAndroid Build Coastguard Worker ret i64 %res 634*9880d681SAndroid Build Coastguard Worker} 635*9880d681SAndroid Build Coastguard Worker 636*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv1i64toi64(<1 x i64> %in) { 637*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1i64toi64: 638*9880d681SAndroid Build Coastguard Worker %res = bitcast <1 x i64> %in to i64 639*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 640*9880d681SAndroid Build Coastguard Worker ret i64 %res 641*9880d681SAndroid Build Coastguard Worker} 642*9880d681SAndroid Build Coastguard Worker 643*9880d681SAndroid Build Coastguard Workerdefine i64 @test_bitcastv1f64toi64(<1 x double> %in) { 644*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64toi64: 645*9880d681SAndroid Build Coastguard Worker %res = bitcast <1 x double> %in to i64 646*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}} 647*9880d681SAndroid Build Coastguard Worker ret i64 %res 648*9880d681SAndroid Build Coastguard Worker} 649*9880d681SAndroid Build Coastguard Worker 650*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_bitcasti64tov8i8(i64 %in) { 651*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov8i8: 652*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <8 x i8> 653*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 654*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %res 655*9880d681SAndroid Build Coastguard Worker} 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_bitcasti64tov4i16(i64 %in) { 658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov4i16: 659*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <4 x i16> 660*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 661*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %res 662*9880d681SAndroid Build Coastguard Worker} 663*9880d681SAndroid Build Coastguard Worker 664*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_bitcasti64tov2i32(i64 %in) { 665*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov2i32: 666*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <2 x i32> 667*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 668*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %res 669*9880d681SAndroid Build Coastguard Worker} 670*9880d681SAndroid Build Coastguard Worker 671*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_bitcasti64tov2f32(i64 %in) { 672*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov2f32: 673*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <2 x float> 674*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 675*9880d681SAndroid Build Coastguard Worker ret <2 x float> %res 676*9880d681SAndroid Build Coastguard Worker} 677*9880d681SAndroid Build Coastguard Worker 678*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcasti64tov1i64(i64 %in) { 679*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov1i64: 680*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <1 x i64> 681*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 682*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %res 683*9880d681SAndroid Build Coastguard Worker} 684*9880d681SAndroid Build Coastguard Worker 685*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @test_bitcasti64tov1f64(i64 %in) { 686*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcasti64tov1f64: 687*9880d681SAndroid Build Coastguard Worker %res = bitcast i64 %in to <1 x double> 688*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 689*9880d681SAndroid Build Coastguard Worker ret <1 x double> %res 690*9880d681SAndroid Build Coastguard Worker} 691*9880d681SAndroid Build Coastguard Worker 692*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv8i8tov1f64(<8 x i8> %a) #0 { 693*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv8i8tov1f64: 694*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.8b, {{v[0-9]+}}.8b 695*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}} 696*9880d681SAndroid Build Coastguard Worker %sub.i = sub <8 x i8> zeroinitializer, %a 697*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> %sub.i to <1 x double> 698*9880d681SAndroid Build Coastguard Worker %vcvt.i = fptosi <1 x double> %1 to <1 x i64> 699*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vcvt.i 700*9880d681SAndroid Build Coastguard Worker} 701*9880d681SAndroid Build Coastguard Worker 702*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv4i16tov1f64(<4 x i16> %a) #0 { 703*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv4i16tov1f64: 704*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.4h, {{v[0-9]+}}.4h 705*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[dx][0-9]+}}, {{d[0-9]+}} 706*9880d681SAndroid Build Coastguard Worker %sub.i = sub <4 x i16> zeroinitializer, %a 707*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i16> %sub.i to <1 x double> 708*9880d681SAndroid Build Coastguard Worker %vcvt.i = fptosi <1 x double> %1 to <1 x i64> 709*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vcvt.i 710*9880d681SAndroid Build Coastguard Worker} 711*9880d681SAndroid Build Coastguard Worker 712*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv2i32tov1f64(<2 x i32> %a) #0 { 713*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2i32tov1f64: 714*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 715*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}} 716*9880d681SAndroid Build Coastguard Worker %sub.i = sub <2 x i32> zeroinitializer, %a 717*9880d681SAndroid Build Coastguard Worker %1 = bitcast <2 x i32> %sub.i to <1 x double> 718*9880d681SAndroid Build Coastguard Worker %vcvt.i = fptosi <1 x double> %1 to <1 x i64> 719*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vcvt.i 720*9880d681SAndroid Build Coastguard Worker} 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv1i64tov1f64(<1 x i64> %a) #0 { 723*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1i64tov1f64: 724*9880d681SAndroid Build Coastguard Worker; CHECK: neg {{d[0-9]+}}, {{d[0-9]+}} 725*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[dx][0-9]+}}, {{d[0-9]+}} 726*9880d681SAndroid Build Coastguard Worker %sub.i = sub <1 x i64> zeroinitializer, %a 727*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x i64> %sub.i to <1 x double> 728*9880d681SAndroid Build Coastguard Worker %vcvt.i = fptosi <1 x double> %1 to <1 x i64> 729*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vcvt.i 730*9880d681SAndroid Build Coastguard Worker} 731*9880d681SAndroid Build Coastguard Worker 732*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv2f32tov1f64(<2 x float> %a) #0 { 733*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv2f32tov1f64: 734*9880d681SAndroid Build Coastguard Worker; CHECK: fneg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 735*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fcvtzs {{[xd][0-9]+}}, {{d[0-9]+}} 736*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %a 737*9880d681SAndroid Build Coastguard Worker %1 = bitcast <2 x float> %sub.i to <1 x double> 738*9880d681SAndroid Build Coastguard Worker %vcvt.i = fptosi <1 x double> %1 to <1 x i64> 739*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %vcvt.i 740*9880d681SAndroid Build Coastguard Worker} 741*9880d681SAndroid Build Coastguard Worker 742*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @test_bitcastv1f64tov8i8(<1 x i64> %a) #0 { 743*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov8i8: 744*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}} 745*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.8b, {{v[0-9]+}}.8b 746*9880d681SAndroid Build Coastguard Worker %vcvt.i = sitofp <1 x i64> %a to <1 x double> 747*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x double> %vcvt.i to <8 x i8> 748*9880d681SAndroid Build Coastguard Worker %sub.i = sub <8 x i8> zeroinitializer, %1 749*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %sub.i 750*9880d681SAndroid Build Coastguard Worker} 751*9880d681SAndroid Build Coastguard Worker 752*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_bitcastv1f64tov4i16(<1 x i64> %a) #0 { 753*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov4i16: 754*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}} 755*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.4h, {{v[0-9]+}}.4h 756*9880d681SAndroid Build Coastguard Worker %vcvt.i = sitofp <1 x i64> %a to <1 x double> 757*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x double> %vcvt.i to <4 x i16> 758*9880d681SAndroid Build Coastguard Worker %sub.i = sub <4 x i16> zeroinitializer, %1 759*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %sub.i 760*9880d681SAndroid Build Coastguard Worker} 761*9880d681SAndroid Build Coastguard Worker 762*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_bitcastv1f64tov2i32(<1 x i64> %a) #0 { 763*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov2i32: 764*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}} 765*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 766*9880d681SAndroid Build Coastguard Worker %vcvt.i = sitofp <1 x i64> %a to <1 x double> 767*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x double> %vcvt.i to <2 x i32> 768*9880d681SAndroid Build Coastguard Worker %sub.i = sub <2 x i32> zeroinitializer, %1 769*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %sub.i 770*9880d681SAndroid Build Coastguard Worker} 771*9880d681SAndroid Build Coastguard Worker 772*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @test_bitcastv1f64tov1i64(<1 x i64> %a) #0 { 773*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov1i64: 774*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}} 775*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: neg {{d[0-9]+}}, {{d[0-9]+}} 776*9880d681SAndroid Build Coastguard Worker %vcvt.i = sitofp <1 x i64> %a to <1 x double> 777*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x double> %vcvt.i to <1 x i64> 778*9880d681SAndroid Build Coastguard Worker %sub.i = sub <1 x i64> zeroinitializer, %1 779*9880d681SAndroid Build Coastguard Worker ret <1 x i64> %sub.i 780*9880d681SAndroid Build Coastguard Worker} 781*9880d681SAndroid Build Coastguard Worker 782*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_bitcastv1f64tov2f32(<1 x i64> %a) #0 { 783*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_bitcastv1f64tov2f32: 784*9880d681SAndroid Build Coastguard Worker; CHECK: scvtf {{d[0-9]+}}, {{[xd][0-9]+}} 785*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: fneg {{v[0-9]+}}.2s, {{v[0-9]+}}.2s 786*9880d681SAndroid Build Coastguard Worker %vcvt.i = sitofp <1 x i64> %a to <1 x double> 787*9880d681SAndroid Build Coastguard Worker %1 = bitcast <1 x double> %vcvt.i to <2 x float> 788*9880d681SAndroid Build Coastguard Worker %sub.i = fsub <2 x float> <float -0.000000e+00, float -0.000000e+00>, %1 789*9880d681SAndroid Build Coastguard Worker ret <2 x float> %sub.i 790*9880d681SAndroid Build Coastguard Worker} 791*9880d681SAndroid Build Coastguard Worker 792*9880d681SAndroid Build Coastguard Worker; Test insert element into an undef vector 793*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @scalar_to_vector.v8i8(i8 %a) { 794*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v8i8: 795*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 796*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x i8> undef, i8 %a, i32 0 797*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %b 798*9880d681SAndroid Build Coastguard Worker} 799*9880d681SAndroid Build Coastguard Worker 800*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @scalar_to_vector.v16i8(i8 %a) { 801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v16i8: 802*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 803*9880d681SAndroid Build Coastguard Worker %b = insertelement <16 x i8> undef, i8 %a, i32 0 804*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %b 805*9880d681SAndroid Build Coastguard Worker} 806*9880d681SAndroid Build Coastguard Worker 807*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @scalar_to_vector.v4i16(i16 %a) { 808*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v4i16: 809*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 810*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x i16> undef, i16 %a, i32 0 811*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %b 812*9880d681SAndroid Build Coastguard Worker} 813*9880d681SAndroid Build Coastguard Worker 814*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @scalar_to_vector.v8i16(i16 %a) { 815*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v8i16: 816*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 817*9880d681SAndroid Build Coastguard Worker %b = insertelement <8 x i16> undef, i16 %a, i32 0 818*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %b 819*9880d681SAndroid Build Coastguard Worker} 820*9880d681SAndroid Build Coastguard Worker 821*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @scalar_to_vector.v2i32(i32 %a) { 822*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v2i32: 823*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 824*9880d681SAndroid Build Coastguard Worker %b = insertelement <2 x i32> undef, i32 %a, i32 0 825*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %b 826*9880d681SAndroid Build Coastguard Worker} 827*9880d681SAndroid Build Coastguard Worker 828*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @scalar_to_vector.v4i32(i32 %a) { 829*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v4i32: 830*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{s[0-9]+}}, {{w[0-9]+}} 831*9880d681SAndroid Build Coastguard Worker %b = insertelement <4 x i32> undef, i32 %a, i32 0 832*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %b 833*9880d681SAndroid Build Coastguard Worker} 834*9880d681SAndroid Build Coastguard Worker 835*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @scalar_to_vector.v2i64(i64 %a) { 836*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: scalar_to_vector.v2i64: 837*9880d681SAndroid Build Coastguard Worker; CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}} 838*9880d681SAndroid Build Coastguard Worker %b = insertelement <2 x i64> undef, i64 %a, i32 0 839*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %b 840*9880d681SAndroid Build Coastguard Worker} 841*9880d681SAndroid Build Coastguard Worker 842*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @testDUP.v1i8(<1 x i8> %a) { 843*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i8: 844*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8b, v0.b[0] 845*9880d681SAndroid Build Coastguard Worker %b = extractelement <1 x i8> %a, i32 0 846*9880d681SAndroid Build Coastguard Worker %c = insertelement <8 x i8> undef, i8 %b, i32 0 847*9880d681SAndroid Build Coastguard Worker %d = insertelement <8 x i8> %c, i8 %b, i32 1 848*9880d681SAndroid Build Coastguard Worker %e = insertelement <8 x i8> %d, i8 %b, i32 2 849*9880d681SAndroid Build Coastguard Worker %f = insertelement <8 x i8> %e, i8 %b, i32 3 850*9880d681SAndroid Build Coastguard Worker %g = insertelement <8 x i8> %f, i8 %b, i32 4 851*9880d681SAndroid Build Coastguard Worker %h = insertelement <8 x i8> %g, i8 %b, i32 5 852*9880d681SAndroid Build Coastguard Worker %i = insertelement <8 x i8> %h, i8 %b, i32 6 853*9880d681SAndroid Build Coastguard Worker %j = insertelement <8 x i8> %i, i8 %b, i32 7 854*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %j 855*9880d681SAndroid Build Coastguard Worker} 856*9880d681SAndroid Build Coastguard Worker 857*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @testDUP.v1i16(<1 x i16> %a) { 858*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i16: 859*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[0] 860*9880d681SAndroid Build Coastguard Worker %b = extractelement <1 x i16> %a, i32 0 861*9880d681SAndroid Build Coastguard Worker %c = insertelement <8 x i16> undef, i16 %b, i32 0 862*9880d681SAndroid Build Coastguard Worker %d = insertelement <8 x i16> %c, i16 %b, i32 1 863*9880d681SAndroid Build Coastguard Worker %e = insertelement <8 x i16> %d, i16 %b, i32 2 864*9880d681SAndroid Build Coastguard Worker %f = insertelement <8 x i16> %e, i16 %b, i32 3 865*9880d681SAndroid Build Coastguard Worker %g = insertelement <8 x i16> %f, i16 %b, i32 4 866*9880d681SAndroid Build Coastguard Worker %h = insertelement <8 x i16> %g, i16 %b, i32 5 867*9880d681SAndroid Build Coastguard Worker %i = insertelement <8 x i16> %h, i16 %b, i32 6 868*9880d681SAndroid Build Coastguard Worker %j = insertelement <8 x i16> %i, i16 %b, i32 7 869*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %j 870*9880d681SAndroid Build Coastguard Worker} 871*9880d681SAndroid Build Coastguard Worker 872*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @testDUP.v1i32(<1 x i32> %a) { 873*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: testDUP.v1i32: 874*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[0] 875*9880d681SAndroid Build Coastguard Worker %b = extractelement <1 x i32> %a, i32 0 876*9880d681SAndroid Build Coastguard Worker %c = insertelement <4 x i32> undef, i32 %b, i32 0 877*9880d681SAndroid Build Coastguard Worker %d = insertelement <4 x i32> %c, i32 %b, i32 1 878*9880d681SAndroid Build Coastguard Worker %e = insertelement <4 x i32> %d, i32 %b, i32 2 879*9880d681SAndroid Build Coastguard Worker %f = insertelement <4 x i32> %e, i32 %b, i32 3 880*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %f 881*9880d681SAndroid Build Coastguard Worker} 882*9880d681SAndroid Build Coastguard Worker 883*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @getl(<16 x i8> %x) #0 { 884*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: getl: 885*9880d681SAndroid Build Coastguard Worker; CHECK: ret 886*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <16 x i8> %x, i32 0 887*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <8 x i8> undef, i8 %vecext, i32 0 888*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <16 x i8> %x, i32 1 889*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <8 x i8> %vecinit, i8 %vecext1, i32 1 890*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <16 x i8> %x, i32 2 891*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <8 x i8> %vecinit2, i8 %vecext3, i32 2 892*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <16 x i8> %x, i32 3 893*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <8 x i8> %vecinit4, i8 %vecext5, i32 3 894*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <16 x i8> %x, i32 4 895*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <8 x i8> %vecinit6, i8 %vecext7, i32 4 896*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <16 x i8> %x, i32 5 897*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <8 x i8> %vecinit8, i8 %vecext9, i32 5 898*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <16 x i8> %x, i32 6 899*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <8 x i8> %vecinit10, i8 %vecext11, i32 6 900*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <16 x i8> %x, i32 7 901*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <8 x i8> %vecinit12, i8 %vecext13, i32 7 902*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %vecinit14 903*9880d681SAndroid Build Coastguard Worker} 904*9880d681SAndroid Build Coastguard Worker 905*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_extracts_inserts_varidx_extract: 906*9880d681SAndroid Build Coastguard Worker; CHECK: str q0 907*9880d681SAndroid Build Coastguard Worker; CHECK: add x[[PTR:[0-9]+]], {{.*}}, w0, sxtw #1 908*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld1 { v[[R:[0-9]+]].h }[0], [x[[PTR]]] 909*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[1], v0.h[1] 910*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[2], v0.h[2] 911*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[3], v0.h[3] 912*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_extracts_inserts_varidx_extract(<8 x i16> %x, i32 %idx) { 913*9880d681SAndroid Build Coastguard Worker %tmp = extractelement <8 x i16> %x, i32 %idx 914*9880d681SAndroid Build Coastguard Worker %tmp2 = insertelement <4 x i16> undef, i16 %tmp, i32 0 915*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %x, i32 1 916*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 1 917*9880d681SAndroid Build Coastguard Worker %tmp5 = extractelement <8 x i16> %x, i32 2 918*9880d681SAndroid Build Coastguard Worker %tmp6 = insertelement <4 x i16> %tmp4, i16 %tmp5, i32 2 919*9880d681SAndroid Build Coastguard Worker %tmp7 = extractelement <8 x i16> %x, i32 3 920*9880d681SAndroid Build Coastguard Worker %tmp8 = insertelement <4 x i16> %tmp6, i16 %tmp7, i32 3 921*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp8 922*9880d681SAndroid Build Coastguard Worker} 923*9880d681SAndroid Build Coastguard Worker 924*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_extracts_inserts_varidx_insert: 925*9880d681SAndroid Build Coastguard Worker; CHECK: str h0, [{{.*}}, w0, sxtw #1] 926*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ldr d[[R:[0-9]+]] 927*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[1], v0.h[1] 928*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[2], v0.h[2] 929*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ins v[[R]].h[3], v0.h[3] 930*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_extracts_inserts_varidx_insert(<8 x i16> %x, i32 %idx) { 931*9880d681SAndroid Build Coastguard Worker %tmp = extractelement <8 x i16> %x, i32 0 932*9880d681SAndroid Build Coastguard Worker %tmp2 = insertelement <4 x i16> undef, i16 %tmp, i32 %idx 933*9880d681SAndroid Build Coastguard Worker %tmp3 = extractelement <8 x i16> %x, i32 1 934*9880d681SAndroid Build Coastguard Worker %tmp4 = insertelement <4 x i16> %tmp2, i16 %tmp3, i32 1 935*9880d681SAndroid Build Coastguard Worker %tmp5 = extractelement <8 x i16> %x, i32 2 936*9880d681SAndroid Build Coastguard Worker %tmp6 = insertelement <4 x i16> %tmp4, i16 %tmp5, i32 2 937*9880d681SAndroid Build Coastguard Worker %tmp7 = extractelement <8 x i16> %x, i32 3 938*9880d681SAndroid Build Coastguard Worker %tmp8 = insertelement <4 x i16> %tmp6, i16 %tmp7, i32 3 939*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp8 940*9880d681SAndroid Build Coastguard Worker} 941*9880d681SAndroid Build Coastguard Worker 942*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v2i32_v4i16(<2 x i32> %a) { 943*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i32_v4i16: 944*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[2] 945*9880d681SAndroid Build Coastguard Workerentry: 946*9880d681SAndroid Build Coastguard Worker %x = extractelement <2 x i32> %a, i32 1 947*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i32 %x to i16 948*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0 949*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1 950*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2 951*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3 952*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vecinit3.i 953*9880d681SAndroid Build Coastguard Worker} 954*9880d681SAndroid Build Coastguard Worker 955*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_dup_v4i32_v8i16(<4 x i32> %a) { 956*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v4i32_v8i16: 957*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[6] 958*9880d681SAndroid Build Coastguard Workerentry: 959*9880d681SAndroid Build Coastguard Worker %x = extractelement <4 x i32> %a, i32 3 960*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i32 %x to i16 961*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <8 x i16> undef, i16 %vget_lane, i32 0 962*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %vget_lane, i32 1 963*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %vget_lane, i32 2 964*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %vget_lane, i32 3 965*9880d681SAndroid Build Coastguard Worker %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %vget_lane, i32 4 966*9880d681SAndroid Build Coastguard Worker %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %vget_lane, i32 5 967*9880d681SAndroid Build Coastguard Worker %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %vget_lane, i32 6 968*9880d681SAndroid Build Coastguard Worker %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %vget_lane, i32 7 969*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit7.i 970*9880d681SAndroid Build Coastguard Worker} 971*9880d681SAndroid Build Coastguard Worker 972*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v1i64_v4i16(<1 x i64> %a) { 973*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v1i64_v4i16: 974*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0] 975*9880d681SAndroid Build Coastguard Workerentry: 976*9880d681SAndroid Build Coastguard Worker %x = extractelement <1 x i64> %a, i32 0 977*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i16 978*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0 979*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1 980*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2 981*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3 982*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vecinit3.i 983*9880d681SAndroid Build Coastguard Worker} 984*9880d681SAndroid Build Coastguard Worker 985*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_dup_v1i64_v2i32(<1 x i64> %a) { 986*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v1i64_v2i32: 987*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.2s, v0.s[0] 988*9880d681SAndroid Build Coastguard Workerentry: 989*9880d681SAndroid Build Coastguard Worker %x = extractelement <1 x i64> %a, i32 0 990*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i32 991*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x i32> undef, i32 %vget_lane, i32 0 992*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %vget_lane, i32 1 993*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit1.i 994*9880d681SAndroid Build Coastguard Worker} 995*9880d681SAndroid Build Coastguard Worker 996*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_dup_v2i64_v8i16(<2 x i64> %a) { 997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v8i16: 998*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[4] 999*9880d681SAndroid Build Coastguard Workerentry: 1000*9880d681SAndroid Build Coastguard Worker %x = extractelement <2 x i64> %a, i32 1 1001*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i16 1002*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <8 x i16> undef, i16 %vget_lane, i32 0 1003*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <8 x i16> %vecinit.i, i16 %vget_lane, i32 1 1004*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <8 x i16> %vecinit1.i, i16 %vget_lane, i32 2 1005*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <8 x i16> %vecinit2.i, i16 %vget_lane, i32 3 1006*9880d681SAndroid Build Coastguard Worker %vecinit4.i = insertelement <8 x i16> %vecinit3.i, i16 %vget_lane, i32 4 1007*9880d681SAndroid Build Coastguard Worker %vecinit5.i = insertelement <8 x i16> %vecinit4.i, i16 %vget_lane, i32 5 1008*9880d681SAndroid Build Coastguard Worker %vecinit6.i = insertelement <8 x i16> %vecinit5.i, i16 %vget_lane, i32 6 1009*9880d681SAndroid Build Coastguard Worker %vecinit7.i = insertelement <8 x i16> %vecinit6.i, i16 %vget_lane, i32 7 1010*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit7.i 1011*9880d681SAndroid Build Coastguard Worker} 1012*9880d681SAndroid Build Coastguard Worker 1013*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_dup_v2i64_v4i32(<2 x i64> %a) { 1014*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v4i32: 1015*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[2] 1016*9880d681SAndroid Build Coastguard Workerentry: 1017*9880d681SAndroid Build Coastguard Worker %x = extractelement <2 x i64> %a, i32 1 1018*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i32 1019*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i32> undef, i32 %vget_lane, i32 0 1020*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i32> %vecinit.i, i32 %vget_lane, i32 1 1021*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i32> %vecinit1.i, i32 %vget_lane, i32 2 1022*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i32> %vecinit2.i, i32 %vget_lane, i32 3 1023*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit3.i 1024*9880d681SAndroid Build Coastguard Worker} 1025*9880d681SAndroid Build Coastguard Worker 1026*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v4i32_v4i16(<4 x i32> %a) { 1027*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v4i32_v4i16: 1028*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[2] 1029*9880d681SAndroid Build Coastguard Workerentry: 1030*9880d681SAndroid Build Coastguard Worker %x = extractelement <4 x i32> %a, i32 1 1031*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i32 %x to i16 1032*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0 1033*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1 1034*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2 1035*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3 1036*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vecinit3.i 1037*9880d681SAndroid Build Coastguard Worker} 1038*9880d681SAndroid Build Coastguard Worker 1039*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @test_dup_v2i64_v4i16(<2 x i64> %a) { 1040*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v4i16: 1041*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0] 1042*9880d681SAndroid Build Coastguard Workerentry: 1043*9880d681SAndroid Build Coastguard Worker %x = extractelement <2 x i64> %a, i32 0 1044*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i16 1045*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <4 x i16> undef, i16 %vget_lane, i32 0 1046*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x i16> %vecinit.i, i16 %vget_lane, i32 1 1047*9880d681SAndroid Build Coastguard Worker %vecinit2.i = insertelement <4 x i16> %vecinit1.i, i16 %vget_lane, i32 2 1048*9880d681SAndroid Build Coastguard Worker %vecinit3.i = insertelement <4 x i16> %vecinit2.i, i16 %vget_lane, i32 3 1049*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %vecinit3.i 1050*9880d681SAndroid Build Coastguard Worker} 1051*9880d681SAndroid Build Coastguard Worker 1052*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_dup_v2i64_v2i32(<2 x i64> %a) { 1053*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_dup_v2i64_v2i32: 1054*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.2s, v0.s[0] 1055*9880d681SAndroid Build Coastguard Workerentry: 1056*9880d681SAndroid Build Coastguard Worker %x = extractelement <2 x i64> %a, i32 0 1057*9880d681SAndroid Build Coastguard Worker %vget_lane = trunc i64 %x to i32 1058*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x i32> undef, i32 %vget_lane, i32 0 1059*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %vget_lane, i32 1 1060*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit1.i 1061*9880d681SAndroid Build Coastguard Worker} 1062*9880d681SAndroid Build Coastguard Worker 1063*9880d681SAndroid Build Coastguard Worker 1064*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_scalar_to_vector_f32_to_v2f32(<2 x float> %a) { 1065*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_scalar_to_vector_f32_to_v2f32: 1066*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxp s{{[0-9]+}}, v{{[0-9]+}}.2s 1067*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1068*9880d681SAndroid Build Coastguard Workerentry: 1069*9880d681SAndroid Build Coastguard Worker %0 = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a) 1070*9880d681SAndroid Build Coastguard Worker %1 = insertelement <1 x float> undef, float %0, i32 0 1071*9880d681SAndroid Build Coastguard Worker %2 = extractelement <1 x float> %1, i32 0 1072*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x float> undef, float %2, i32 0 1073*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vecinit1.i 1074*9880d681SAndroid Build Coastguard Worker} 1075*9880d681SAndroid Build Coastguard Worker 1076*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_scalar_to_vector_f32_to_v4f32(<2 x float> %a) { 1077*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_scalar_to_vector_f32_to_v4f32: 1078*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxp s{{[0-9]+}}, v{{[0-9]+}}.2s 1079*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1080*9880d681SAndroid Build Coastguard Workerentry: 1081*9880d681SAndroid Build Coastguard Worker %0 = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a) 1082*9880d681SAndroid Build Coastguard Worker %1 = insertelement <1 x float> undef, float %0, i32 0 1083*9880d681SAndroid Build Coastguard Worker %2 = extractelement <1 x float> %1, i32 0 1084*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <4 x float> undef, float %2, i32 0 1085*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vecinit1.i 1086*9880d681SAndroid Build Coastguard Worker} 1087*9880d681SAndroid Build Coastguard Worker 1088*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float>) 1089*9880d681SAndroid Build Coastguard Worker 1090*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_undef_v1i32(<2 x i32> %a) { 1091*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_undef_v1i32: 1092*9880d681SAndroid Build Coastguard Worker; CHECK: dup {{v[0-9]+}}.2s, {{v[0-9]+}}.s[0] 1093*9880d681SAndroid Build Coastguard Workerentry: 1094*9880d681SAndroid Build Coastguard Worker %0 = extractelement <2 x i32> %a, i32 0 1095*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i32> undef, i32 %0, i32 1 1096*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit1.i 1097*9880d681SAndroid Build Coastguard Worker} 1098*9880d681SAndroid Build Coastguard Worker 1099*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqabs.i32(i32) #4 1100*9880d681SAndroid Build Coastguard Worker 1101*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_v1i32_undef(i32 %a) { 1102*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v1i32_undef: 1103*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}} 1104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 1105*9880d681SAndroid Build Coastguard Workerentry: 1106*9880d681SAndroid Build Coastguard Worker %b = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %a) 1107*9880d681SAndroid Build Coastguard Worker %vecinit.i432 = insertelement <2 x i32> undef, i32 %b, i32 0 1108*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit.i432 1109*9880d681SAndroid Build Coastguard Worker} 1110*9880d681SAndroid Build Coastguard Worker 1111*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_same_v1i32_v1i32(<2 x i32> %a) { 1112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_same_v1i32_v1i32: 1113*9880d681SAndroid Build Coastguard Worker; CHECK: dup v{{[0-9]+}}.2s, v{{[0-9]+}}.s[0] 1114*9880d681SAndroid Build Coastguard Workerentry: 1115*9880d681SAndroid Build Coastguard Worker %0 = extractelement <2 x i32> %a, i32 0 1116*9880d681SAndroid Build Coastguard Worker %vecinit.i = insertelement <2 x i32> undef, i32 %0, i32 0 1117*9880d681SAndroid Build Coastguard Worker %vecinit1.i = insertelement <2 x i32> %vecinit.i, i32 %0, i32 1 1118*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %vecinit1.i 1119*9880d681SAndroid Build Coastguard Worker} 1120*9880d681SAndroid Build Coastguard Worker 1121*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @test_concat_diff_v1i32_v1i32(i32 %a, i32 %b) { 1122*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_diff_v1i32_v1i32: 1123*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}} 1124*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s{{[0-9]+}}, s{{[0-9]+}} 1125*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.s[1], w{{[0-9]+}} 1126*9880d681SAndroid Build Coastguard Workerentry: 1127*9880d681SAndroid Build Coastguard Worker %c = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %a) 1128*9880d681SAndroid Build Coastguard Worker %d = insertelement <2 x i32> undef, i32 %c, i32 0 1129*9880d681SAndroid Build Coastguard Worker %e = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %b) 1130*9880d681SAndroid Build Coastguard Worker %f = insertelement <2 x i32> undef, i32 %e, i32 0 1131*9880d681SAndroid Build Coastguard Worker %h = shufflevector <2 x i32> %d, <2 x i32> %f, <2 x i32> <i32 0, i32 2> 1132*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %h 1133*9880d681SAndroid Build Coastguard Worker} 1134*9880d681SAndroid Build Coastguard Worker 1135*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v16i8_v16i8(<16 x i8> %x, <16 x i8> %y) #0 { 1136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v16i8_v16i8: 1137*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1138*9880d681SAndroid Build Coastguard Workerentry: 1139*9880d681SAndroid Build Coastguard Worker %vecinit30 = shufflevector <16 x i8> %x, <16 x i8> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> 1140*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vecinit30 1141*9880d681SAndroid Build Coastguard Worker} 1142*9880d681SAndroid Build Coastguard Worker 1143*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v8i8_v16i8(<8 x i8> %x, <16 x i8> %y) #0 { 1144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v8i8_v16i8: 1145*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1146*9880d681SAndroid Build Coastguard Workerentry: 1147*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <8 x i8> %x, i32 0 1148*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0 1149*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <8 x i8> %x, i32 1 1150*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1 1151*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <8 x i8> %x, i32 2 1152*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2 1153*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <8 x i8> %x, i32 3 1154*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3 1155*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <8 x i8> %x, i32 4 1156*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4 1157*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <8 x i8> %x, i32 5 1158*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5 1159*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <8 x i8> %x, i32 6 1160*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6 1161*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <8 x i8> %x, i32 7 1162*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7 1163*9880d681SAndroid Build Coastguard Worker %vecinit30 = shufflevector <16 x i8> %vecinit14, <16 x i8> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> 1164*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vecinit30 1165*9880d681SAndroid Build Coastguard Worker} 1166*9880d681SAndroid Build Coastguard Worker 1167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v16i8_v8i8(<16 x i8> %x, <8 x i8> %y) #0 { 1168*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v16i8_v8i8: 1169*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1170*9880d681SAndroid Build Coastguard Workerentry: 1171*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <16 x i8> %x, i32 0 1172*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0 1173*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <16 x i8> %x, i32 1 1174*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1 1175*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <16 x i8> %x, i32 2 1176*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2 1177*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <16 x i8> %x, i32 3 1178*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3 1179*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <16 x i8> %x, i32 4 1180*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4 1181*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <16 x i8> %x, i32 5 1182*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5 1183*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <16 x i8> %x, i32 6 1184*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6 1185*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <16 x i8> %x, i32 7 1186*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7 1187*9880d681SAndroid Build Coastguard Worker %vecext15 = extractelement <8 x i8> %y, i32 0 1188*9880d681SAndroid Build Coastguard Worker %vecinit16 = insertelement <16 x i8> %vecinit14, i8 %vecext15, i32 8 1189*9880d681SAndroid Build Coastguard Worker %vecext17 = extractelement <8 x i8> %y, i32 1 1190*9880d681SAndroid Build Coastguard Worker %vecinit18 = insertelement <16 x i8> %vecinit16, i8 %vecext17, i32 9 1191*9880d681SAndroid Build Coastguard Worker %vecext19 = extractelement <8 x i8> %y, i32 2 1192*9880d681SAndroid Build Coastguard Worker %vecinit20 = insertelement <16 x i8> %vecinit18, i8 %vecext19, i32 10 1193*9880d681SAndroid Build Coastguard Worker %vecext21 = extractelement <8 x i8> %y, i32 3 1194*9880d681SAndroid Build Coastguard Worker %vecinit22 = insertelement <16 x i8> %vecinit20, i8 %vecext21, i32 11 1195*9880d681SAndroid Build Coastguard Worker %vecext23 = extractelement <8 x i8> %y, i32 4 1196*9880d681SAndroid Build Coastguard Worker %vecinit24 = insertelement <16 x i8> %vecinit22, i8 %vecext23, i32 12 1197*9880d681SAndroid Build Coastguard Worker %vecext25 = extractelement <8 x i8> %y, i32 5 1198*9880d681SAndroid Build Coastguard Worker %vecinit26 = insertelement <16 x i8> %vecinit24, i8 %vecext25, i32 13 1199*9880d681SAndroid Build Coastguard Worker %vecext27 = extractelement <8 x i8> %y, i32 6 1200*9880d681SAndroid Build Coastguard Worker %vecinit28 = insertelement <16 x i8> %vecinit26, i8 %vecext27, i32 14 1201*9880d681SAndroid Build Coastguard Worker %vecext29 = extractelement <8 x i8> %y, i32 7 1202*9880d681SAndroid Build Coastguard Worker %vecinit30 = insertelement <16 x i8> %vecinit28, i8 %vecext29, i32 15 1203*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vecinit30 1204*9880d681SAndroid Build Coastguard Worker} 1205*9880d681SAndroid Build Coastguard Worker 1206*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_concat_v16i8_v8i8_v8i8(<8 x i8> %x, <8 x i8> %y) #0 { 1207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v16i8_v8i8_v8i8: 1208*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1209*9880d681SAndroid Build Coastguard Workerentry: 1210*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <8 x i8> %x, i32 0 1211*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <16 x i8> undef, i8 %vecext, i32 0 1212*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <8 x i8> %x, i32 1 1213*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <16 x i8> %vecinit, i8 %vecext1, i32 1 1214*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <8 x i8> %x, i32 2 1215*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <16 x i8> %vecinit2, i8 %vecext3, i32 2 1216*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <8 x i8> %x, i32 3 1217*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <16 x i8> %vecinit4, i8 %vecext5, i32 3 1218*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <8 x i8> %x, i32 4 1219*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <16 x i8> %vecinit6, i8 %vecext7, i32 4 1220*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <8 x i8> %x, i32 5 1221*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <16 x i8> %vecinit8, i8 %vecext9, i32 5 1222*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <8 x i8> %x, i32 6 1223*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <16 x i8> %vecinit10, i8 %vecext11, i32 6 1224*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <8 x i8> %x, i32 7 1225*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <16 x i8> %vecinit12, i8 %vecext13, i32 7 1226*9880d681SAndroid Build Coastguard Worker %vecext15 = extractelement <8 x i8> %y, i32 0 1227*9880d681SAndroid Build Coastguard Worker %vecinit16 = insertelement <16 x i8> %vecinit14, i8 %vecext15, i32 8 1228*9880d681SAndroid Build Coastguard Worker %vecext17 = extractelement <8 x i8> %y, i32 1 1229*9880d681SAndroid Build Coastguard Worker %vecinit18 = insertelement <16 x i8> %vecinit16, i8 %vecext17, i32 9 1230*9880d681SAndroid Build Coastguard Worker %vecext19 = extractelement <8 x i8> %y, i32 2 1231*9880d681SAndroid Build Coastguard Worker %vecinit20 = insertelement <16 x i8> %vecinit18, i8 %vecext19, i32 10 1232*9880d681SAndroid Build Coastguard Worker %vecext21 = extractelement <8 x i8> %y, i32 3 1233*9880d681SAndroid Build Coastguard Worker %vecinit22 = insertelement <16 x i8> %vecinit20, i8 %vecext21, i32 11 1234*9880d681SAndroid Build Coastguard Worker %vecext23 = extractelement <8 x i8> %y, i32 4 1235*9880d681SAndroid Build Coastguard Worker %vecinit24 = insertelement <16 x i8> %vecinit22, i8 %vecext23, i32 12 1236*9880d681SAndroid Build Coastguard Worker %vecext25 = extractelement <8 x i8> %y, i32 5 1237*9880d681SAndroid Build Coastguard Worker %vecinit26 = insertelement <16 x i8> %vecinit24, i8 %vecext25, i32 13 1238*9880d681SAndroid Build Coastguard Worker %vecext27 = extractelement <8 x i8> %y, i32 6 1239*9880d681SAndroid Build Coastguard Worker %vecinit28 = insertelement <16 x i8> %vecinit26, i8 %vecext27, i32 14 1240*9880d681SAndroid Build Coastguard Worker %vecext29 = extractelement <8 x i8> %y, i32 7 1241*9880d681SAndroid Build Coastguard Worker %vecinit30 = insertelement <16 x i8> %vecinit28, i8 %vecext29, i32 15 1242*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %vecinit30 1243*9880d681SAndroid Build Coastguard Worker} 1244*9880d681SAndroid Build Coastguard Worker 1245*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v8i16_v8i16(<8 x i16> %x, <8 x i16> %y) #0 { 1246*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v8i16_v8i16: 1247*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1248*9880d681SAndroid Build Coastguard Workerentry: 1249*9880d681SAndroid Build Coastguard Worker %vecinit14 = shufflevector <8 x i16> %x, <8 x i16> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> 1250*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit14 1251*9880d681SAndroid Build Coastguard Worker} 1252*9880d681SAndroid Build Coastguard Worker 1253*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v4i16_v8i16(<4 x i16> %x, <8 x i16> %y) #0 { 1254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v4i16_v8i16: 1255*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1256*9880d681SAndroid Build Coastguard Workerentry: 1257*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i16> %x, i32 0 1258*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0 1259*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i16> %x, i32 1 1260*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1 1261*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <4 x i16> %x, i32 2 1262*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2 1263*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <4 x i16> %x, i32 3 1264*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3 1265*9880d681SAndroid Build Coastguard Worker %vecinit14 = shufflevector <8 x i16> %vecinit6, <8 x i16> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11> 1266*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit14 1267*9880d681SAndroid Build Coastguard Worker} 1268*9880d681SAndroid Build Coastguard Worker 1269*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v8i16_v4i16(<8 x i16> %x, <4 x i16> %y) #0 { 1270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v8i16_v4i16: 1271*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1272*9880d681SAndroid Build Coastguard Workerentry: 1273*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <8 x i16> %x, i32 0 1274*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0 1275*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <8 x i16> %x, i32 1 1276*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1 1277*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <8 x i16> %x, i32 2 1278*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2 1279*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <8 x i16> %x, i32 3 1280*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3 1281*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <4 x i16> %y, i32 0 1282*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <8 x i16> %vecinit6, i16 %vecext7, i32 4 1283*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <4 x i16> %y, i32 1 1284*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <8 x i16> %vecinit8, i16 %vecext9, i32 5 1285*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <4 x i16> %y, i32 2 1286*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <8 x i16> %vecinit10, i16 %vecext11, i32 6 1287*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <4 x i16> %y, i32 3 1288*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <8 x i16> %vecinit12, i16 %vecext13, i32 7 1289*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit14 1290*9880d681SAndroid Build Coastguard Worker} 1291*9880d681SAndroid Build Coastguard Worker 1292*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_concat_v8i16_v4i16_v4i16(<4 x i16> %x, <4 x i16> %y) #0 { 1293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v8i16_v4i16_v4i16: 1294*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1295*9880d681SAndroid Build Coastguard Workerentry: 1296*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i16> %x, i32 0 1297*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <8 x i16> undef, i16 %vecext, i32 0 1298*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i16> %x, i32 1 1299*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <8 x i16> %vecinit, i16 %vecext1, i32 1 1300*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <4 x i16> %x, i32 2 1301*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <8 x i16> %vecinit2, i16 %vecext3, i32 2 1302*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <4 x i16> %x, i32 3 1303*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <8 x i16> %vecinit4, i16 %vecext5, i32 3 1304*9880d681SAndroid Build Coastguard Worker %vecext7 = extractelement <4 x i16> %y, i32 0 1305*9880d681SAndroid Build Coastguard Worker %vecinit8 = insertelement <8 x i16> %vecinit6, i16 %vecext7, i32 4 1306*9880d681SAndroid Build Coastguard Worker %vecext9 = extractelement <4 x i16> %y, i32 1 1307*9880d681SAndroid Build Coastguard Worker %vecinit10 = insertelement <8 x i16> %vecinit8, i16 %vecext9, i32 5 1308*9880d681SAndroid Build Coastguard Worker %vecext11 = extractelement <4 x i16> %y, i32 2 1309*9880d681SAndroid Build Coastguard Worker %vecinit12 = insertelement <8 x i16> %vecinit10, i16 %vecext11, i32 6 1310*9880d681SAndroid Build Coastguard Worker %vecext13 = extractelement <4 x i16> %y, i32 3 1311*9880d681SAndroid Build Coastguard Worker %vecinit14 = insertelement <8 x i16> %vecinit12, i16 %vecext13, i32 7 1312*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %vecinit14 1313*9880d681SAndroid Build Coastguard Worker} 1314*9880d681SAndroid Build Coastguard Worker 1315*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v4i32_v4i32(<4 x i32> %x, <4 x i32> %y) #0 { 1316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v4i32_v4i32: 1317*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1318*9880d681SAndroid Build Coastguard Workerentry: 1319*9880d681SAndroid Build Coastguard Worker %vecinit6 = shufflevector <4 x i32> %x, <4 x i32> %y, <4 x i32> <i32 0, i32 1, i32 4, i32 5> 1320*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit6 1321*9880d681SAndroid Build Coastguard Worker} 1322*9880d681SAndroid Build Coastguard Worker 1323*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v2i32_v4i32(<2 x i32> %x, <4 x i32> %y) #0 { 1324*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v2i32_v4i32: 1325*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1326*9880d681SAndroid Build Coastguard Workerentry: 1327*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i32> %x, i32 0 1328*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <4 x i32> undef, i32 %vecext, i32 0 1329*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <2 x i32> %x, i32 1 1330*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <4 x i32> %vecinit, i32 %vecext1, i32 1 1331*9880d681SAndroid Build Coastguard Worker %vecinit6 = shufflevector <4 x i32> %vecinit2, <4 x i32> %y, <4 x i32> <i32 0, i32 1, i32 4, i32 5> 1332*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit6 1333*9880d681SAndroid Build Coastguard Worker} 1334*9880d681SAndroid Build Coastguard Worker 1335*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v4i32_v2i32(<4 x i32> %x, <2 x i32> %y) #0 { 1336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v4i32_v2i32: 1337*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1338*9880d681SAndroid Build Coastguard Workerentry: 1339*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %x, i32 0 1340*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <4 x i32> undef, i32 %vecext, i32 0 1341*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i32> %x, i32 1 1342*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <4 x i32> %vecinit, i32 %vecext1, i32 1 1343*9880d681SAndroid Build Coastguard Worker %vecext3 = extractelement <2 x i32> %y, i32 0 1344*9880d681SAndroid Build Coastguard Worker %vecinit4 = insertelement <4 x i32> %vecinit2, i32 %vecext3, i32 2 1345*9880d681SAndroid Build Coastguard Worker %vecext5 = extractelement <2 x i32> %y, i32 1 1346*9880d681SAndroid Build Coastguard Worker %vecinit6 = insertelement <4 x i32> %vecinit4, i32 %vecext5, i32 3 1347*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit6 1348*9880d681SAndroid Build Coastguard Worker} 1349*9880d681SAndroid Build Coastguard Worker 1350*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_concat_v4i32_v2i32_v2i32(<2 x i32> %x, <2 x i32> %y) #0 { 1351*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v4i32_v2i32_v2i32: 1352*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1353*9880d681SAndroid Build Coastguard Workerentry: 1354*9880d681SAndroid Build Coastguard Worker %vecinit6 = shufflevector <2 x i32> %x, <2 x i32> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1355*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %vecinit6 1356*9880d681SAndroid Build Coastguard Worker} 1357*9880d681SAndroid Build Coastguard Worker 1358*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v2i64_v2i64(<2 x i64> %x, <2 x i64> %y) #0 { 1359*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v2i64_v2i64: 1360*9880d681SAndroid Build Coastguard Worker; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d 1361*9880d681SAndroid Build Coastguard Workerentry: 1362*9880d681SAndroid Build Coastguard Worker %vecinit2 = shufflevector <2 x i64> %x, <2 x i64> %y, <2 x i32> <i32 0, i32 2> 1363*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vecinit2 1364*9880d681SAndroid Build Coastguard Worker} 1365*9880d681SAndroid Build Coastguard Worker 1366*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v1i64_v2i64(<1 x i64> %x, <2 x i64> %y) #0 { 1367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v1i64_v2i64: 1368*9880d681SAndroid Build Coastguard Worker; CHECK: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d 1369*9880d681SAndroid Build Coastguard Workerentry: 1370*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <1 x i64> %x, i32 0 1371*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0 1372*9880d681SAndroid Build Coastguard Worker %vecinit2 = shufflevector <2 x i64> %vecinit, <2 x i64> %y, <2 x i32> <i32 0, i32 2> 1373*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vecinit2 1374*9880d681SAndroid Build Coastguard Worker} 1375*9880d681SAndroid Build Coastguard Worker 1376*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v2i64_v1i64(<2 x i64> %x, <1 x i64> %y) #0 { 1377*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v2i64_v1i64: 1378*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1379*9880d681SAndroid Build Coastguard Workerentry: 1380*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %x, i32 0 1381*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0 1382*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <1 x i64> %y, i32 0 1383*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <2 x i64> %vecinit, i64 %vecext1, i32 1 1384*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vecinit2 1385*9880d681SAndroid Build Coastguard Worker} 1386*9880d681SAndroid Build Coastguard Worker 1387*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_concat_v2i64_v1i64_v1i64(<1 x i64> %x, <1 x i64> %y) #0 { 1388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_concat_v2i64_v1i64_v1i64: 1389*9880d681SAndroid Build Coastguard Worker; CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0] 1390*9880d681SAndroid Build Coastguard Workerentry: 1391*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <1 x i64> %x, i32 0 1392*9880d681SAndroid Build Coastguard Worker %vecinit = insertelement <2 x i64> undef, i64 %vecext, i32 0 1393*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <1 x i64> %y, i32 0 1394*9880d681SAndroid Build Coastguard Worker %vecinit2 = insertelement <2 x i64> %vecinit, i64 %vecext1, i32 1 1395*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %vecinit2 1396*9880d681SAndroid Build Coastguard Worker} 1397*9880d681SAndroid Build Coastguard Worker 1398*9880d681SAndroid Build Coastguard Worker 1399*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16_const() { 1400*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16_const: 1401*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{d[0-9]+}}, #0 1402*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> zeroinitializer, <1 x i16> undef, <4 x i32> zeroinitializer 1403*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r 1404*9880d681SAndroid Build Coastguard Worker} 1405*9880d681SAndroid Build Coastguard Worker 1406*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16_const_one() { 1407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16_const_one: 1408*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.4h, #1 1409*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> <i16 1>, <1 x i16> undef, <4 x i32> zeroinitializer 1410*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r 1411*9880d681SAndroid Build Coastguard Worker} 1412*9880d681SAndroid Build Coastguard Worker 1413*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @concat_vector_v4i32_const() { 1414*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i32_const: 1415*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0 1416*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i32> zeroinitializer, <1 x i32> undef, <4 x i32> zeroinitializer 1417*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 1418*9880d681SAndroid Build Coastguard Worker} 1419*9880d681SAndroid Build Coastguard Worker 1420*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @concat_vector_v8i8_const() { 1421*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i8_const: 1422*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{d[0-9]+}}, #0 1423*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> zeroinitializer, <1 x i8> undef, <8 x i32> zeroinitializer 1424*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %r 1425*9880d681SAndroid Build Coastguard Worker} 1426*9880d681SAndroid Build Coastguard Worker 1427*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16_const() { 1428*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16_const: 1429*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0 1430*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> zeroinitializer, <1 x i16> undef, <8 x i32> zeroinitializer 1431*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r 1432*9880d681SAndroid Build Coastguard Worker} 1433*9880d681SAndroid Build Coastguard Worker 1434*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16_const_one() { 1435*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16_const_one: 1436*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.8h, #1 1437*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> <i16 1>, <1 x i16> undef, <8 x i32> zeroinitializer 1438*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r 1439*9880d681SAndroid Build Coastguard Worker} 1440*9880d681SAndroid Build Coastguard Worker 1441*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @concat_vector_v16i8_const() { 1442*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v16i8_const: 1443*9880d681SAndroid Build Coastguard Worker; CHECK: movi {{v[0-9]+}}.2d, #0 1444*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> zeroinitializer, <1 x i8> undef, <16 x i32> zeroinitializer 1445*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r 1446*9880d681SAndroid Build Coastguard Worker} 1447*9880d681SAndroid Build Coastguard Worker 1448*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @concat_vector_v4i16(<1 x i16> %a) { 1449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i16: 1450*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4h, v0.h[0] 1451*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> %a, <1 x i16> undef, <4 x i32> zeroinitializer 1452*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r 1453*9880d681SAndroid Build Coastguard Worker} 1454*9880d681SAndroid Build Coastguard Worker 1455*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @concat_vector_v4i32(<1 x i32> %a) { 1456*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v4i32: 1457*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.4s, v0.s[0] 1458*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i32> %a, <1 x i32> undef, <4 x i32> zeroinitializer 1459*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %r 1460*9880d681SAndroid Build Coastguard Worker} 1461*9880d681SAndroid Build Coastguard Worker 1462*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @concat_vector_v8i8(<1 x i8> %a) { 1463*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i8: 1464*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8b, v0.b[0] 1465*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> %a, <1 x i8> undef, <8 x i32> zeroinitializer 1466*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %r 1467*9880d681SAndroid Build Coastguard Worker} 1468*9880d681SAndroid Build Coastguard Worker 1469*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @concat_vector_v8i16(<1 x i16> %a) { 1470*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v8i16: 1471*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.8h, v0.h[0] 1472*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i16> %a, <1 x i16> undef, <8 x i32> zeroinitializer 1473*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r 1474*9880d681SAndroid Build Coastguard Worker} 1475*9880d681SAndroid Build Coastguard Worker 1476*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @concat_vector_v16i8(<1 x i8> %a) { 1477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: concat_vector_v16i8: 1478*9880d681SAndroid Build Coastguard Worker; CHECK: dup v0.16b, v0.b[0] 1479*9880d681SAndroid Build Coastguard Worker %r = shufflevector <1 x i8> %a, <1 x i8> undef, <16 x i32> zeroinitializer 1480*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r 1481*9880d681SAndroid Build Coastguard Worker} 1482