This is attacking case 3 of PR 94174. In v2, I unify the various subtract-with-borrow and add-with-carry patterns that also output flags with unspecs. As suggested by Richard Sandiford during review of v1. It does seem cleaner.
r~ Richard Henderson (11): aarch64: Accept 0 as first argument to compares aarch64: Accept zeros in add<GPI>3_carryin aarch64: Provide expander for sub<GPI>3_compare1 aarch64: Introduce aarch64_expand_addsubti aarch64: Use UNSPEC_SBCS for subtract-with-borrow + output flags aarch64: Use UNSPEC_ADCS for add-with-carry + output flags aarch64: Remove CC_ADCmode aarch64: Accept -1 as second argument to add<mode>3_carryin aarch64: Adjust result of aarch64_gen_compare_reg aarch64: Implement TImode comparisons aarch64: Implement absti2 gcc/config/aarch64/aarch64-protos.h | 10 +- gcc/config/aarch64/aarch64.c | 303 +++++---- gcc/config/aarch64/aarch64-modes.def | 1 - gcc/config/aarch64/aarch64-simd.md | 18 +- gcc/config/aarch64/aarch64-speculation.cc | 5 +- gcc/config/aarch64/aarch64.md | 762 ++++++++++------------ gcc/config/aarch64/predicates.md | 15 +- 7 files changed, 527 insertions(+), 587 deletions(-) -- 2.20.1