@@ -7,12 +7,57 @@ define void @combine_zero_stores_2xi8(ptr %p) {
7
7
; CHECK: # %bb.0:
8
8
; CHECK-NEXT: sh zero, 0(a0)
9
9
; CHECK-NEXT: ret
10
- store i8 zeroinitializer , ptr %p , align 4
10
+ store i8 zeroinitializer , ptr %p , align 2
11
11
%gep = getelementptr i8 , ptr %p , i64 1
12
12
store i8 zeroinitializer , ptr %gep
13
13
ret void
14
14
}
15
15
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
+
16
61
define void @combine_zero_stores_2xi16 (ptr %p ) {
17
62
; CHECK-LABEL: combine_zero_stores_2xi16:
18
63
; CHECK: # %bb.0:
@@ -24,6 +69,63 @@ define void @combine_zero_stores_2xi16(ptr %p) {
24
69
ret void
25
70
}
26
71
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
+
27
129
define void @combine_zero_stores_2xi32 (ptr %p ) {
28
130
; RV32-LABEL: combine_zero_stores_2xi32:
29
131
; RV32: # %bb.0:
@@ -42,6 +144,62 @@ define void @combine_zero_stores_2xi32(ptr %p) {
42
144
ret void
43
145
}
44
146
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
+
45
203
define void @combine_zero_stores_2xi32_unaligned (ptr %p ) {
46
204
; RV32-LABEL: combine_zero_stores_2xi32_unaligned:
47
205
; RV32: # %bb.0:
0 commit comments