Skip to content

Commit 6c59f39

Browse files
committed
[RISCV] Expand testing for store merging of multiple constant stores
1 parent 9c3299b commit 6c59f39

File tree

1 file changed

+159
-1
lines changed

1 file changed

+159
-1
lines changed

llvm/test/CodeGen/RISCV/rvv/combine-store.ll

Lines changed: 159 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,57 @@ define void @combine_zero_stores_2xi8(ptr %p) {
77
; CHECK: # %bb.0:
88
; CHECK-NEXT: sh zero, 0(a0)
99
; CHECK-NEXT: ret
10-
store i8 zeroinitializer, ptr %p, align 4
10+
store i8 zeroinitializer, ptr %p, align 2
1111
%gep = getelementptr i8, ptr %p, i64 1
1212
store i8 zeroinitializer, ptr %gep
1313
ret void
1414
}
1515

16+
define void @combine_zero_stores_4xi8(ptr %p) {
17+
; CHECK-LABEL: combine_zero_stores_4xi8:
18+
; CHECK: # %bb.0:
19+
; CHECK-NEXT: sw zero, 0(a0)
20+
; CHECK-NEXT: ret
21+
store i8 zeroinitializer, ptr %p, align 4
22+
%gep1 = getelementptr i8, ptr %p, i64 1
23+
store i8 zeroinitializer, ptr %gep1
24+
%gep2 = getelementptr i8, ptr %p, i64 2
25+
store i8 zeroinitializer, ptr %gep2
26+
%gep3 = getelementptr i8, ptr %p, i64 3
27+
store i8 zeroinitializer, ptr %gep3
28+
ret void
29+
}
30+
31+
define void @combine_zero_stores_8xi8(ptr %p) {
32+
; RV32-LABEL: combine_zero_stores_8xi8:
33+
; RV32: # %bb.0:
34+
; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
35+
; RV32-NEXT: vmv.v.i v8, 0
36+
; RV32-NEXT: vse32.v v8, (a0)
37+
; RV32-NEXT: ret
38+
;
39+
; RV64-LABEL: combine_zero_stores_8xi8:
40+
; RV64: # %bb.0:
41+
; RV64-NEXT: sd zero, 0(a0)
42+
; RV64-NEXT: ret
43+
store i8 zeroinitializer, ptr %p, align 8
44+
%gep1 = getelementptr i8, ptr %p, i64 1
45+
store i8 zeroinitializer, ptr %gep1
46+
%gep2 = getelementptr i8, ptr %p, i64 2
47+
store i8 zeroinitializer, ptr %gep2
48+
%gep3 = getelementptr i8, ptr %p, i64 3
49+
store i8 zeroinitializer, ptr %gep3
50+
%gep4 = getelementptr i8, ptr %p, i64 4
51+
store i8 zeroinitializer, ptr %gep4, align 8
52+
%gep5 = getelementptr i8, ptr %p, i64 5
53+
store i8 zeroinitializer, ptr %gep5
54+
%gep6 = getelementptr i8, ptr %p, i64 6
55+
store i8 zeroinitializer, ptr %gep6
56+
%gep7 = getelementptr i8, ptr %p, i64 7
57+
store i8 zeroinitializer, ptr %gep7
58+
ret void
59+
}
60+
1661
define void @combine_zero_stores_2xi16(ptr %p) {
1762
; CHECK-LABEL: combine_zero_stores_2xi16:
1863
; CHECK: # %bb.0:
@@ -24,6 +69,63 @@ define void @combine_zero_stores_2xi16(ptr %p) {
2469
ret void
2570
}
2671

72+
define void @combine_zero_stores_4xi16(ptr %p) {
73+
; RV32-LABEL: combine_zero_stores_4xi16:
74+
; RV32: # %bb.0:
75+
; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
76+
; RV32-NEXT: vmv.v.i v8, 0
77+
; RV32-NEXT: vse32.v v8, (a0)
78+
; RV32-NEXT: ret
79+
;
80+
; RV64-LABEL: combine_zero_stores_4xi16:
81+
; RV64: # %bb.0:
82+
; RV64-NEXT: sd zero, 0(a0)
83+
; RV64-NEXT: ret
84+
store i16 zeroinitializer, ptr %p, align 8
85+
%gep1 = getelementptr i16, ptr %p, i64 1
86+
store i16 zeroinitializer, ptr %gep1
87+
%gep2 = getelementptr i16, ptr %p, i64 2
88+
store i16 zeroinitializer, ptr %gep2, align 4
89+
%gep3 = getelementptr i16, ptr %p, i64 3
90+
store i16 zeroinitializer, ptr %gep3
91+
ret void
92+
}
93+
94+
define void @combine_zero_stores_8xi16(ptr %p) {
95+
; RV32-LABEL: combine_zero_stores_8xi16:
96+
; RV32: # %bb.0:
97+
; RV32-NEXT: sw zero, 0(a0)
98+
; RV32-NEXT: sh zero, 4(a0)
99+
; RV32-NEXT: sh zero, 6(a0)
100+
; RV32-NEXT: sw zero, 8(a0)
101+
; RV32-NEXT: sh zero, 12(a0)
102+
; RV32-NEXT: sh zero, 14(a0)
103+
; RV32-NEXT: ret
104+
;
105+
; RV64-LABEL: combine_zero_stores_8xi16:
106+
; RV64: # %bb.0:
107+
; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
108+
; RV64-NEXT: vmv.v.i v8, 0
109+
; RV64-NEXT: vse64.v v8, (a0)
110+
; RV64-NEXT: ret
111+
store i16 zeroinitializer, ptr %p, align 16
112+
%gep1 = getelementptr i16, ptr %p, i64 1
113+
store i16 zeroinitializer, ptr %gep1
114+
%gep2 = getelementptr i16, ptr %p, i64 2
115+
store i16 zeroinitializer, ptr %gep2
116+
%gep3 = getelementptr i16, ptr %p, i64 3
117+
store i16 zeroinitializer, ptr %gep3
118+
%gep4 = getelementptr i16, ptr %p, i64 4
119+
store i16 zeroinitializer, ptr %gep4, align 8
120+
%gep5 = getelementptr i16, ptr %p, i64 5
121+
store i16 zeroinitializer, ptr %gep5
122+
%gep6 = getelementptr i16, ptr %p, i64 6
123+
store i16 zeroinitializer, ptr %gep6
124+
%gep7 = getelementptr i16, ptr %p, i64 7
125+
store i16 zeroinitializer, ptr %gep7
126+
ret void
127+
}
128+
27129
define void @combine_zero_stores_2xi32(ptr %p) {
28130
; RV32-LABEL: combine_zero_stores_2xi32:
29131
; RV32: # %bb.0:
@@ -42,6 +144,62 @@ define void @combine_zero_stores_2xi32(ptr %p) {
42144
ret void
43145
}
44146

147+
define void @combine_zero_stores_4xi32(ptr %p) {
148+
; RV32-LABEL: combine_zero_stores_4xi32:
149+
; RV32: # %bb.0:
150+
; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
151+
; RV32-NEXT: vmv.v.i v8, 0
152+
; RV32-NEXT: vse32.v v8, (a0)
153+
; RV32-NEXT: ret
154+
;
155+
; RV64-LABEL: combine_zero_stores_4xi32:
156+
; RV64: # %bb.0:
157+
; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma
158+
; RV64-NEXT: vmv.v.i v8, 0
159+
; RV64-NEXT: vse64.v v8, (a0)
160+
; RV64-NEXT: ret
161+
store i32 zeroinitializer, ptr %p, align 16
162+
%gep1 = getelementptr i32, ptr %p, i64 1
163+
store i32 zeroinitializer, ptr %gep1
164+
%gep2 = getelementptr i32, ptr %p, i64 2
165+
store i32 zeroinitializer, ptr %gep2, align 8
166+
%gep3 = getelementptr i32, ptr %p, i64 3
167+
store i32 zeroinitializer, ptr %gep3
168+
ret void
169+
}
170+
171+
define void @combine_zero_stores_8xi32(ptr %p) {
172+
; RV32-LABEL: combine_zero_stores_8xi32:
173+
; RV32: # %bb.0:
174+
; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
175+
; RV32-NEXT: vmv.v.i v8, 0
176+
; RV32-NEXT: vse32.v v8, (a0)
177+
; RV32-NEXT: ret
178+
;
179+
; RV64-LABEL: combine_zero_stores_8xi32:
180+
; RV64: # %bb.0:
181+
; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma
182+
; RV64-NEXT: vmv.v.i v8, 0
183+
; RV64-NEXT: vse64.v v8, (a0)
184+
; RV64-NEXT: ret
185+
store i32 zeroinitializer, ptr %p, align 32
186+
%gep1 = getelementptr i32, ptr %p, i64 1
187+
store i32 zeroinitializer, ptr %gep1
188+
%gep2 = getelementptr i32, ptr %p, i64 2
189+
store i32 zeroinitializer, ptr %gep2, align 8
190+
%gep3 = getelementptr i32, ptr %p, i64 3
191+
store i32 zeroinitializer, ptr %gep3
192+
%gep4 = getelementptr i32, ptr %p, i64 4
193+
store i32 zeroinitializer, ptr %gep4, align 8
194+
%gep5 = getelementptr i32, ptr %p, i64 5
195+
store i32 zeroinitializer, ptr %gep5
196+
%gep6 = getelementptr i32, ptr %p, i64 6
197+
store i32 zeroinitializer, ptr %gep6, align 8
198+
%gep7 = getelementptr i32, ptr %p, i64 7
199+
store i32 zeroinitializer, ptr %gep7
200+
ret void
201+
}
202+
45203
define void @combine_zero_stores_2xi32_unaligned(ptr %p) {
46204
; RV32-LABEL: combine_zero_stores_2xi32_unaligned:
47205
; RV32: # %bb.0:

0 commit comments

Comments
 (0)