[llvm] [AArch64] Add patterns for sub from add negative immediates (PR #156024)

Paul Walker via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 29 08:21:57 PDT 2025


================
@@ -657,6 +657,12 @@ let Predicates = [HasSVE_or_SME] in {
   defm SQSUB_ZI : sve_int_arith_imm0_ssat<0b110, "sqsub", ssubsat, saddsat>;
   defm UQSUB_ZI : sve_int_arith_imm0<0b111, "uqsub", usubsat>;
 
+  // Extra patterns for add(x, splat(-ve)) -> sub(x, +ve). There is no i8
+  // pattern as all i8 constants can be handled by an add.
+  def : SVE_1_Op_Imm_OptLsl_Pat<nxv8i16, add, ZPR16, i32, SVEAddSubNegImm16Pat, SUB_ZI_H>;
+  def : SVE_1_Op_Imm_OptLsl_Pat<nxv4i32, add, ZPR32, i32, SVEAddSubNegImm32Pat, SUB_ZI_S>;
+  def : SVE_1_Op_Imm_OptLsl_Pat<nxv2i64, add, ZPR64, i64, SVEAddSubNegImm64Pat, SUB_ZI_D>;
----------------
paulwalker-arm wrote:

Any objections to moving these into `sve_int_arith_imm0` similar to `sve_int_arith_imm0_ssat`, albeit this time with `inv_op` defaulting to `null_frag`?

https://github.com/llvm/llvm-project/pull/156024


More information about the llvm-commits mailing list