@@ -114,9 +114,7 @@ define <15 x double> @test_negation_on_result(<3 x double> %a, <5 x double> %b)
114
114
; both negations can be deleted
115
115
define <2 x double > @test_with_two_operands_negated1 (<6 x double > %a , <3 x double > %b ){
116
116
; CHECK-LABEL: @test_with_two_operands_negated1(
117
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <6 x double> [[A:%.*]]
118
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <3 x double> [[B:%.*]]
119
- ; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A_NEG]], <3 x double> [[B_NEG]], i32 2, i32 3, i32 1)
117
+ ; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A:%.*]], <3 x double> [[B:%.*]], i32 2, i32 3, i32 1)
120
118
; CHECK-NEXT: ret <2 x double> [[RES]]
121
119
;
122
120
%a.neg = fneg <6 x double > %a
@@ -128,9 +126,7 @@ define <2 x double> @test_with_two_operands_negated1(<6 x double> %a, <3 x doubl
128
126
; both negations will be removed
129
127
define <9 x double > @test_with_two_operands_negated2 (<27 x double > %a , <3 x double > %b ){
130
128
; CHECK-LABEL: @test_with_two_operands_negated2(
131
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <27 x double> [[A:%.*]]
132
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <3 x double> [[B:%.*]]
133
- ; CHECK-NEXT: [[RES:%.*]] = tail call <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A_NEG]], <3 x double> [[B_NEG]], i32 9, i32 3, i32 1)
129
+ ; CHECK-NEXT: [[RES:%.*]] = tail call <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A:%.*]], <3 x double> [[B:%.*]], i32 9, i32 3, i32 1)
134
130
; CHECK-NEXT: ret <9 x double> [[RES]]
135
131
;
136
132
%a.neg = fneg <27 x double > %a
@@ -142,9 +138,7 @@ define <9 x double> @test_with_two_operands_negated2(<27 x double> %a, <3 x doub
142
138
; both negations will be removed
143
139
define <9 x double > @test_with_two_operands_negated_with_fastflags (<27 x double > %a , <3 x double > %b ){
144
140
; CHECK-LABEL: @test_with_two_operands_negated_with_fastflags(
145
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <27 x double> [[A:%.*]]
146
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <3 x double> [[B:%.*]]
147
- ; CHECK-NEXT: [[RES:%.*]] = tail call fast <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A_NEG]], <3 x double> [[B_NEG]], i32 9, i32 3, i32 1)
141
+ ; CHECK-NEXT: [[RES:%.*]] = tail call fast <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A:%.*]], <3 x double> [[B:%.*]], i32 9, i32 3, i32 1)
148
142
; CHECK-NEXT: ret <9 x double> [[RES]]
149
143
;
150
144
%a.neg = fneg <27 x double > %a
@@ -156,9 +150,7 @@ define <9 x double> @test_with_two_operands_negated_with_fastflags(<27 x double>
156
150
; both negations should be removed
157
151
define <9 x double > @test_with_two_operands_negated2_commute (<3 x double > %a , <27 x double > %b ){
158
152
; CHECK-LABEL: @test_with_two_operands_negated2_commute(
159
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <3 x double> [[A:%.*]]
160
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <27 x double> [[B:%.*]]
161
- ; CHECK-NEXT: [[RES:%.*]] = call <9 x double> @llvm.matrix.multiply.v9f64.v3f64.v27f64(<3 x double> [[A_NEG]], <27 x double> [[B_NEG]], i32 1, i32 3, i32 9)
153
+ ; CHECK-NEXT: [[RES:%.*]] = call <9 x double> @llvm.matrix.multiply.v9f64.v3f64.v27f64(<3 x double> [[A:%.*]], <27 x double> [[B:%.*]], i32 1, i32 3, i32 9)
162
154
; CHECK-NEXT: ret <9 x double> [[RES]]
163
155
;
164
156
%a.neg = fneg <3 x double > %a
@@ -169,9 +161,7 @@ define <9 x double> @test_with_two_operands_negated2_commute(<3 x double> %a, <2
169
161
170
162
define <4 x double > @matrix_multiply_two_operands_negated_with_same_size (<2 x double > %a , <2 x double > %b ) {
171
163
; CHECK-LABEL: @matrix_multiply_two_operands_negated_with_same_size(
172
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <2 x double> [[A:%.*]]
173
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <2 x double> [[B:%.*]]
174
- ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.matrix.multiply.v4f64.v2f64.v2f64(<2 x double> [[A_NEG]], <2 x double> [[B_NEG]], i32 2, i32 1, i32 2)
164
+ ; CHECK-NEXT: [[RES:%.*]] = call <4 x double> @llvm.matrix.multiply.v4f64.v2f64.v2f64(<2 x double> [[A:%.*]], <2 x double> [[B:%.*]], i32 2, i32 1, i32 2)
175
165
; CHECK-NEXT: ret <4 x double> [[RES]]
176
166
;
177
167
%a.neg = fneg <2 x double > %a
@@ -182,11 +172,9 @@ define <4 x double> @matrix_multiply_two_operands_negated_with_same_size(<2 x do
182
172
183
173
define <2 x double > @matrix_multiply_two_operands_with_multiple_uses (<6 x double > %a , <3 x double > %b ) {
184
174
; CHECK-LABEL: @matrix_multiply_two_operands_with_multiple_uses(
185
- ; CHECK-NEXT: [[A_NEG:%.*]] = fneg <6 x double> [[A:%.*]]
186
- ; CHECK-NEXT: [[B_NEG:%.*]] = fneg <3 x double> [[B:%.*]]
187
- ; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A_NEG]], <3 x double> [[B_NEG]], i32 2, i32 3, i32 1)
188
- ; CHECK-NEXT: [[RES_2:%.*]] = shufflevector <6 x double> [[A_NEG]], <6 x double> undef, <2 x i32> <i32 0, i32 1>
189
- ; CHECK-NEXT: [[RES_3:%.*]] = fadd <2 x double> [[RES_2]], [[RES]]
175
+ ; CHECK-NEXT: [[RES:%.*]] = tail call <2 x double> @llvm.matrix.multiply.v2f64.v6f64.v3f64(<6 x double> [[A:%.*]], <3 x double> [[B:%.*]], i32 2, i32 3, i32 1)
176
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <6 x double> [[A]], <6 x double> poison, <2 x i32> <i32 0, i32 1>
177
+ ; CHECK-NEXT: [[RES_3:%.*]] = fsub <2 x double> [[RES]], [[TMP1]]
190
178
; CHECK-NEXT: ret <2 x double> [[RES_3]]
191
179
;
192
180
%a.neg = fneg <6 x double > %a
@@ -202,7 +190,7 @@ define <9 x double> @matrix_multiply_two_operands_with_multiple_uses2(<27 x doub
202
190
; CHECK-LABEL: @matrix_multiply_two_operands_with_multiple_uses2(
203
191
; CHECK-NEXT: [[A_NEG:%.*]] = fneg <27 x double> [[A:%.*]]
204
192
; CHECK-NEXT: [[B_NEG:%.*]] = fneg <3 x double> [[B:%.*]]
205
- ; CHECK-NEXT: [[RES:%.*]] = tail call <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A_NEG ]], <3 x double> [[B_NEG ]], i32 9, i32 3, i32 1)
193
+ ; CHECK-NEXT: [[RES:%.*]] = tail call <9 x double> @llvm.matrix.multiply.v9f64.v27f64.v3f64(<27 x double> [[A ]], <3 x double> [[B ]], i32 9, i32 3, i32 1)
206
194
; CHECK-NEXT: store <27 x double> [[A_NEG]], ptr [[A_LOC:%.*]], align 256
207
195
; CHECK-NEXT: store <3 x double> [[B_NEG]], ptr [[B_LOC:%.*]], align 32
208
196
; CHECK-NEXT: ret <9 x double> [[RES]]
0 commit comments