@@ -10,9 +10,9 @@ define void @dead_unstrided_store_non_matrix_load(ptr noalias %src, ptr noalias
1010; CHECK-NEXT: ret void
1111;
1212entry:
13- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
13+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
1414 %l = load double , ptr %src
15- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
15+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
1616 ret void
1717}
1818
@@ -28,9 +28,9 @@ define void @live_unstrided_store_non_matrix_load(ptr noalias %src, ptr noalias
2828;
2929entry:
3030 %l.1 = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
31- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
31+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
3232 %l.2 = load double , ptr %dst
33- call void @llvm.matrix.column.major.store (<8 x double > %l.1 , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
33+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l.1 , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
3434 ret void
3535}
3636
@@ -44,9 +44,9 @@ define void @dead_strided_store(ptr noalias %src, ptr noalias %dst) {
4444; CHECK-NEXT: ret void
4545;
4646entry:
47- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
47+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
4848 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 200 , i1 false , i32 4 , i32 2 )
49- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
49+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
5050 ret void
5151}
5252
@@ -60,9 +60,9 @@ define void @live_strided_store(ptr %ptr) {
6060; CHECK-NEXT: ret void
6161;
6262entry:
63- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %ptr , i32 100 , i1 false , i32 4 , i32 2 )
63+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %ptr , i32 100 , i1 false , i32 4 , i32 2 )
6464 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %ptr , i32 200 , i1 false , i32 4 , i32 2 )
65- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %ptr , i32 100 , i1 false , i32 4 , i32 2 )
65+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %ptr , i32 100 , i1 false , i32 4 , i32 2 )
6666 ret void
6767}
6868
@@ -78,9 +78,9 @@ define void @dead_strided_store_non_matrix_load(ptr noalias %src, ptr noalias %d
7878;
7979entry:
8080 %l.1 = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
81- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
81+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
8282 %l.2 = load double , ptr %src
83- call void @llvm.matrix.column.major.store (<8 x double > %l.1 , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
83+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l.1 , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
8484 ret void
8585}
8686
@@ -96,9 +96,9 @@ define void @live_strided_store_non_matrix_load(ptr noalias %src, ptr noalias %d
9696;
9797entry:
9898 %l.1 = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
99- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
99+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
100100 %l.2 = load double , ptr %dst
101- call void @llvm.matrix.column.major.store (<8 x double > %l.1 , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
101+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l.1 , ptr %dst , i32 100 , i1 false , i32 4 , i32 2 )
102102 ret void
103103}
104104
@@ -112,9 +112,9 @@ define void @dead_dynamically_strided_store(ptr noalias %src, ptr noalias %dst,
112112; CHECK-NEXT: ret void
113113;
114114entry:
115- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
115+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
116116 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
117- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
117+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
118118 ret void
119119}
120120
@@ -128,9 +128,9 @@ define void @live_dynamically_strided_store(ptr %ptr, i32 %stride) {
128128; CHECK-NEXT: ret void
129129;
130130entry:
131- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %ptr , i32 %stride , i1 false , i32 4 , i32 2 )
131+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %ptr , i32 %stride , i1 false , i32 4 , i32 2 )
132132 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %ptr , i32 %stride , i1 false , i32 4 , i32 2 )
133- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %ptr , i32 %stride , i1 false , i32 4 , i32 2 )
133+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %ptr , i32 %stride , i1 false , i32 4 , i32 2 )
134134 ret void
135135}
136136
@@ -146,9 +146,9 @@ define void @dead_dynamically_strided_store_non_matrix_load(ptr noalias %src, pt
146146;
147147entry:
148148 %l.1 = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
149- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
149+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
150150 %l.2 = load double , ptr %src
151- call void @llvm.matrix.column.major.store (<8 x double > %l.1 , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
151+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l.1 , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
152152 ret void
153153}
154154
@@ -163,9 +163,9 @@ define void @live_dynamically_strided_store_non_matrix_load(ptr noalias %src, pt
163163;
164164entry:
165165 %l.1 = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
166- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
166+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
167167 %l.2 = load double , ptr %dst
168- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
168+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 %stride , i1 false , i32 4 , i32 2 )
169169 ret void
170170}
171171
@@ -179,9 +179,9 @@ define void @dead_unstrided_store(ptr noalias %src, ptr noalias %dst) {
179179; CHECK-NEXT: ret void
180180;
181181entry:
182- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
182+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
183183 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
184- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
184+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
185185 ret void
186186}
187187
@@ -195,9 +195,9 @@ define void @live_unstrided_store(ptr %ptr) {
195195; CHECK-NEXT: ret void
196196;
197197entry:
198- call void @llvm.matrix.column.major.store (<8 x double > zeroinitializer , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
198+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > zeroinitializer , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
199199 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
200- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
200+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
201201 ret void
202202}
203203
@@ -215,7 +215,7 @@ entry:
215215 %dst.offset = getelementptr inbounds double , ptr %src , i32 6
216216 store double 42 .0 , ptr %dst.offset
217217 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 4 , i1 false , i32 4 , i32 2 )
218- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
218+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
219219 ret void
220220}
221221
@@ -233,7 +233,7 @@ entry:
233233 %ptr.offset = getelementptr inbounds double , ptr %ptr , i32 6
234234 store double 42 .0 , ptr %ptr.offset
235235 %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
236- call void @llvm.matrix.column.major.store (<8 x double > %l , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
236+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %ptr , i32 4 , i1 false , i32 4 , i32 2 )
237237 ret void
238238}
239239
@@ -301,5 +301,38 @@ entry:
301301 ret void
302302}
303303
304+ define void @dead_matrix_store_dimension_change (ptr noalias %src , ptr noalias %dst ) {
305+ ; CHECK-LABEL: define void @dead_matrix_store_dimension_change(
306+ ; CHECK-SAME: ptr noalias [[SRC:%.*]], ptr noalias [[DST:%.*]]) {
307+ ; CHECK-NEXT: [[ENTRY:.*:]]
308+ ; CHECK-NEXT: [[L:%.*]] = call <8 x double> @llvm.matrix.column.major.load.v8f64.i32(ptr [[SRC]], i32 8, i1 false, i32 4, i32 2)
309+ ; CHECK-NEXT: call void @llvm.matrix.column.major.store.v8f64.i32(<8 x double> [[L]], ptr [[DST]], i32 4, i1 false, i32 4, i32 2)
310+ ; CHECK-NEXT: call void @llvm.matrix.column.major.store.v9f64.i32(<9 x double> zeroinitializer, ptr [[DST]], i32 3, i1 false, i32 3, i32 3)
311+ ; CHECK-NEXT: ret void
312+ ;
313+ entry:
314+ %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 8 , i1 false , i32 4 , i32 2 )
315+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
316+ call void @llvm.matrix.column.major.store.v9f64.i32 (<9 x double > zeroinitializer , ptr %dst , i32 3 , i1 false , i32 3 , i32 3 )
317+ ret void
318+ }
319+
320+ define void @live_matrix_store_dimension_change (ptr noalias %src , ptr noalias %dst ) {
321+ ; CHECK-LABEL: define void @live_matrix_store_dimension_change(
322+ ; CHECK-SAME: ptr noalias [[SRC:%.*]], ptr noalias [[DST:%.*]]) {
323+ ; CHECK-NEXT: [[ENTRY:.*:]]
324+ ; CHECK-NEXT: [[L:%.*]] = call <8 x double> @llvm.matrix.column.major.load.v8f64.i32(ptr [[SRC]], i32 8, i1 false, i32 4, i32 2)
325+ ; CHECK-NEXT: call void @llvm.matrix.column.major.store.v9f64.i32(<9 x double> zeroinitializer, ptr [[DST]], i32 3, i1 false, i32 3, i32 3)
326+ ; CHECK-NEXT: call void @llvm.matrix.column.major.store.v8f64.i32(<8 x double> [[L]], ptr [[DST]], i32 4, i1 false, i32 4, i32 2)
327+ ; CHECK-NEXT: ret void
328+ ;
329+ entry:
330+ %l = call <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr %src , i32 8 , i1 false , i32 4 , i32 2 )
331+ call void @llvm.matrix.column.major.store.v9f64.i32 (<9 x double > zeroinitializer , ptr %dst , i32 3 , i1 false , i32 3 , i32 3 )
332+ call void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double > %l , ptr %dst , i32 4 , i1 false , i32 4 , i32 2 )
333+ ret void
334+ }
335+
304336declare <8 x double > @llvm.matrix.column.major.load.v8f64.i32 (ptr , i32 , i1 , i32 , i32 )
337+ declare <9 x double > @llvm.matrix.column.major.load.v9f64.i32 (ptr , i32 , i1 , i32 , i32 )
305338declare void @llvm.matrix.column.major.store.v8f64.i32 (<8 x double >, ptr , i32 , i1 , i32 , i32 )
0 commit comments