1add224c0Swanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 2add224c0Swanglei; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s 3add224c0Swanglei 4add224c0Swangleidefine void @buildvector_v32i8_splat(ptr %dst, i8 %a0) nounwind { 5add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_splat: 6add224c0Swanglei; CHECK: # %bb.0: # %entry 7add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.b $xr0, $a1 8add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 9add224c0Swanglei; CHECK-NEXT: ret 10add224c0Swangleientry: 11add224c0Swanglei %insert = insertelement <32 x i8> undef, i8 %a0, i8 0 12add224c0Swanglei %splat = shufflevector <32 x i8> %insert, <32 x i8> undef, <32 x i32> zeroinitializer 13add224c0Swanglei store <32 x i8> %splat, ptr %dst 14add224c0Swanglei ret void 15add224c0Swanglei} 16add224c0Swanglei 17add224c0Swangleidefine void @buildvector_v16i16_splat(ptr %dst, i16 %a0) nounwind { 18add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_splat: 19add224c0Swanglei; CHECK: # %bb.0: # %entry 20add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.h $xr0, $a1 21add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 22add224c0Swanglei; CHECK-NEXT: ret 23add224c0Swangleientry: 24add224c0Swanglei %insert = insertelement <16 x i16> undef, i16 %a0, i8 0 25add224c0Swanglei %splat = shufflevector <16 x i16> %insert, <16 x i16> undef, <16 x i32> zeroinitializer 26add224c0Swanglei store <16 x i16> %splat, ptr %dst 27add224c0Swanglei ret void 28add224c0Swanglei} 29add224c0Swanglei 30add224c0Swangleidefine void @buildvector_v8i32_splat(ptr %dst, i32 %a0) nounwind { 31add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_splat: 32add224c0Swanglei; CHECK: # %bb.0: # %entry 33add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.w $xr0, $a1 34add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 35add224c0Swanglei; CHECK-NEXT: ret 36add224c0Swangleientry: 37add224c0Swanglei %insert = insertelement <8 x i32> undef, i32 %a0, i8 0 38add224c0Swanglei %splat = shufflevector <8 x i32> %insert, <8 x i32> undef, <8 x i32> zeroinitializer 39add224c0Swanglei store <8 x i32> %splat, ptr %dst 40add224c0Swanglei ret void 41add224c0Swanglei} 42add224c0Swanglei 43add224c0Swangleidefine void @buildvector_v4i64_splat(ptr %dst, i64 %a0) nounwind { 44add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_splat: 45add224c0Swanglei; CHECK: # %bb.0: # %entry 46add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.d $xr0, $a1 47add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 48add224c0Swanglei; CHECK-NEXT: ret 49add224c0Swangleientry: 50add224c0Swanglei %insert = insertelement <4 x i64> undef, i64 %a0, i8 0 51add224c0Swanglei %splat = shufflevector <4 x i64> %insert, <4 x i64> undef, <4 x i32> zeroinitializer 52add224c0Swanglei store <4 x i64> %splat, ptr %dst 53add224c0Swanglei ret void 54add224c0Swanglei} 55add224c0Swanglei 56add224c0Swangleidefine void @buildvector_v8f32_splat(ptr %dst, float %a0) nounwind { 57add224c0Swanglei; CHECK-LABEL: buildvector_v8f32_splat: 58add224c0Swanglei; CHECK: # %bb.0: # %entry 59add224c0Swanglei; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0 60c7367f98Swanglei; CHECK-NEXT: xvreplve0.w $xr0, $xr0 61add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 62add224c0Swanglei; CHECK-NEXT: ret 63add224c0Swangleientry: 64add224c0Swanglei %insert = insertelement <8 x float> undef, float %a0, i8 0 65add224c0Swanglei %splat = shufflevector <8 x float> %insert, <8 x float> undef, <8 x i32> zeroinitializer 66add224c0Swanglei store <8 x float> %splat, ptr %dst 67add224c0Swanglei ret void 68add224c0Swanglei} 69add224c0Swanglei 70add224c0Swangleidefine void @buildvector_v4f64_splat(ptr %dst, double %a0) nounwind { 71add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_splat: 72add224c0Swanglei; CHECK: # %bb.0: # %entry 73add224c0Swanglei; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0 74c7367f98Swanglei; CHECK-NEXT: xvreplve0.d $xr0, $xr0 75add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 76add224c0Swanglei; CHECK-NEXT: ret 77add224c0Swangleientry: 78add224c0Swanglei %insert = insertelement <4 x double> undef, double %a0, i8 0 79add224c0Swanglei %splat = shufflevector <4 x double> %insert, <4 x double> undef, <4 x i32> zeroinitializer 80add224c0Swanglei store <4 x double> %splat, ptr %dst 81add224c0Swanglei ret void 82add224c0Swanglei} 83add224c0Swanglei 84add224c0Swangleidefine void @buildvector_v32i8_const_splat(ptr %dst) nounwind { 85add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_const_splat: 86add224c0Swanglei; CHECK: # %bb.0: # %entry 87add224c0Swanglei; CHECK-NEXT: xvrepli.b $xr0, 1 88add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 89add224c0Swanglei; CHECK-NEXT: ret 90add224c0Swangleientry: 91add224c0Swanglei store <32 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, ptr %dst 92add224c0Swanglei ret void 93add224c0Swanglei} 94add224c0Swanglei 95add224c0Swangleidefine void @buildvector_v16i16_const_splat(ptr %dst) nounwind { 96add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_const_splat: 97add224c0Swanglei; CHECK: # %bb.0: # %entry 98add224c0Swanglei; CHECK-NEXT: xvrepli.h $xr0, 1 99add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 100add224c0Swanglei; CHECK-NEXT: ret 101add224c0Swangleientry: 102add224c0Swanglei store <16 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, ptr %dst 103add224c0Swanglei ret void 104add224c0Swanglei} 105add224c0Swanglei 106add224c0Swangleidefine void @buildvector_v8i32_const_splat(ptr %dst) nounwind { 107add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_const_splat: 108add224c0Swanglei; CHECK: # %bb.0: # %entry 109add224c0Swanglei; CHECK-NEXT: xvrepli.w $xr0, 1 110add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 111add224c0Swanglei; CHECK-NEXT: ret 112add224c0Swangleientry: 113add224c0Swanglei store <8 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, ptr %dst 114add224c0Swanglei ret void 115add224c0Swanglei} 116add224c0Swanglei 117add224c0Swangleidefine void @buildvector_v4i64_const_splat(ptr %dst) nounwind { 118add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_const_splat: 119add224c0Swanglei; CHECK: # %bb.0: # %entry 120add224c0Swanglei; CHECK-NEXT: xvrepli.d $xr0, 1 121add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 122add224c0Swanglei; CHECK-NEXT: ret 123add224c0Swangleientry: 124add224c0Swanglei store <4 x i64> <i64 1, i64 1, i64 1, i64 1>, ptr %dst 125add224c0Swanglei ret void 126add224c0Swanglei} 127add224c0Swanglei 128add224c0Swangleidefine void @buildvector_v2f32_const_splat(ptr %dst) nounwind { 129add224c0Swanglei; CHECK-LABEL: buildvector_v2f32_const_splat: 130add224c0Swanglei; CHECK: # %bb.0: # %entry 131add224c0Swanglei; CHECK-NEXT: lu12i.w $a1, 260096 132add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.w $xr0, $a1 133add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 134add224c0Swanglei; CHECK-NEXT: ret 135add224c0Swangleientry: 136add224c0Swanglei store <8 x float> <float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0, float 1.0>, ptr %dst 137add224c0Swanglei ret void 138add224c0Swanglei} 139add224c0Swanglei 140add224c0Swangleidefine void @buildvector_v4f64_const_splat(ptr %dst) nounwind { 141add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_const_splat: 142add224c0Swanglei; CHECK: # %bb.0: # %entry 143add224c0Swanglei; CHECK-NEXT: lu52i.d $a1, $zero, 1023 144add224c0Swanglei; CHECK-NEXT: xvreplgr2vr.d $xr0, $a1 145add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 146add224c0Swanglei; CHECK-NEXT: ret 147add224c0Swangleientry: 148add224c0Swanglei store <4 x double> <double 1.0, double 1.0, double 1.0, double 1.0>, ptr %dst 149add224c0Swanglei ret void 150add224c0Swanglei} 151add224c0Swanglei 152add224c0Swangleidefine void @buildvector_v32i8_const(ptr %dst) nounwind { 153add224c0Swanglei; CHECK-LABEL: buildvector_v32i8_const: 154add224c0Swanglei; CHECK: # %bb.0: # %entry 155add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI12_0) 156*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI12_0) 157add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 158add224c0Swanglei; CHECK-NEXT: ret 159add224c0Swangleientry: 160add224c0Swanglei store <32 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31>, ptr %dst 161add224c0Swanglei ret void 162add224c0Swanglei} 163add224c0Swanglei 164add224c0Swangleidefine void @buildvector_v16i16_const(ptr %dst) nounwind { 165add224c0Swanglei; CHECK-LABEL: buildvector_v16i16_const: 166add224c0Swanglei; CHECK: # %bb.0: # %entry 167add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI13_0) 168*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI13_0) 169add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 170add224c0Swanglei; CHECK-NEXT: ret 171add224c0Swangleientry: 172add224c0Swanglei store <16 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, ptr %dst 173add224c0Swanglei ret void 174add224c0Swanglei} 175add224c0Swanglei 176add224c0Swangleidefine void @buildvector_v8i32_const(ptr %dst) nounwind { 177add224c0Swanglei; CHECK-LABEL: buildvector_v8i32_const: 178add224c0Swanglei; CHECK: # %bb.0: # %entry 179add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI14_0) 180*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI14_0) 181add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 182add224c0Swanglei; CHECK-NEXT: ret 183add224c0Swangleientry: 184add224c0Swanglei store <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>, ptr %dst 185add224c0Swanglei ret void 186add224c0Swanglei} 187add224c0Swanglei 188add224c0Swangleidefine void @buildvector_v4i64_const(ptr %dst) nounwind { 189add224c0Swanglei; CHECK-LABEL: buildvector_v4i64_const: 190add224c0Swanglei; CHECK: # %bb.0: # %entry 191add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI15_0) 192*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI15_0) 193add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 194add224c0Swanglei; CHECK-NEXT: ret 195add224c0Swangleientry: 196add224c0Swanglei store <4 x i64> <i64 0, i64 1, i64 2, i64 3>, ptr %dst 197add224c0Swanglei ret void 198add224c0Swanglei} 199add224c0Swanglei 200add224c0Swangleidefine void @buildvector_v2f32_const(ptr %dst) nounwind { 201add224c0Swanglei; CHECK-LABEL: buildvector_v2f32_const: 202add224c0Swanglei; CHECK: # %bb.0: # %entry 203add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI16_0) 204*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI16_0) 205add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 206add224c0Swanglei; CHECK-NEXT: ret 207add224c0Swangleientry: 208add224c0Swanglei store <8 x float> <float 0.0, float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0>, ptr %dst 209add224c0Swanglei ret void 210add224c0Swanglei} 211add224c0Swanglei 212add224c0Swangleidefine void @buildvector_v4f64_const(ptr %dst) nounwind { 213add224c0Swanglei; CHECK-LABEL: buildvector_v4f64_const: 214add224c0Swanglei; CHECK: # %bb.0: # %entry 215add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI17_0) 216*985d64b0Shev; CHECK-NEXT: xvld $xr0, $a1, %pc_lo12(.LCPI17_0) 217add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 218add224c0Swanglei; CHECK-NEXT: ret 219add224c0Swangleientry: 220add224c0Swanglei store <4 x double> <double 0.0, double 1.0, double 2.0, double 3.0>, ptr %dst 221add224c0Swanglei ret void 222add224c0Swanglei} 223add224c0Swanglei 224add224c0Swangleidefine void @buildvector_v32i8(ptr %dst, i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4, i8 %a5, i8 %a6, i8 %a7, i8 %a8, i8 %a9, i8 %a10, i8 %a11, i8 %a12, i8 %a13, i8 %a14, i8 %a15, i8 %a16, i8 %a17, i8 %a18, i8 %a19, i8 %a20, i8 %a21, i8 %a22, i8 %a23, i8 %a24, i8 %a25, i8 %a26, i8 %a27, i8 %a28, i8 %a29, i8 %a30, i8 %a31) nounwind { 225add224c0Swanglei; CHECK-LABEL: buildvector_v32i8: 226add224c0Swanglei; CHECK: # %bb.0: # %entry 227add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 0 228add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 1 229add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 2 230add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a4, 3 231add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a5, 4 232add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 0 233a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a6, 5 234a5c90e48Swanglei; CHECK-NEXT: ld.b $a2, $sp, 8 235a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a7, 6 236a5c90e48Swanglei; CHECK-NEXT: ld.b $a3, $sp, 16 237add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 7 238add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 24 239a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 8 240a5c90e48Swanglei; CHECK-NEXT: ld.b $a2, $sp, 32 241a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 9 242a5c90e48Swanglei; CHECK-NEXT: ld.b $a3, $sp, 40 243add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 10 244add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 48 245a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 11 246a5c90e48Swanglei; CHECK-NEXT: ld.b $a2, $sp, 56 247a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 12 248a5c90e48Swanglei; CHECK-NEXT: ld.b $a3, $sp, 64 249add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 13 250a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 14 251add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 72 252a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 15 253add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 254add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 255add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 0 256add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 80 257a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 258add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 259add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 260add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 1 261add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 88 262a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 263add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 264add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 265add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 2 266add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 96 267a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 268add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 269add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 270add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 3 271add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 104 272a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 273add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 274add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 275add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 4 276add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 112 277a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 278add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 279add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 280add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 5 281add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 120 282a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 283add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 284add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 285add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 6 286add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 128 287a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 288add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 289add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 290add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 7 291add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 136 292a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 293add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 294add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 295add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 8 296add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 144 297a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 298add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 299add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 300add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 9 301add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 152 302a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 303add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 304add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 305add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 10 306add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 160 307a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 308add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 309add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 310add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 11 311add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 168 312a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 313add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 314add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 315add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 12 316add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 176 317a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 318add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 319add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 320add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 13 321add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 184 322a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 323add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 324add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 325add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 14 326add224c0Swanglei; CHECK-NEXT: ld.b $a1, $sp, 192 327a5c90e48Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 328add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 329add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 330add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr1, $a1, 15 331add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 332add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 333add224c0Swanglei; CHECK-NEXT: ret 334add224c0Swangleientry: 335add224c0Swanglei %ins0 = insertelement <32 x i8> undef, i8 %a0, i32 0 336add224c0Swanglei %ins1 = insertelement <32 x i8> %ins0, i8 %a1, i32 1 337add224c0Swanglei %ins2 = insertelement <32 x i8> %ins1, i8 %a2, i32 2 338add224c0Swanglei %ins3 = insertelement <32 x i8> %ins2, i8 %a3, i32 3 339add224c0Swanglei %ins4 = insertelement <32 x i8> %ins3, i8 %a4, i32 4 340add224c0Swanglei %ins5 = insertelement <32 x i8> %ins4, i8 %a5, i32 5 341add224c0Swanglei %ins6 = insertelement <32 x i8> %ins5, i8 %a6, i32 6 342add224c0Swanglei %ins7 = insertelement <32 x i8> %ins6, i8 %a7, i32 7 343add224c0Swanglei %ins8 = insertelement <32 x i8> %ins7, i8 %a8, i32 8 344add224c0Swanglei %ins9 = insertelement <32 x i8> %ins8, i8 %a9, i32 9 345add224c0Swanglei %ins10 = insertelement <32 x i8> %ins9, i8 %a10, i32 10 346add224c0Swanglei %ins11 = insertelement <32 x i8> %ins10, i8 %a11, i32 11 347add224c0Swanglei %ins12 = insertelement <32 x i8> %ins11, i8 %a12, i32 12 348add224c0Swanglei %ins13 = insertelement <32 x i8> %ins12, i8 %a13, i32 13 349add224c0Swanglei %ins14 = insertelement <32 x i8> %ins13, i8 %a14, i32 14 350add224c0Swanglei %ins15 = insertelement <32 x i8> %ins14, i8 %a15, i32 15 351add224c0Swanglei %ins16 = insertelement <32 x i8> %ins15, i8 %a16, i32 16 352add224c0Swanglei %ins17 = insertelement <32 x i8> %ins16, i8 %a17, i32 17 353add224c0Swanglei %ins18 = insertelement <32 x i8> %ins17, i8 %a18, i32 18 354add224c0Swanglei %ins19 = insertelement <32 x i8> %ins18, i8 %a19, i32 19 355add224c0Swanglei %ins20 = insertelement <32 x i8> %ins19, i8 %a20, i32 20 356add224c0Swanglei %ins21 = insertelement <32 x i8> %ins20, i8 %a21, i32 21 357add224c0Swanglei %ins22 = insertelement <32 x i8> %ins21, i8 %a22, i32 22 358add224c0Swanglei %ins23 = insertelement <32 x i8> %ins22, i8 %a23, i32 23 359add224c0Swanglei %ins24 = insertelement <32 x i8> %ins23, i8 %a24, i32 24 360add224c0Swanglei %ins25 = insertelement <32 x i8> %ins24, i8 %a25, i32 25 361add224c0Swanglei %ins26 = insertelement <32 x i8> %ins25, i8 %a26, i32 26 362add224c0Swanglei %ins27 = insertelement <32 x i8> %ins26, i8 %a27, i32 27 363add224c0Swanglei %ins28 = insertelement <32 x i8> %ins27, i8 %a28, i32 28 364add224c0Swanglei %ins29 = insertelement <32 x i8> %ins28, i8 %a29, i32 29 365add224c0Swanglei %ins30 = insertelement <32 x i8> %ins29, i8 %a30, i32 30 366add224c0Swanglei %ins31 = insertelement <32 x i8> %ins30, i8 %a31, i32 31 367add224c0Swanglei store <32 x i8> %ins31, ptr %dst 368add224c0Swanglei ret void 369add224c0Swanglei} 370add224c0Swanglei 371add224c0Swangleidefine void @buildvector_v16i16(ptr %dst, i16 %a0, i16 %a1, i16 %a2, i16 %a3, i16 %a4, i16 %a5, i16 %a6, i16 %a7, i16 %a8, i16 %a9, i16 %a10, i16 %a11, i16 %a12, i16 %a13, i16 %a14, i16 %a15) nounwind { 372add224c0Swanglei; CHECK-LABEL: buildvector_v16i16: 373add224c0Swanglei; CHECK: # %bb.0: # %entry 374a5c90e48Swanglei; CHECK-NEXT: ld.h $t0, $sp, 8 375a5c90e48Swanglei; CHECK-NEXT: ld.h $t1, $sp, 0 376add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a1, 0 377add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 1 378add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a3, 2 379add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a4, 3 380add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a5, 4 381add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a6, 5 382add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a7, 6 383a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $t1, 7 384a5c90e48Swanglei; CHECK-NEXT: ld.h $a1, $sp, 16 385add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 386add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 387a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $t0, 0 388add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 389a5c90e48Swanglei; CHECK-NEXT: ld.h $a2, $sp, 24 390add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 391add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 392add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a1, 1 393add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 394a5c90e48Swanglei; CHECK-NEXT: ld.h $a1, $sp, 32 395add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 396add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 397a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a2, 2 398add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 399a5c90e48Swanglei; CHECK-NEXT: ld.h $a2, $sp, 40 400add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 401add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 402add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a1, 3 403add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 404a5c90e48Swanglei; CHECK-NEXT: ld.h $a1, $sp, 48 405add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 406add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 407a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a2, 4 408add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 409a5c90e48Swanglei; CHECK-NEXT: ld.h $a2, $sp, 56 410add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 411add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 412add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a1, 5 413add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 414a5c90e48Swanglei; CHECK-NEXT: ld.h $a1, $sp, 64 415add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 416add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 417a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a2, 6 418add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 419add224c0Swanglei; CHECK-NEXT: xvori.b $xr1, $xr0, 0 420add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr1, $xr0, 1 421add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr1, $a1, 7 422add224c0Swanglei; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2 423add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 424add224c0Swanglei; CHECK-NEXT: ret 425add224c0Swangleientry: 426add224c0Swanglei %ins0 = insertelement <16 x i16> undef, i16 %a0, i32 0 427add224c0Swanglei %ins1 = insertelement <16 x i16> %ins0, i16 %a1, i32 1 428add224c0Swanglei %ins2 = insertelement <16 x i16> %ins1, i16 %a2, i32 2 429add224c0Swanglei %ins3 = insertelement <16 x i16> %ins2, i16 %a3, i32 3 430add224c0Swanglei %ins4 = insertelement <16 x i16> %ins3, i16 %a4, i32 4 431add224c0Swanglei %ins5 = insertelement <16 x i16> %ins4, i16 %a5, i32 5 432add224c0Swanglei %ins6 = insertelement <16 x i16> %ins5, i16 %a6, i32 6 433add224c0Swanglei %ins7 = insertelement <16 x i16> %ins6, i16 %a7, i32 7 434add224c0Swanglei %ins8 = insertelement <16 x i16> %ins7, i16 %a8, i32 8 435add224c0Swanglei %ins9 = insertelement <16 x i16> %ins8, i16 %a9, i32 9 436add224c0Swanglei %ins10 = insertelement <16 x i16> %ins9, i16 %a10, i32 10 437add224c0Swanglei %ins11 = insertelement <16 x i16> %ins10, i16 %a11, i32 11 438add224c0Swanglei %ins12 = insertelement <16 x i16> %ins11, i16 %a12, i32 12 439add224c0Swanglei %ins13 = insertelement <16 x i16> %ins12, i16 %a13, i32 13 440add224c0Swanglei %ins14 = insertelement <16 x i16> %ins13, i16 %a14, i32 14 441add224c0Swanglei %ins15 = insertelement <16 x i16> %ins14, i16 %a15, i32 15 442add224c0Swanglei store <16 x i16> %ins15, ptr %dst 443add224c0Swanglei ret void 444add224c0Swanglei} 445add224c0Swanglei 446add224c0Swangleidefine void @buildvector_v8i32(ptr %dst, i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, i32 %a7) nounwind { 447add224c0Swanglei; CHECK-LABEL: buildvector_v8i32: 448add224c0Swanglei; CHECK: # %bb.0: # %entry 449a5c90e48Swanglei; CHECK-NEXT: ld.w $t0, $sp, 0 450add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 0 451add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a2, 1 452add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a3, 2 453add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a4, 3 454add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a5, 4 455add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a6, 5 456add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a7, 6 457a5c90e48Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $t0, 7 458add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 459add224c0Swanglei; CHECK-NEXT: ret 460add224c0Swangleientry: 461add224c0Swanglei %ins0 = insertelement <8 x i32> undef, i32 %a0, i32 0 462add224c0Swanglei %ins1 = insertelement <8 x i32> %ins0, i32 %a1, i32 1 463add224c0Swanglei %ins2 = insertelement <8 x i32> %ins1, i32 %a2, i32 2 464add224c0Swanglei %ins3 = insertelement <8 x i32> %ins2, i32 %a3, i32 3 465add224c0Swanglei %ins4 = insertelement <8 x i32> %ins3, i32 %a4, i32 4 466add224c0Swanglei %ins5 = insertelement <8 x i32> %ins4, i32 %a5, i32 5 467add224c0Swanglei %ins6 = insertelement <8 x i32> %ins5, i32 %a6, i32 6 468add224c0Swanglei %ins7 = insertelement <8 x i32> %ins6, i32 %a7, i32 7 469add224c0Swanglei store <8 x i32> %ins7, ptr %dst 470add224c0Swanglei ret void 471add224c0Swanglei} 472add224c0Swanglei 473add224c0Swangleidefine void @buildvector_v4i64(ptr %dst, i64 %a0, i64 %a1, i64 %a2, i64 %a3) nounwind { 474add224c0Swanglei; CHECK-LABEL: buildvector_v4i64: 475add224c0Swanglei; CHECK: # %bb.0: # %entry 476add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 0 477add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a2, 1 478add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a3, 2 479add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a4, 3 480add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 481add224c0Swanglei; CHECK-NEXT: ret 482add224c0Swangleientry: 483add224c0Swanglei %ins0 = insertelement <4 x i64> undef, i64 %a0, i32 0 484add224c0Swanglei %ins1 = insertelement <4 x i64> %ins0, i64 %a1, i32 1 485add224c0Swanglei %ins2 = insertelement <4 x i64> %ins1, i64 %a2, i32 2 486add224c0Swanglei %ins3 = insertelement <4 x i64> %ins2, i64 %a3, i32 3 487add224c0Swanglei store <4 x i64> %ins3, ptr %dst 488add224c0Swanglei ret void 489add224c0Swanglei} 490add224c0Swanglei 491add224c0Swangleidefine void @buildvector_v8f32(ptr %dst, float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7) nounwind { 492add224c0Swanglei; CHECK-LABEL: buildvector_v8f32: 493add224c0Swanglei; CHECK: # %bb.0: # %entry 494add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa0 495add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 0 496add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa1 497add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 1 498add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa2 499add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 2 500add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa3 501add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 3 502add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa4 503add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 4 504add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa5 505add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 5 506add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa6 507add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 6 508add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa7 509add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 7 510add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 511add224c0Swanglei; CHECK-NEXT: ret 512add224c0Swangleientry: 513add224c0Swanglei %ins0 = insertelement <8 x float> undef, float %a0, i32 0 514add224c0Swanglei %ins1 = insertelement <8 x float> %ins0, float %a1, i32 1 515add224c0Swanglei %ins2 = insertelement <8 x float> %ins1, float %a2, i32 2 516add224c0Swanglei %ins3 = insertelement <8 x float> %ins2, float %a3, i32 3 517add224c0Swanglei %ins4 = insertelement <8 x float> %ins3, float %a4, i32 4 518add224c0Swanglei %ins5 = insertelement <8 x float> %ins4, float %a5, i32 5 519add224c0Swanglei %ins6 = insertelement <8 x float> %ins5, float %a6, i32 6 520add224c0Swanglei %ins7 = insertelement <8 x float> %ins6, float %a7, i32 7 521add224c0Swanglei store <8 x float> %ins7, ptr %dst 522add224c0Swanglei ret void 523add224c0Swanglei} 524add224c0Swanglei 525add224c0Swangleidefine void @buildvector_v4f64(ptr %dst, double %a0, double %a1, double %a2, double %a3) nounwind { 526add224c0Swanglei; CHECK-LABEL: buildvector_v4f64: 527add224c0Swanglei; CHECK: # %bb.0: # %entry 528add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa0 529add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 0 530add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa1 531add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 1 532add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa2 533add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 2 534add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa3 535add224c0Swanglei; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 3 536add224c0Swanglei; CHECK-NEXT: xvst $xr0, $a0, 0 537add224c0Swanglei; CHECK-NEXT: ret 538add224c0Swangleientry: 539add224c0Swanglei %ins0 = insertelement <4 x double> undef, double %a0, i32 0 540add224c0Swanglei %ins1 = insertelement <4 x double> %ins0, double %a1, i32 1 541add224c0Swanglei %ins2 = insertelement <4 x double> %ins1, double %a2, i32 2 542add224c0Swanglei %ins3 = insertelement <4 x double> %ins2, double %a3, i32 3 543add224c0Swanglei store <4 x double> %ins3, ptr %dst 544add224c0Swanglei ret void 545add224c0Swanglei} 546