@@ -5105,10 +5105,10 @@ defm SADDL : SIMDLongThreeVectorBHS< 0, 0b0000, "saddl",
51055105defm SADDW : SIMDWideThreeVectorBHS< 0, 0b0001, "saddw",
51065106 BinOpFrag<(add node:$LHS, (sext node:$RHS))>>;
51075107defm 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))>>;
51095109defm 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 >;
51125112defm SQDMLAL : SIMDLongThreeVectorSQDMLXTiedHS<0, 0b1001, "sqdmlal",
51135113 int_aarch64_neon_sqadd>;
51145114defm SQDMLSL : SIMDLongThreeVectorSQDMLXTiedHS<0, 0b1011, "sqdmlsl",
@@ -5126,10 +5126,10 @@ defm UADDL : SIMDLongThreeVectorBHS<1, 0b0000, "uaddl",
51265126defm UADDW : SIMDWideThreeVectorBHS<1, 0b0001, "uaddw",
51275127 BinOpFrag<(add node:$LHS, (zanyext node:$RHS))>>;
51285128defm 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))>>;
51305130defm 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 >;
51335133defm USUBL : SIMDLongThreeVectorBHS<1, 0b0010, "usubl",
51345134 BinOpFrag<(sub (zanyext node:$LHS), (zanyext node:$RHS))>>;
51355135defm USUBW : SIMDWideThreeVectorBHS< 1, 0b0011, "usubw",
@@ -5164,74 +5164,15 @@ multiclass Neon_mul_acc_widen_patterns<SDPatternOperator opnode, SDPatternOperat
51645164 V64:$Rn, V64:$Rm)), dsub)>;
51655165}
51665166
5167- defm : Neon_mul_acc_widen_patterns<add, int_aarch64_neon_umull ,
5167+ defm : Neon_mul_acc_widen_patterns<add, AArch64umull ,
51685168 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 ,
51705170 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 ,
51725172 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 ,
51745174 SMLSLv8i8_v8i16, SMLSLv4i16_v4i32, SMLSLv2i32_v2i64>;
51755175
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-
52355176// Patterns for 64-bit pmull
52365177def : Pat<(int_aarch64_neon_pmull64 V64:$Rn, V64:$Rm),
52375178 (PMULLv1i64 V64:$Rn, V64:$Rm)>;
@@ -6404,11 +6345,10 @@ defm MLS : SIMDVectorIndexedHSTied<1, 0b0100, "mls", null_frag>;
64046345
64056346defm MUL : SIMDVectorIndexedHS<0, 0b1000, "mul", mul>;
64066347defm 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))>>;
64086349defm 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>;
64126352defm SQDMLAL : SIMDIndexedLongSQDMLXSDTied<0, 0b0011, "sqdmlal",
64136353 int_aarch64_neon_sqadd>;
64146354defm SQDMLSL : SIMDIndexedLongSQDMLXSDTied<0, 0b0111, "sqdmlsl",
@@ -6419,11 +6359,10 @@ defm SQRDMLSH : SIMDIndexedSQRDMLxHSDTied<1, 0b1111, "sqrdmlsh",
64196359 int_aarch64_neon_sqrdmlsh>;
64206360defm SQDMULL : SIMDIndexedLongSD<0, 0b1011, "sqdmull", int_aarch64_neon_sqdmull>;
64216361defm 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))>>;
64236363defm 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>;
64276366
64286367// A scalar sqdmull with the second operand being a vector lane can be
64296368// handled directly with the indexed instruction encoding.
0 commit comments