@@ -1839,7 +1839,8 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
18391839 setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::i8, Custom);
18401840 setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::i16, Custom);
18411841
1842- // NEON doesn't support integer divides, but SVE does
1842+ // A number of operations like MULH and integer divides are not supported by
1843+ // NEON but are available in SVE.
18431844 for (auto VT : {MVT::v8i8, MVT::v16i8, MVT::v4i16, MVT::v8i16, MVT::v2i32,
18441845 MVT::v4i32, MVT::v1i64, MVT::v2i64}) {
18451846 setOperationAction(ISD::SDIV, VT, Custom);
@@ -1903,8 +1904,6 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
19031904 setOperationAction(ISD::VECREDUCE_AND, VT, Custom);
19041905 setOperationAction(ISD::VECREDUCE_OR, VT, Custom);
19051906 setOperationAction(ISD::VECREDUCE_XOR, VT, Custom);
1906- setOperationAction(ISD::MULHS, VT, Custom);
1907- setOperationAction(ISD::MULHU, VT, Custom);
19081907 }
19091908
19101909 // Use SVE for vectors with more than 2 elements.
0 commit comments