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