@@ -5105,10 +5105,10 @@ defm SADDL : SIMDLongThreeVectorBHS< 0, 0b0000, "saddl",
5105
5105
defm SADDW : SIMDWideThreeVectorBHS< 0, 0b0001, "saddw",
5106
5106
BinOpFrag<(add node:$LHS, (sext node:$RHS))>>;
5107
5107
defm SMLAL : SIMDLongThreeVectorTiedBHS<0, 0b1000, "smlal",
5108
- TriOpFrag<(add node:$LHS, (int_aarch64_neon_smull node:$MHS, node:$RHS))>>;
5108
+ TriOpFrag<(add node:$LHS, (AArch64smull node:$MHS, node:$RHS))>>;
5109
5109
defm SMLSL : SIMDLongThreeVectorTiedBHS<0, 0b1010, "smlsl",
5110
- TriOpFrag<(sub node:$LHS, (int_aarch64_neon_smull node:$MHS, node:$RHS))>>;
5111
- defm SMULL : SIMDLongThreeVectorBHS<0, 0b1100, "smull", int_aarch64_neon_smull >;
5110
+ TriOpFrag<(sub node:$LHS, (AArch64smull node:$MHS, node:$RHS))>>;
5111
+ defm SMULL : SIMDLongThreeVectorBHS<0, 0b1100, "smull", AArch64smull >;
5112
5112
defm SQDMLAL : SIMDLongThreeVectorSQDMLXTiedHS<0, 0b1001, "sqdmlal",
5113
5113
int_aarch64_neon_sqadd>;
5114
5114
defm SQDMLSL : SIMDLongThreeVectorSQDMLXTiedHS<0, 0b1011, "sqdmlsl",
@@ -5126,10 +5126,10 @@ defm UADDL : SIMDLongThreeVectorBHS<1, 0b0000, "uaddl",
5126
5126
defm UADDW : SIMDWideThreeVectorBHS<1, 0b0001, "uaddw",
5127
5127
BinOpFrag<(add node:$LHS, (zanyext node:$RHS))>>;
5128
5128
defm UMLAL : SIMDLongThreeVectorTiedBHS<1, 0b1000, "umlal",
5129
- TriOpFrag<(add node:$LHS, (int_aarch64_neon_umull node:$MHS, node:$RHS))>>;
5129
+ TriOpFrag<(add node:$LHS, (AArch64umull node:$MHS, node:$RHS))>>;
5130
5130
defm UMLSL : SIMDLongThreeVectorTiedBHS<1, 0b1010, "umlsl",
5131
- TriOpFrag<(sub node:$LHS, (int_aarch64_neon_umull node:$MHS, node:$RHS))>>;
5132
- defm UMULL : SIMDLongThreeVectorBHS<1, 0b1100, "umull", int_aarch64_neon_umull >;
5131
+ TriOpFrag<(sub node:$LHS, (AArch64umull node:$MHS, node:$RHS))>>;
5132
+ defm UMULL : SIMDLongThreeVectorBHS<1, 0b1100, "umull", AArch64umull >;
5133
5133
defm USUBL : SIMDLongThreeVectorBHS<1, 0b0010, "usubl",
5134
5134
BinOpFrag<(sub (zanyext node:$LHS), (zanyext node:$RHS))>>;
5135
5135
defm USUBW : SIMDWideThreeVectorBHS< 1, 0b0011, "usubw",
@@ -5164,74 +5164,15 @@ multiclass Neon_mul_acc_widen_patterns<SDPatternOperator opnode, SDPatternOperat
5164
5164
V64:$Rn, V64:$Rm)), dsub)>;
5165
5165
}
5166
5166
5167
- defm : Neon_mul_acc_widen_patterns<add, int_aarch64_neon_umull ,
5167
+ defm : Neon_mul_acc_widen_patterns<add, AArch64umull ,
5168
5168
UMLALv8i8_v8i16, UMLALv4i16_v4i32, UMLALv2i32_v2i64>;
5169
- defm : Neon_mul_acc_widen_patterns<add, int_aarch64_neon_smull ,
5169
+ defm : Neon_mul_acc_widen_patterns<add, AArch64smull ,
5170
5170
SMLALv8i8_v8i16, SMLALv4i16_v4i32, SMLALv2i32_v2i64>;
5171
- defm : Neon_mul_acc_widen_patterns<sub, int_aarch64_neon_umull ,
5171
+ defm : Neon_mul_acc_widen_patterns<sub, AArch64umull ,
5172
5172
UMLSLv8i8_v8i16, UMLSLv4i16_v4i32, UMLSLv2i32_v2i64>;
5173
- defm : Neon_mul_acc_widen_patterns<sub, int_aarch64_neon_smull ,
5173
+ defm : Neon_mul_acc_widen_patterns<sub, AArch64smull ,
5174
5174
SMLSLv8i8_v8i16, SMLSLv4i16_v4i32, SMLSLv2i32_v2i64>;
5175
5175
5176
- // Additional patterns for SMULL and UMULL
5177
- multiclass Neon_mul_widen_patterns<SDPatternOperator opnode,
5178
- Instruction INST8B, Instruction INST4H, Instruction INST2S> {
5179
- def : Pat<(v8i16 (opnode (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
5180
- (INST8B V64:$Rn, V64:$Rm)>;
5181
- def : Pat<(v4i32 (opnode (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
5182
- (INST4H V64:$Rn, V64:$Rm)>;
5183
- def : Pat<(v2i64 (opnode (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
5184
- (INST2S V64:$Rn, V64:$Rm)>;
5185
- }
5186
-
5187
- defm : Neon_mul_widen_patterns<AArch64smull, SMULLv8i8_v8i16,
5188
- SMULLv4i16_v4i32, SMULLv2i32_v2i64>;
5189
- defm : Neon_mul_widen_patterns<AArch64umull, UMULLv8i8_v8i16,
5190
- UMULLv4i16_v4i32, UMULLv2i32_v2i64>;
5191
-
5192
- // Patterns for smull2/umull2.
5193
- multiclass Neon_mul_high_patterns<SDPatternOperator opnode,
5194
- Instruction INST8B, Instruction INST4H, Instruction INST2S> {
5195
- def : Pat<(v8i16 (opnode (extract_high_v16i8 V128:$Rn),
5196
- (extract_high_v16i8 V128:$Rm))),
5197
- (INST8B V128:$Rn, V128:$Rm)>;
5198
- def : Pat<(v4i32 (opnode (extract_high_v8i16 V128:$Rn),
5199
- (extract_high_v8i16 V128:$Rm))),
5200
- (INST4H V128:$Rn, V128:$Rm)>;
5201
- def : Pat<(v2i64 (opnode (extract_high_v4i32 V128:$Rn),
5202
- (extract_high_v4i32 V128:$Rm))),
5203
- (INST2S V128:$Rn, V128:$Rm)>;
5204
- }
5205
-
5206
- defm : Neon_mul_high_patterns<AArch64smull, SMULLv16i8_v8i16,
5207
- SMULLv8i16_v4i32, SMULLv4i32_v2i64>;
5208
- defm : Neon_mul_high_patterns<AArch64umull, UMULLv16i8_v8i16,
5209
- UMULLv8i16_v4i32, UMULLv4i32_v2i64>;
5210
-
5211
- // Additional patterns for SMLAL/SMLSL and UMLAL/UMLSL
5212
- multiclass Neon_mulacc_widen_patterns<SDPatternOperator opnode,
5213
- Instruction INST8B, Instruction INST4H, Instruction INST2S> {
5214
- def : Pat<(v8i16 (opnode (v8i16 V128:$Rd), (v8i8 V64:$Rn), (v8i8 V64:$Rm))),
5215
- (INST8B V128:$Rd, V64:$Rn, V64:$Rm)>;
5216
- def : Pat<(v4i32 (opnode (v4i32 V128:$Rd), (v4i16 V64:$Rn), (v4i16 V64:$Rm))),
5217
- (INST4H V128:$Rd, V64:$Rn, V64:$Rm)>;
5218
- def : Pat<(v2i64 (opnode (v2i64 V128:$Rd), (v2i32 V64:$Rn), (v2i32 V64:$Rm))),
5219
- (INST2S V128:$Rd, V64:$Rn, V64:$Rm)>;
5220
- }
5221
-
5222
- defm : Neon_mulacc_widen_patterns<
5223
- TriOpFrag<(add node:$LHS, (AArch64smull node:$MHS, node:$RHS))>,
5224
- SMLALv8i8_v8i16, SMLALv4i16_v4i32, SMLALv2i32_v2i64>;
5225
- defm : Neon_mulacc_widen_patterns<
5226
- TriOpFrag<(add node:$LHS, (AArch64umull node:$MHS, node:$RHS))>,
5227
- UMLALv8i8_v8i16, UMLALv4i16_v4i32, UMLALv2i32_v2i64>;
5228
- defm : Neon_mulacc_widen_patterns<
5229
- TriOpFrag<(sub node:$LHS, (AArch64smull node:$MHS, node:$RHS))>,
5230
- SMLSLv8i8_v8i16, SMLSLv4i16_v4i32, SMLSLv2i32_v2i64>;
5231
- defm : Neon_mulacc_widen_patterns<
5232
- TriOpFrag<(sub node:$LHS, (AArch64umull node:$MHS, node:$RHS))>,
5233
- UMLSLv8i8_v8i16, UMLSLv4i16_v4i32, UMLSLv2i32_v2i64>;
5234
-
5235
5176
// Patterns for 64-bit pmull
5236
5177
def : Pat<(int_aarch64_neon_pmull64 V64:$Rn, V64:$Rm),
5237
5178
(PMULLv1i64 V64:$Rn, V64:$Rm)>;
@@ -6404,11 +6345,10 @@ defm MLS : SIMDVectorIndexedHSTied<1, 0b0100, "mls", null_frag>;
6404
6345
6405
6346
defm MUL : SIMDVectorIndexedHS<0, 0b1000, "mul", mul>;
6406
6347
defm SMLAL : SIMDVectorIndexedLongSDTied<0, 0b0010, "smlal",
6407
- TriOpFrag<(add node:$LHS, (int_aarch64_neon_smull node:$MHS, node:$RHS))>>;
6348
+ TriOpFrag<(add node:$LHS, (AArch64smull node:$MHS, node:$RHS))>>;
6408
6349
defm SMLSL : SIMDVectorIndexedLongSDTied<0, 0b0110, "smlsl",
6409
- TriOpFrag<(sub node:$LHS, (int_aarch64_neon_smull node:$MHS, node:$RHS))>>;
6410
- defm SMULL : SIMDVectorIndexedLongSD<0, 0b1010, "smull",
6411
- int_aarch64_neon_smull>;
6350
+ TriOpFrag<(sub node:$LHS, (AArch64smull node:$MHS, node:$RHS))>>;
6351
+ defm SMULL : SIMDVectorIndexedLongSD<0, 0b1010, "smull", AArch64smull>;
6412
6352
defm SQDMLAL : SIMDIndexedLongSQDMLXSDTied<0, 0b0011, "sqdmlal",
6413
6353
int_aarch64_neon_sqadd>;
6414
6354
defm SQDMLSL : SIMDIndexedLongSQDMLXSDTied<0, 0b0111, "sqdmlsl",
@@ -6419,11 +6359,10 @@ defm SQRDMLSH : SIMDIndexedSQRDMLxHSDTied<1, 0b1111, "sqrdmlsh",
6419
6359
int_aarch64_neon_sqrdmlsh>;
6420
6360
defm SQDMULL : SIMDIndexedLongSD<0, 0b1011, "sqdmull", int_aarch64_neon_sqdmull>;
6421
6361
defm UMLAL : SIMDVectorIndexedLongSDTied<1, 0b0010, "umlal",
6422
- TriOpFrag<(add node:$LHS, (int_aarch64_neon_umull node:$MHS, node:$RHS))>>;
6362
+ TriOpFrag<(add node:$LHS, (AArch64umull node:$MHS, node:$RHS))>>;
6423
6363
defm UMLSL : SIMDVectorIndexedLongSDTied<1, 0b0110, "umlsl",
6424
- TriOpFrag<(sub node:$LHS, (int_aarch64_neon_umull node:$MHS, node:$RHS))>>;
6425
- defm UMULL : SIMDVectorIndexedLongSD<1, 0b1010, "umull",
6426
- int_aarch64_neon_umull>;
6364
+ TriOpFrag<(sub node:$LHS, (AArch64umull node:$MHS, node:$RHS))>>;
6365
+ defm UMULL : SIMDVectorIndexedLongSD<1, 0b1010, "umull", AArch64umull>;
6427
6366
6428
6367
// A scalar sqdmull with the second operand being a vector lane can be
6429
6368
// handled directly with the indexed instruction encoding.
0 commit comments