@@ -294,6 +294,31 @@ define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @vpload_factor4(ptr %ptr) {
294294 ret {<4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 >} %res3
295295}
296296
297+ ; TODO: Add more tests for vp.load/store + (de)interleave intrinsics with fixed vectors.
298+ define {<2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 >} @vpload_factor4_intrinsics (ptr %ptr ) {
299+ ; CHECK-LABEL: vpload_factor4_intrinsics:
300+ ; CHECK: # %bb.0:
301+ ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
302+ ; CHECK-NEXT: vlseg4e32.v v8, (a0)
303+ ; CHECK-NEXT: ret
304+ %wide.masked.load = call <8 x i32 > @llvm.vp.load.v8i32.p0 (ptr %ptr , <8 x i1 > splat (i1 true ), i32 8 )
305+ %d0 = call { <4 x i32 >, <4 x i32 > } @llvm.vector.deinterleave2.v8i32 (<8 x i32 > %wide.masked.load )
306+ %d0.0 = extractvalue { <4 x i32 >, <4 x i32 > } %d0 , 0
307+ %d0.1 = extractvalue { <4 x i32 >, <4 x i32 > } %d0 , 1
308+ %d1 = call { <2 x i32 >, <2 x i32 > } @llvm.vector.deinterleave2.v4i32 (<4 x i32 > %d0.0 )
309+ %t0 = extractvalue { <2 x i32 >, <2 x i32 > } %d1 , 0
310+ %t2 = extractvalue { <2 x i32 >, <2 x i32 > } %d1 , 1
311+ %d2 = call { <2 x i32 >, <2 x i32 > } @llvm.vector.deinterleave2.v4i32 (<4 x i32 > %d0.1 )
312+ %t1 = extractvalue { <2 x i32 >, <2 x i32 > } %d2 , 0
313+ %t3 = extractvalue { <2 x i32 >, <2 x i32 > } %d2 , 1
314+
315+ %res0 = insertvalue { <2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 > } poison, <2 x i32 > %t0 , 0
316+ %res1 = insertvalue { <2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 > } %res0 , <2 x i32 > %t1 , 1
317+ %res2 = insertvalue { <2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 > } %res1 , <2 x i32 > %t2 , 2
318+ %res3 = insertvalue { <2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 > } %res2 , <2 x i32 > %t3 , 3
319+ ret { <2 x i32 >, <2 x i32 >, <2 x i32 >, <2 x i32 > } %res3
320+ }
321+
297322define {<4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 >, <4 x i32 >} @vpload_factor5 (ptr %ptr ) {
298323; CHECK-LABEL: vpload_factor5:
299324; CHECK: # %bb.0:
@@ -402,8 +427,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
402427; RV32-NEXT: li a2, 32
403428; RV32-NEXT: lui a3, 12
404429; RV32-NEXT: lui a6, 12291
405- ; RV32-NEXT: lui a7, %hi(.LCPI19_0 )
406- ; RV32-NEXT: addi a7, a7, %lo(.LCPI19_0 )
430+ ; RV32-NEXT: lui a7, %hi(.LCPI20_0 )
431+ ; RV32-NEXT: addi a7, a7, %lo(.LCPI20_0 )
407432; RV32-NEXT: vsetvli zero, a2, e32, m8, ta, ma
408433; RV32-NEXT: vle32.v v24, (a5)
409434; RV32-NEXT: vmv.s.x v0, a3
@@ -488,12 +513,12 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
488513; RV32-NEXT: addi a1, a1, 16
489514; RV32-NEXT: vs4r.v v8, (a1) # vscale x 32-byte Folded Spill
490515; RV32-NEXT: lui a7, 49164
491- ; RV32-NEXT: lui a1, %hi(.LCPI19_1 )
492- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_1 )
516+ ; RV32-NEXT: lui a1, %hi(.LCPI20_1 )
517+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_1 )
493518; RV32-NEXT: lui t2, 3
494519; RV32-NEXT: lui t1, 196656
495- ; RV32-NEXT: lui a4, %hi(.LCPI19_3 )
496- ; RV32-NEXT: addi a4, a4, %lo(.LCPI19_3 )
520+ ; RV32-NEXT: lui a4, %hi(.LCPI20_3 )
521+ ; RV32-NEXT: addi a4, a4, %lo(.LCPI20_3 )
497522; RV32-NEXT: lui t0, 786624
498523; RV32-NEXT: li a5, 48
499524; RV32-NEXT: lui a6, 768
@@ -672,8 +697,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
672697; RV32-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
673698; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, ma
674699; RV32-NEXT: vrgatherei16.vv v24, v8, v2
675- ; RV32-NEXT: lui a1, %hi(.LCPI19_2 )
676- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_2 )
700+ ; RV32-NEXT: lui a1, %hi(.LCPI20_2 )
701+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_2 )
677702; RV32-NEXT: lui a3, 3073
678703; RV32-NEXT: addi a3, a3, -1024
679704; RV32-NEXT: vmv.s.x v0, a3
@@ -737,16 +762,16 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
737762; RV32-NEXT: vrgatherei16.vv v28, v8, v3
738763; RV32-NEXT: vsetivli zero, 10, e32, m4, tu, ma
739764; RV32-NEXT: vmv.v.v v28, v24
740- ; RV32-NEXT: lui a1, %hi(.LCPI19_4 )
741- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_4 )
742- ; RV32-NEXT: lui a2, %hi(.LCPI19_5 )
743- ; RV32-NEXT: addi a2, a2, %lo(.LCPI19_5 )
765+ ; RV32-NEXT: lui a1, %hi(.LCPI20_4 )
766+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_4 )
767+ ; RV32-NEXT: lui a2, %hi(.LCPI20_5 )
768+ ; RV32-NEXT: addi a2, a2, %lo(.LCPI20_5 )
744769; RV32-NEXT: vsetivli zero, 16, e16, m2, ta, ma
745770; RV32-NEXT: vle16.v v24, (a2)
746771; RV32-NEXT: vsetivli zero, 8, e16, m1, ta, ma
747772; RV32-NEXT: vle16.v v8, (a1)
748- ; RV32-NEXT: lui a1, %hi(.LCPI19_7 )
749- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_7 )
773+ ; RV32-NEXT: lui a1, %hi(.LCPI20_7 )
774+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_7 )
750775; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
751776; RV32-NEXT: vle16.v v10, (a1)
752777; RV32-NEXT: csrr a1, vlenb
@@ -774,14 +799,14 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
774799; RV32-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
775800; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
776801; RV32-NEXT: vrgatherei16.vv v16, v0, v10
777- ; RV32-NEXT: lui a1, %hi(.LCPI19_6 )
778- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_6 )
779- ; RV32-NEXT: lui a2, %hi(.LCPI19_8 )
780- ; RV32-NEXT: addi a2, a2, %lo(.LCPI19_8 )
802+ ; RV32-NEXT: lui a1, %hi(.LCPI20_6 )
803+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_6 )
804+ ; RV32-NEXT: lui a2, %hi(.LCPI20_8 )
805+ ; RV32-NEXT: addi a2, a2, %lo(.LCPI20_8 )
781806; RV32-NEXT: vsetivli zero, 8, e16, m1, ta, ma
782807; RV32-NEXT: vle16.v v4, (a1)
783- ; RV32-NEXT: lui a1, %hi(.LCPI19_9 )
784- ; RV32-NEXT: addi a1, a1, %lo(.LCPI19_9 )
808+ ; RV32-NEXT: lui a1, %hi(.LCPI20_9 )
809+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI20_9 )
785810; RV32-NEXT: vsetivli zero, 16, e16, m2, ta, ma
786811; RV32-NEXT: vle16.v v6, (a1)
787812; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
@@ -868,8 +893,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
868893; RV64-NEXT: li a4, 128
869894; RV64-NEXT: lui a1, 1
870895; RV64-NEXT: vle64.v v8, (a3)
871- ; RV64-NEXT: lui a3, %hi(.LCPI19_0 )
872- ; RV64-NEXT: addi a3, a3, %lo(.LCPI19_0 )
896+ ; RV64-NEXT: lui a3, %hi(.LCPI20_0 )
897+ ; RV64-NEXT: addi a3, a3, %lo(.LCPI20_0 )
873898; RV64-NEXT: vmv.s.x v0, a4
874899; RV64-NEXT: csrr a4, vlenb
875900; RV64-NEXT: li a5, 61
@@ -1057,8 +1082,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
10571082; RV64-NEXT: vl8r.v v16, (a2) # vscale x 64-byte Folded Reload
10581083; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, mu
10591084; RV64-NEXT: vslideup.vi v12, v16, 1, v0.t
1060- ; RV64-NEXT: lui a2, %hi(.LCPI19_1 )
1061- ; RV64-NEXT: addi a2, a2, %lo(.LCPI19_1 )
1085+ ; RV64-NEXT: lui a2, %hi(.LCPI20_1 )
1086+ ; RV64-NEXT: addi a2, a2, %lo(.LCPI20_1 )
10621087; RV64-NEXT: li a3, 192
10631088; RV64-NEXT: vsetivli zero, 16, e16, m2, ta, ma
10641089; RV64-NEXT: vle16.v v6, (a2)
@@ -1092,8 +1117,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
10921117; RV64-NEXT: vrgatherei16.vv v24, v16, v6
10931118; RV64-NEXT: addi a2, sp, 16
10941119; RV64-NEXT: vs8r.v v24, (a2) # vscale x 64-byte Folded Spill
1095- ; RV64-NEXT: lui a2, %hi(.LCPI19_2 )
1096- ; RV64-NEXT: addi a2, a2, %lo(.LCPI19_2 )
1120+ ; RV64-NEXT: lui a2, %hi(.LCPI20_2 )
1121+ ; RV64-NEXT: addi a2, a2, %lo(.LCPI20_2 )
10971122; RV64-NEXT: li a3, 1040
10981123; RV64-NEXT: vmv.s.x v0, a3
10991124; RV64-NEXT: addi a1, a1, -2016
@@ -1177,12 +1202,12 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
11771202; RV64-NEXT: add a1, sp, a1
11781203; RV64-NEXT: addi a1, a1, 16
11791204; RV64-NEXT: vs4r.v v8, (a1) # vscale x 32-byte Folded Spill
1180- ; RV64-NEXT: lui a1, %hi(.LCPI19_3 )
1181- ; RV64-NEXT: addi a1, a1, %lo(.LCPI19_3 )
1205+ ; RV64-NEXT: lui a1, %hi(.LCPI20_3 )
1206+ ; RV64-NEXT: addi a1, a1, %lo(.LCPI20_3 )
11821207; RV64-NEXT: vsetivli zero, 16, e16, m2, ta, ma
11831208; RV64-NEXT: vle16.v v20, (a1)
1184- ; RV64-NEXT: lui a1, %hi(.LCPI19_4 )
1185- ; RV64-NEXT: addi a1, a1, %lo(.LCPI19_4 )
1209+ ; RV64-NEXT: lui a1, %hi(.LCPI20_4 )
1210+ ; RV64-NEXT: addi a1, a1, %lo(.LCPI20_4 )
11861211; RV64-NEXT: vle16.v v8, (a1)
11871212; RV64-NEXT: csrr a1, vlenb
11881213; RV64-NEXT: li a2, 77
@@ -1233,8 +1258,8 @@ define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_
12331258; RV64-NEXT: vl2r.v v8, (a1) # vscale x 16-byte Folded Reload
12341259; RV64-NEXT: vsetivli zero, 16, e64, m8, ta, ma
12351260; RV64-NEXT: vrgatherei16.vv v0, v16, v8
1236- ; RV64-NEXT: lui a1, %hi(.LCPI19_5 )
1237- ; RV64-NEXT: addi a1, a1, %lo(.LCPI19_5 )
1261+ ; RV64-NEXT: lui a1, %hi(.LCPI20_5 )
1262+ ; RV64-NEXT: addi a1, a1, %lo(.LCPI20_5 )
12381263; RV64-NEXT: vle16.v v20, (a1)
12391264; RV64-NEXT: csrr a1, vlenb
12401265; RV64-NEXT: li a2, 61
@@ -1678,8 +1703,8 @@ define {<4 x i32>, <4 x i32>, <4 x i32>} @invalid_vp_mask(ptr %ptr) {
16781703; RV32-NEXT: vle32.v v12, (a0), v0.t
16791704; RV32-NEXT: li a0, 36
16801705; RV32-NEXT: vmv.s.x v20, a1
1681- ; RV32-NEXT: lui a1, %hi(.LCPI44_0 )
1682- ; RV32-NEXT: addi a1, a1, %lo(.LCPI44_0 )
1706+ ; RV32-NEXT: lui a1, %hi(.LCPI45_0 )
1707+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI45_0 )
16831708; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
16841709; RV32-NEXT: vle16.v v21, (a1)
16851710; RV32-NEXT: vcompress.vm v8, v12, v11
@@ -1754,8 +1779,8 @@ define {<4 x i32>, <4 x i32>, <4 x i32>} @invalid_vp_evl(ptr %ptr) {
17541779; RV32-NEXT: vmv.s.x v10, a0
17551780; RV32-NEXT: li a0, 146
17561781; RV32-NEXT: vmv.s.x v11, a0
1757- ; RV32-NEXT: lui a0, %hi(.LCPI45_0 )
1758- ; RV32-NEXT: addi a0, a0, %lo(.LCPI45_0 )
1782+ ; RV32-NEXT: lui a0, %hi(.LCPI46_0 )
1783+ ; RV32-NEXT: addi a0, a0, %lo(.LCPI46_0 )
17591784; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
17601785; RV32-NEXT: vle16.v v20, (a0)
17611786; RV32-NEXT: li a0, 36
0 commit comments