Karl Meakin <karl.mea...@arm.com> writes: > 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.
Thanks for the update, LGTM. I've pushed the series to trunk. Richard > 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