This patch series adds support for the CMPBR extension. It includes the
new `+cmpbr` option and rules to generate the new instructions when
lowering conditional branches.

Changelog:
* v9:
  - Mark the non-far branches unlikely, so that the branch is consistently 
generated as:
  ```asm
        branch-if-true .L123
        b      not_taken
.L123:
        b      taken
  ```
* v8:
  - Support far branches for the `CBB` and `CBH` instructions, and add tests 
for them.
  - Mark the branch in the far branch tests likely, so that the optimizer does
    not invert the condition.
  - Use regex captures for register and label names so that the tests are less 
fragile.
  - Minor formatting fixes.
* v7:
  - Support far branches and add a test for them.
  - Replace `aarch64_cb_short_operand` with `aarch64_reg_or_zero_operand`.
  - Delete the new predicates that aren't needed anymore.
  - Minor formatting and comment fixes.
* v6:
  - Correct the constraint string for immediate operands.
  - Drop the commit for adding `%j` format specifiers. The suffix for
    the `cb` instruction is now calculated by the `cmp_op` code
    attribute.
* v5:
  - Moved Moved patch 10/10 (adding %j ...) before patch 8/10 (rules for
    CMPBR...). Every commit in the series should now produce a correct
    compiler.
  - Reduce excessive diff context by not passing `--function-context` to
    `git format-patch`.
* v4:
  - Added a commit to use HS/LO instead of CS/CC mnemonics.
  - Rewrite the range checks for immediate RHSes in aarch64.cc: CBGE,
    CBHS, CBLE and CBLS have different ranges of allowed immediates than
    the other comparisons.

Karl Meakin (9):
  AArch64: place branch instruction rules together
  AArch64: reformat branch instruction rules
  AArch64: rename branch instruction rules
  AArch64: add constants for branch displacements
  AArch64: make `far_branch` attribute a boolean
  AArch64: recognize `+cmpbr` option
  AArch64: precommit test for CMPBR instructions
  AArch64: rules for CMPBR instructions
  AArch64: make rules for CBZ/TBZ higher priority

 .../aarch64/aarch64-option-extensions.def     |    2 +
 gcc/config/aarch64/aarch64-protos.h           |    2 +
 gcc/config/aarch64/aarch64-simd.md            |    2 +-
 gcc/config/aarch64/aarch64-sme.md             |    2 +-
 gcc/config/aarch64/aarch64.cc                 |   39 +-
 gcc/config/aarch64/aarch64.h                  |    3 +
 gcc/config/aarch64/aarch64.md                 |  570 ++++--
 gcc/config/aarch64/constraints.md             |   18 +
 gcc/config/aarch64/iterators.md               |   30 +
 gcc/doc/invoke.texi                           |    3 +
 gcc/testsuite/gcc.target/aarch64/cmpbr.c      | 1824 +++++++++++++++++
 gcc/testsuite/lib/target-supports.exp         |   14 +-
 12 files changed, 2285 insertions(+), 224 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/cmpbr.c

--
2.48.1

Reply via email to