[llvm] [ARM][MVE] Match canonical saturating negation patterns (PR #213085)
Ties Stuij via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 31 02:36:35 PDT 2026
================
@@ -2568,13 +2568,24 @@ multiclass vqabsneg_pattern<MVEVectorVTInfo VTI, dag int_min, dag int_max,
int_max,
(sub (VTI.Vec zero_vec), (VTI.Vec MQPR:$reg)))))),
(VTI.Vec (vqabs_instruction (VTI.Vec MQPR:$reg)))>;
+ // InstCombine canonicalizes the saturating negate in the expression above
+ // to ssub.sat(0, r).
+ def : Pat<(VTI.Vec (vselect
+ (VTI.Pred (ARMvcmpz (VTI.Vec MQPR:$reg), ARMCCgt)),
+ (VTI.Vec MQPR:$reg),
+ (VTI.Vec (ssubsat (VTI.Vec zero_vec),
+ (VTI.Vec MQPR:$reg))))),
+ (VTI.Vec (vqabs_instruction (VTI.Vec MQPR:$reg)))>;
// Similarly, this tree represents vqneg, i.e. the following vectorized expression:
// r == INT_MIN ? INT_MAX : -r
def : Pat<(VTI.Vec (vselect
(VTI.Pred (ARMvcmp (VTI.Vec MQPR:$reg), int_min, ARMCCeq)),
int_max,
(sub (VTI.Vec zero_vec), (VTI.Vec MQPR:$reg)))),
(VTI.Vec (vqneg_instruction (VTI.Vec MQPR:$reg)))>;
+ def : Pat<(VTI.Vec (ssubsat (VTI.Vec zero_vec),
+ (VTI.Vec MQPR:$reg))),
----------------
stuij wrote:
Done, and np, spoils go to the committer.
https://github.com/llvm/llvm-project/pull/213085
More information about the llvm-commits
mailing list