@@ -21,12 +21,12 @@ entry:
2121
2222define <4 x float > @test_more_than_one_load (<2 x float > %a , <2 x float > %b ) {
2323entry:
24- %alloca = alloca < 4 x float >
24+ %alloca = alloca [ 4 x float ]
2525
26- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
26+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
2727 store <2 x float > %a , ptr %ptr0
2828
29- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
29+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
3030 store <2 x float > %b , ptr %ptr1
3131
3232 %result1 = load <4 x float >, ptr %alloca
@@ -38,19 +38,19 @@ entry:
3838
3939define void @test_no_load (<4 x float > %a ) {
4040entry:
41- %alloca = alloca < 4 x float >
41+ %alloca = alloca [ 4 x float ]
4242 store <4 x float > %a , ptr %alloca
4343 ret void
4444}
4545
4646define i32 @test_load_not_fixed_vector (<2 x float > %a , <2 x float > %b ) {
4747entry:
48- %alloca = alloca < 4 x float >
48+ %alloca = alloca [ 4 x float ]
4949
50- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
50+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
5151 store <2 x float > %a , ptr %ptr0
5252
53- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
53+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
5454 store <2 x float > %b , ptr %ptr1
5555
5656 %result = load i32 , ptr %alloca
@@ -59,12 +59,12 @@ entry:
5959
6060define <3 x float > @test_load_not_covering_alloca (<2 x float > %a , <2 x float > %b ) {
6161entry:
62- %alloca = alloca < 4 x float >
62+ %alloca = alloca [ 4 x float ]
6363
64- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
64+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
6565 store <2 x float > %a , ptr %ptr0
6666
67- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
67+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
6868 store <2 x float > %b , ptr %ptr1
6969
7070 %result = load <3 x float >, ptr %ptr0
7373
7474define <4 x float > @test_store_not_fixed_vector (<vscale x 2 x float > %a ) {
7575entry:
76- %alloca = alloca < 4 x float >
76+ %alloca = alloca [ 4 x float ]
7777
78- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
78+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
7979 %fixed = extractelement <vscale x 2 x float > %a , i32 0
8080 store float %fixed , ptr %ptr0
8181
@@ -86,23 +86,23 @@ entry:
8686
8787define <4 x float > @test_no_stores () {
8888entry:
89- %alloca = alloca < 4 x float >
89+ %alloca = alloca [ 4 x float ]
9090
9191 %result = load <4 x float >, ptr %alloca
9292 ret <4 x float > %result
9393}
9494
9595define <4 x float > @test_stores_overlapping (<2 x float > %a , <2 x float > %b , <2 x float > %c ) {
9696entry:
97- %alloca = alloca < 4 x float >
97+ %alloca = alloca [ 4 x float ]
9898
99- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
99+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
100100 store <2 x float > %a , ptr %ptr0
101101
102- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 1
102+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 1
103103 store <2 x float > %b , ptr %ptr1
104104
105- %ptr2 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
105+ %ptr2 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
106106 store <2 x float > %c , ptr %ptr2
107107
108108 %result = load <4 x float >, ptr %alloca
@@ -111,9 +111,9 @@ entry:
111111
112112define <4 x float > @test_stores_not_covering_alloca (<2 x float > %a ) {
113113entry:
114- %alloca = alloca < 4 x float >
114+ %alloca = alloca [ 4 x float ]
115115
116- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
116+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
117117 store <2 x float > %a , ptr %ptr0
118118
119119 %result = load <4 x float >, ptr %alloca
@@ -122,15 +122,15 @@ entry:
122122
123123define <4 x float > @test_stores_not_same_basic_block (<2 x float > %a , <2 x float > %b , i1 %cond ) {
124124entry:
125- %alloca = alloca < 4 x float >
125+ %alloca = alloca [ 4 x float ]
126126
127- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
127+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
128128 store <2 x float > %a , ptr %ptr0
129129
130130 br i1 %cond , label %then , label %else
131131
132132then:
133- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
133+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
134134 store <2 x float > %b , ptr %ptr1
135135 br label %merge
136136
@@ -144,36 +144,79 @@ merge:
144144
145145define <4 x float > @test_load_before_stores (<2 x float > %a , <2 x float > %b ) {
146146entry:
147- %alloca = alloca < 4 x float >
147+ %alloca = alloca [ 4 x float ]
148148
149- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
149+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
150150 store <2 x float > %a , ptr %ptr0
151151
152152 %intermediate = load <4 x float >, ptr %alloca
153153
154- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
154+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
155155 store <2 x float > %b , ptr %ptr1
156156
157157 ret <4 x float > %intermediate
158158}
159159
160160define <4 x float > @test_other_instructions (<2 x float > %a , <2 x float > %b ) {
161161entry:
162- %alloca = alloca < 4 x float >
162+ %alloca = alloca [ 4 x float ]
163163
164164 ; Store first vector
165- %ptr0 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 0
165+ %ptr0 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 0
166166 store <2 x float > %a , ptr %ptr0
167167
168168 ; Other instruction (memset) that's not a simple load/store
169169 call void @llvm.memset.p0.i64 (ptr %alloca , i8 0 , i64 8 , i1 false )
170170
171171 ; Store second vector
172- %ptr1 = getelementptr inbounds < 4 x float > , ptr %alloca , i32 0 , i32 2
172+ %ptr1 = getelementptr inbounds [ 4 x float ] , ptr %alloca , i32 0 , i32 2
173173 store <2 x float > %b , ptr %ptr1
174174
175175 %result = load <4 x float >, ptr %alloca
176176 ret <4 x float > %result
177177}
178178
179+ define <4 x float > @volatile_stores (<2 x i32 > %a , <2 x i32 > %b ) {
180+ entry:
181+ %alloca = alloca [4 x float ]
182+
183+ %ptr0 = getelementptr inbounds [4 x float ], ptr %alloca , i32 0 , i32 0
184+ store volatile <2 x i32 > %a , ptr %ptr0
185+
186+ %ptr1 = getelementptr inbounds [4 x float ], ptr %alloca , i32 0 , i32 2
187+ store volatile <2 x i32 > %b , ptr %ptr1
188+
189+ %result = load <4 x float >, ptr %alloca
190+ ret <4 x float > %result
191+ }
192+
193+ define <4 x float > @volatile_loads (<2 x i32 > %a , <2 x i32 > %b ) {
194+ entry:
195+ %alloca = alloca [4 x float ]
196+
197+ %ptr0 = getelementptr inbounds [4 x float ], ptr %alloca , i32 0 , i32 0
198+ store <2 x i32 > %a , ptr %ptr0
199+
200+ %ptr1 = getelementptr inbounds [4 x float ], ptr %alloca , i32 0 , i32 2
201+ store <2 x i32 > %b , ptr %ptr1
202+
203+ %result = load volatile <4 x float >, ptr %alloca
204+ ret <4 x float > %result
205+ }
206+
207+ define <4 x i15 > @non_byte_aligned_alloca (<2 x i15 > %a , <2 x i15 > %b ) {
208+ entry:
209+ %alloca = alloca [4 x i15 ]
210+
211+ %ptr0 = getelementptr inbounds [4 x i15 ], ptr %alloca , i32 0 , i32 0
212+ store <2 x i15 > %a , ptr %ptr0
213+
214+ %ptr1 = getelementptr inbounds [4 x i15 ], ptr %alloca , i32 0 , i32 2
215+ store <2 x i15 > %b , ptr %ptr1
216+
217+ %result = load <4 x i15 >, ptr %alloca
218+ ret <4 x i15 > %result
219+
220+ }
221+
179222declare void @llvm.memset.p0.i64 (ptr nocapture writeonly , i8 , i64 , i1 immarg)
0 commit comments