1add224c0Swanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 2add224c0Swanglei; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s 3add224c0Swanglei 4add224c0Swangleidefine void @buildvector_v16i8_splat(ptr %dst, i8 %a0) nounwind { 5add224c0Swanglei; CHECK-LABEL: buildvector_v16i8_splat: 6add224c0Swanglei; CHECK: # %bb.0: # %entry 7add224c0Swanglei; CHECK-NEXT: vreplgr2vr.b $vr0, $a1 8add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 9add224c0Swanglei; CHECK-NEXT: ret 10add224c0Swangleientry: 11add224c0Swanglei %insert = insertelement <16 x i8> undef, i8 %a0, i8 0 12add224c0Swanglei %splat = shufflevector <16 x i8> %insert, <16 x i8> undef, <16 x i32> zeroinitializer 13add224c0Swanglei store <16 x i8> %splat, ptr %dst 14add224c0Swanglei ret void 15add224c0Swanglei} 16add224c0Swanglei 17add224c0Swangleidefine void @buildvector_v8i16_splat(ptr %dst, i16 %a0) nounwind { 18add224c0Swanglei; CHECK-LABEL: buildvector_v8i16_splat: 19add224c0Swanglei; CHECK: # %bb.0: # %entry 20add224c0Swanglei; CHECK-NEXT: vreplgr2vr.h $vr0, $a1 21add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 22add224c0Swanglei; CHECK-NEXT: ret 23add224c0Swangleientry: 24add224c0Swanglei %insert = insertelement <8 x i16> undef, i16 %a0, i8 0 25add224c0Swanglei %splat = shufflevector <8 x i16> %insert, <8 x i16> undef, <8 x i32> zeroinitializer 26add224c0Swanglei store <8 x i16> %splat, ptr %dst 27add224c0Swanglei ret void 28add224c0Swanglei} 29add224c0Swanglei 30add224c0Swangleidefine void @buildvector_v4i32_splat(ptr %dst, i32 %a0) nounwind { 31add224c0Swanglei; CHECK-LABEL: buildvector_v4i32_splat: 32add224c0Swanglei; CHECK: # %bb.0: # %entry 33add224c0Swanglei; CHECK-NEXT: vreplgr2vr.w $vr0, $a1 34add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 35add224c0Swanglei; CHECK-NEXT: ret 36add224c0Swangleientry: 37add224c0Swanglei %insert = insertelement <4 x i32> undef, i32 %a0, i8 0 38add224c0Swanglei %splat = shufflevector <4 x i32> %insert, <4 x i32> undef, <4 x i32> zeroinitializer 39add224c0Swanglei store <4 x i32> %splat, ptr %dst 40add224c0Swanglei ret void 41add224c0Swanglei} 42add224c0Swanglei 43add224c0Swangleidefine void @buildvector_v2i64_splat(ptr %dst, i64 %a0) nounwind { 44add224c0Swanglei; CHECK-LABEL: buildvector_v2i64_splat: 45add224c0Swanglei; CHECK: # %bb.0: # %entry 46add224c0Swanglei; CHECK-NEXT: vreplgr2vr.d $vr0, $a1 47add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 48add224c0Swanglei; CHECK-NEXT: ret 49add224c0Swangleientry: 50add224c0Swanglei %insert = insertelement <2 x i64> undef, i64 %a0, i8 0 51add224c0Swanglei %splat = shufflevector <2 x i64> %insert, <2 x i64> undef, <2 x i32> zeroinitializer 52add224c0Swanglei store <2 x i64> %splat, ptr %dst 53add224c0Swanglei ret void 54add224c0Swanglei} 55add224c0Swanglei 56add224c0Swangleidefine void @buildvector_v4f32_splat(ptr %dst, float %a0) nounwind { 57add224c0Swanglei; CHECK-LABEL: buildvector_v4f32_splat: 58add224c0Swanglei; CHECK: # %bb.0: # %entry 59add224c0Swanglei; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0 60add224c0Swanglei; CHECK-NEXT: vreplvei.w $vr0, $vr0, 0 61add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 62add224c0Swanglei; CHECK-NEXT: ret 63add224c0Swangleientry: 64add224c0Swanglei %insert = insertelement <4 x float> undef, float %a0, i8 0 65add224c0Swanglei %splat = shufflevector <4 x float> %insert, <4 x float> undef, <4 x i32> zeroinitializer 66add224c0Swanglei store <4 x float> %splat, ptr %dst 67add224c0Swanglei ret void 68add224c0Swanglei} 69add224c0Swanglei 70add224c0Swangleidefine void @buildvector_v2f64_splat(ptr %dst, double %a0) nounwind { 71add224c0Swanglei; CHECK-LABEL: buildvector_v2f64_splat: 72add224c0Swanglei; CHECK: # %bb.0: # %entry 73add224c0Swanglei; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0 74add224c0Swanglei; CHECK-NEXT: vreplvei.d $vr0, $vr0, 0 75add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 76add224c0Swanglei; CHECK-NEXT: ret 77add224c0Swangleientry: 78add224c0Swanglei %insert = insertelement <2 x double> undef, double %a0, i8 0 79add224c0Swanglei %splat = shufflevector <2 x double> %insert, <2 x double> undef, <2 x i32> zeroinitializer 80add224c0Swanglei store <2 x double> %splat, ptr %dst 81add224c0Swanglei ret void 82add224c0Swanglei} 83add224c0Swanglei 84add224c0Swangleidefine void @buildvector_v16i8_const_splat(ptr %dst) nounwind { 85add224c0Swanglei; CHECK-LABEL: buildvector_v16i8_const_splat: 86add224c0Swanglei; CHECK: # %bb.0: # %entry 87add224c0Swanglei; CHECK-NEXT: vrepli.b $vr0, 1 88add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 89add224c0Swanglei; CHECK-NEXT: ret 90add224c0Swangleientry: 91add224c0Swanglei store <16 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>, ptr %dst 92add224c0Swanglei ret void 93add224c0Swanglei} 94add224c0Swanglei 95add224c0Swangleidefine void @buildvector_v8i16_const_splat(ptr %dst) nounwind { 96add224c0Swanglei; CHECK-LABEL: buildvector_v8i16_const_splat: 97add224c0Swanglei; CHECK: # %bb.0: # %entry 98add224c0Swanglei; CHECK-NEXT: vrepli.h $vr0, 1 99add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 100add224c0Swanglei; CHECK-NEXT: ret 101add224c0Swangleientry: 102add224c0Swanglei store <8 x i16> <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_v4i32_const_splat(ptr %dst) nounwind { 107add224c0Swanglei; CHECK-LABEL: buildvector_v4i32_const_splat: 108add224c0Swanglei; CHECK: # %bb.0: # %entry 109add224c0Swanglei; CHECK-NEXT: vrepli.w $vr0, 1 110add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 111add224c0Swanglei; CHECK-NEXT: ret 112add224c0Swangleientry: 113add224c0Swanglei store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr %dst 114add224c0Swanglei ret void 115add224c0Swanglei} 116add224c0Swanglei 117add224c0Swangleidefine void @buildvector_v2i64_const_splat(ptr %dst) nounwind { 118add224c0Swanglei; CHECK-LABEL: buildvector_v2i64_const_splat: 119add224c0Swanglei; CHECK: # %bb.0: # %entry 120add224c0Swanglei; CHECK-NEXT: vrepli.d $vr0, 1 121add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 122add224c0Swanglei; CHECK-NEXT: ret 123add224c0Swangleientry: 124add224c0Swanglei store <2 x i64> <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: vreplgr2vr.w $vr0, $a1 133add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 134add224c0Swanglei; CHECK-NEXT: ret 135add224c0Swangleientry: 136add224c0Swanglei store <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, ptr %dst 137add224c0Swanglei ret void 138add224c0Swanglei} 139add224c0Swanglei 140add224c0Swangleidefine void @buildvector_v2f64_const_splat(ptr %dst) nounwind { 141add224c0Swanglei; CHECK-LABEL: buildvector_v2f64_const_splat: 142add224c0Swanglei; CHECK: # %bb.0: # %entry 143add224c0Swanglei; CHECK-NEXT: lu52i.d $a1, $zero, 1023 144add224c0Swanglei; CHECK-NEXT: vreplgr2vr.d $vr0, $a1 145add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 146add224c0Swanglei; CHECK-NEXT: ret 147add224c0Swangleientry: 148add224c0Swanglei store <2 x double> <double 1.0, double 1.0>, ptr %dst 149add224c0Swanglei ret void 150add224c0Swanglei} 151add224c0Swanglei 152add224c0Swangleidefine void @buildvector_v16i8_const(ptr %dst) nounwind { 153add224c0Swanglei; CHECK-LABEL: buildvector_v16i8_const: 154add224c0Swanglei; CHECK: # %bb.0: # %entry 155add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI12_0) 156985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI12_0) 157add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 158add224c0Swanglei; CHECK-NEXT: ret 159add224c0Swangleientry: 160add224c0Swanglei store <16 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>, ptr %dst 161add224c0Swanglei ret void 162add224c0Swanglei} 163add224c0Swanglei 164add224c0Swangleidefine void @buildvector_v8i16_const(ptr %dst) nounwind { 165add224c0Swanglei; CHECK-LABEL: buildvector_v8i16_const: 166add224c0Swanglei; CHECK: # %bb.0: # %entry 167add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI13_0) 168985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI13_0) 169add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 170add224c0Swanglei; CHECK-NEXT: ret 171add224c0Swangleientry: 172add224c0Swanglei store <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7>, ptr %dst 173add224c0Swanglei ret void 174add224c0Swanglei} 175add224c0Swanglei 176add224c0Swangleidefine void @buildvector_v4i32_const(ptr %dst) nounwind { 177add224c0Swanglei; CHECK-LABEL: buildvector_v4i32_const: 178add224c0Swanglei; CHECK: # %bb.0: # %entry 179add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI14_0) 180985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI14_0) 181add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 182add224c0Swanglei; CHECK-NEXT: ret 183add224c0Swangleientry: 184add224c0Swanglei store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr %dst 185add224c0Swanglei ret void 186add224c0Swanglei} 187add224c0Swanglei 188add224c0Swangleidefine void @buildvector_v2i64_const(ptr %dst) nounwind { 189add224c0Swanglei; CHECK-LABEL: buildvector_v2i64_const: 190add224c0Swanglei; CHECK: # %bb.0: # %entry 191add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI15_0) 192985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI15_0) 193add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 194add224c0Swanglei; CHECK-NEXT: ret 195add224c0Swangleientry: 196add224c0Swanglei store <2 x i64> <i64 0, i64 1>, 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) 204985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI16_0) 205add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 206add224c0Swanglei; CHECK-NEXT: ret 207add224c0Swangleientry: 208add224c0Swanglei store <4 x float> <float 0.0, float 1.0, float 2.0, float 3.0>, ptr %dst 209add224c0Swanglei ret void 210add224c0Swanglei} 211add224c0Swanglei 212add224c0Swangleidefine void @buildvector_v2f64_const(ptr %dst) nounwind { 213add224c0Swanglei; CHECK-LABEL: buildvector_v2f64_const: 214add224c0Swanglei; CHECK: # %bb.0: # %entry 215add224c0Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI17_0) 216985d64b0Shev; CHECK-NEXT: vld $vr0, $a1, %pc_lo12(.LCPI17_0) 217add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 218add224c0Swanglei; CHECK-NEXT: ret 219add224c0Swangleientry: 220add224c0Swanglei store <2 x double> <double 0.0, double 1.0>, ptr %dst 221add224c0Swanglei ret void 222add224c0Swanglei} 223add224c0Swanglei 224add224c0Swangleidefine void @buildvector_v16i8(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) nounwind { 225add224c0Swanglei; CHECK-LABEL: buildvector_v16i8: 226add224c0Swanglei; CHECK: # %bb.0: # %entry 227a5c90e48Swanglei; CHECK-NEXT: ld.b $t0, $sp, 64 228a5c90e48Swanglei; CHECK-NEXT: ld.b $t1, $sp, 56 229a5c90e48Swanglei; CHECK-NEXT: ld.b $t2, $sp, 48 230a5c90e48Swanglei; CHECK-NEXT: ld.b $t3, $sp, 40 231a5c90e48Swanglei; CHECK-NEXT: ld.b $t4, $sp, 32 232a5c90e48Swanglei; CHECK-NEXT: ld.b $t5, $sp, 24 233a5c90e48Swanglei; CHECK-NEXT: ld.b $t6, $sp, 16 234a5c90e48Swanglei; CHECK-NEXT: ld.b $t7, $sp, 8 235a5c90e48Swanglei; CHECK-NEXT: ld.b $t8, $sp, 0 236add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 0 237add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 1 238add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 2 239add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a4, 3 240add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a5, 4 241add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a6, 5 242add224c0Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $a7, 6 243a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t8, 7 244a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t7, 8 245a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t6, 9 246a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t5, 10 247a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t4, 11 248a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t3, 12 249a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t2, 13 250a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t1, 14 251a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.b $vr0, $t0, 15 252add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 253add224c0Swanglei; CHECK-NEXT: ret 254add224c0Swangleientry: 255add224c0Swanglei %ins0 = insertelement <16 x i8> undef, i8 %a0, i32 0 256add224c0Swanglei %ins1 = insertelement <16 x i8> %ins0, i8 %a1, i32 1 257add224c0Swanglei %ins2 = insertelement <16 x i8> %ins1, i8 %a2, i32 2 258add224c0Swanglei %ins3 = insertelement <16 x i8> %ins2, i8 %a3, i32 3 259add224c0Swanglei %ins4 = insertelement <16 x i8> %ins3, i8 %a4, i32 4 260add224c0Swanglei %ins5 = insertelement <16 x i8> %ins4, i8 %a5, i32 5 261add224c0Swanglei %ins6 = insertelement <16 x i8> %ins5, i8 %a6, i32 6 262add224c0Swanglei %ins7 = insertelement <16 x i8> %ins6, i8 %a7, i32 7 263add224c0Swanglei %ins8 = insertelement <16 x i8> %ins7, i8 %a8, i32 8 264add224c0Swanglei %ins9 = insertelement <16 x i8> %ins8, i8 %a9, i32 9 265add224c0Swanglei %ins10 = insertelement <16 x i8> %ins9, i8 %a10, i32 10 266add224c0Swanglei %ins11 = insertelement <16 x i8> %ins10, i8 %a11, i32 11 267add224c0Swanglei %ins12 = insertelement <16 x i8> %ins11, i8 %a12, i32 12 268add224c0Swanglei %ins13 = insertelement <16 x i8> %ins12, i8 %a13, i32 13 269add224c0Swanglei %ins14 = insertelement <16 x i8> %ins13, i8 %a14, i32 14 270add224c0Swanglei %ins15 = insertelement <16 x i8> %ins14, i8 %a15, i32 15 271add224c0Swanglei store <16 x i8> %ins15, ptr %dst 272add224c0Swanglei ret void 273add224c0Swanglei} 274add224c0Swanglei 275add224c0Swangleidefine void @buildvector_v8i16(ptr %dst, i16 %a0, i16 %a1, i16 %a2, i16 %a3, i16 %a4, i16 %a5, i16 %a6, i16 %a7) nounwind { 276add224c0Swanglei; CHECK-LABEL: buildvector_v8i16: 277add224c0Swanglei; CHECK: # %bb.0: # %entry 278a5c90e48Swanglei; CHECK-NEXT: ld.h $t0, $sp, 0 279add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a1, 0 280add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 1 281add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a3, 2 282add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a4, 3 283add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a5, 4 284add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a6, 5 285add224c0Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $a7, 6 286a5c90e48Swanglei; CHECK-NEXT: vinsgr2vr.h $vr0, $t0, 7 287add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 288add224c0Swanglei; CHECK-NEXT: ret 289add224c0Swangleientry: 290add224c0Swanglei %ins0 = insertelement <8 x i16> undef, i16 %a0, i32 0 291add224c0Swanglei %ins1 = insertelement <8 x i16> %ins0, i16 %a1, i32 1 292add224c0Swanglei %ins2 = insertelement <8 x i16> %ins1, i16 %a2, i32 2 293add224c0Swanglei %ins3 = insertelement <8 x i16> %ins2, i16 %a3, i32 3 294add224c0Swanglei %ins4 = insertelement <8 x i16> %ins3, i16 %a4, i32 4 295add224c0Swanglei %ins5 = insertelement <8 x i16> %ins4, i16 %a5, i32 5 296add224c0Swanglei %ins6 = insertelement <8 x i16> %ins5, i16 %a6, i32 6 297add224c0Swanglei %ins7 = insertelement <8 x i16> %ins6, i16 %a7, i32 7 298add224c0Swanglei store <8 x i16> %ins7, ptr %dst 299add224c0Swanglei ret void 300add224c0Swanglei} 301add224c0Swanglei 302add224c0Swangleidefine void @buildvector_v4i32(ptr %dst, i32 %a0, i32 %a1, i32 %a2, i32 %a3) nounwind { 303add224c0Swanglei; CHECK-LABEL: buildvector_v4i32: 304add224c0Swanglei; CHECK: # %bb.0: # %entry 305add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a1, 0 306add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a2, 1 307add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a3, 2 308add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a4, 3 309add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 310add224c0Swanglei; CHECK-NEXT: ret 311add224c0Swangleientry: 312add224c0Swanglei %ins0 = insertelement <4 x i32> undef, i32 %a0, i32 0 313add224c0Swanglei %ins1 = insertelement <4 x i32> %ins0, i32 %a1, i32 1 314add224c0Swanglei %ins2 = insertelement <4 x i32> %ins1, i32 %a2, i32 2 315add224c0Swanglei %ins3 = insertelement <4 x i32> %ins2, i32 %a3, i32 3 316add224c0Swanglei store <4 x i32> %ins3, ptr %dst 317add224c0Swanglei ret void 318add224c0Swanglei} 319add224c0Swanglei 320add224c0Swangleidefine void @buildvector_v2i64(ptr %dst, i64 %a0, i64 %a1) nounwind { 321add224c0Swanglei; CHECK-LABEL: buildvector_v2i64: 322add224c0Swanglei; CHECK: # %bb.0: # %entry 323add224c0Swanglei; CHECK-NEXT: vinsgr2vr.d $vr0, $a1, 0 324add224c0Swanglei; CHECK-NEXT: vinsgr2vr.d $vr0, $a2, 1 325add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 326add224c0Swanglei; CHECK-NEXT: ret 327add224c0Swangleientry: 328add224c0Swanglei %ins0 = insertelement <2 x i64> undef, i64 %a0, i32 0 329add224c0Swanglei %ins1 = insertelement <2 x i64> %ins0, i64 %a1, i32 1 330add224c0Swanglei store <2 x i64> %ins1, ptr %dst 331add224c0Swanglei ret void 332add224c0Swanglei} 333add224c0Swanglei 334add224c0Swangleidefine void @buildvector_v4f32(ptr %dst, float %a0, float %a1, float %a2, float %a3) nounwind { 335add224c0Swanglei; CHECK-LABEL: buildvector_v4f32: 336add224c0Swanglei; CHECK: # %bb.0: # %entry 337add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa0 338add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a1, 0 339add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa1 340add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a1, 1 341add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa2 342add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a1, 2 343add224c0Swanglei; CHECK-NEXT: movfr2gr.s $a1, $fa3 344add224c0Swanglei; CHECK-NEXT: vinsgr2vr.w $vr0, $a1, 3 345add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 346add224c0Swanglei; CHECK-NEXT: ret 347add224c0Swangleientry: 348add224c0Swanglei %ins0 = insertelement <4 x float> undef, float %a0, i32 0 349add224c0Swanglei %ins1 = insertelement <4 x float> %ins0, float %a1, i32 1 350add224c0Swanglei %ins2 = insertelement <4 x float> %ins1, float %a2, i32 2 351add224c0Swanglei %ins3 = insertelement <4 x float> %ins2, float %a3, i32 3 352add224c0Swanglei store <4 x float> %ins3, ptr %dst 353add224c0Swanglei ret void 354add224c0Swanglei} 355add224c0Swanglei 356add224c0Swangleidefine void @buildvector_v2f64(ptr %dst, double %a0, double %a1) nounwind { 357add224c0Swanglei; CHECK-LABEL: buildvector_v2f64: 358add224c0Swanglei; CHECK: # %bb.0: # %entry 359add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa0 360add224c0Swanglei; CHECK-NEXT: vinsgr2vr.d $vr0, $a1, 0 361add224c0Swanglei; CHECK-NEXT: movfr2gr.d $a1, $fa1 362add224c0Swanglei; CHECK-NEXT: vinsgr2vr.d $vr0, $a1, 1 363add224c0Swanglei; CHECK-NEXT: vst $vr0, $a0, 0 364add224c0Swanglei; CHECK-NEXT: ret 365add224c0Swangleientry: 366add224c0Swanglei %ins0 = insertelement <2 x double> undef, double %a0, i32 0 367add224c0Swanglei %ins1 = insertelement <2 x double> %ins0, double %a1, i32 1 368add224c0Swanglei store <2 x double> %ins1, ptr %dst 369add224c0Swanglei ret void 370add224c0Swanglei} 37166a3e4faSwanglei 37266a3e4faSwanglei;; If `isShuffleMaskLegal` returns true, it will lead to an infinite loop. 37366a3e4faSwangleidefine void @extract1_i32_zext_insert0_i64_undef(ptr %src, ptr %dst) nounwind { 37466a3e4faSwanglei; CHECK-LABEL: extract1_i32_zext_insert0_i64_undef: 37566a3e4faSwanglei; CHECK: # %bb.0: 37666a3e4faSwanglei; CHECK-NEXT: vld $vr0, $a0, 0 37766a3e4faSwanglei; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1 37866a3e4faSwanglei; CHECK-NEXT: bstrpick.d $a0, $a0, 31, 0 379*dedf0149Stangaac; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0 38066a3e4faSwanglei; CHECK-NEXT: vst $vr0, $a1, 0 38166a3e4faSwanglei; CHECK-NEXT: ret 38266a3e4faSwanglei %v = load volatile <4 x i32>, ptr %src 38366a3e4faSwanglei %e = extractelement <4 x i32> %v, i32 1 38466a3e4faSwanglei %z = zext i32 %e to i64 38566a3e4faSwanglei %r = insertelement <2 x i64> undef, i64 %z, i32 0 38666a3e4faSwanglei store <2 x i64> %r, ptr %dst 38766a3e4faSwanglei ret void 38866a3e4faSwanglei} 389