I have written patches for FEAT_CMPBR support in QEMU, and wanted to
test them out with gcc.  The easiest way, seemed to be bootstrapping
gcc with cmpbr enabled.  The attempt failed on stage1 libgcc.

My bug report is target/121385.  Pinski did some analyis, which was
very helpful, and guides most of this patch set.

Pinski filed a second PR, target/121388, vs bid_binarydecimal.c.  I
think that might now be in hiding rather than actually being fixed,
since I did nothing that should have affected changing the sense of
the branch during cfglayout.  I suspect we need to accept a symmetric
range of constants for all comparisons, expand those that don't fit
to cmp+bcond.

While we could have post-reload splitting, I'm not sure how split works
with shorten_branches, so we might have to retain cmp+bcond all the way
through to output.  If that's true, and we assume that performant cpus
will fuse cmp+bcond anyway, it might not be worth bothering to split.

My bootstrap under emulation is still going, 8 hours in.  In hindsight
I should have used a bigger machine, but laziness used the one with
the chroot already set up.

This passes native bootstrap and make check on a neoverse-n1, so I
don't seem to have broken anything obvious.


r~


Richard Henderson (8):
  aarch64: Drop label format argument from aarch64_gen_far_branch
  aarch64: Fix spelling of BRANCH_LEN_N_1KiB
  aarch64: Drop cbranch<SHORT>4 expander
  aarch64: Disable TARGET_CMPBR with aarch64_track_speculation
  aarch64: Use aarch64_gen_compare_zero_and_branch in aarch64_restore_za
  aarch64: Add cc clobber to compare-and-branch patterns
  aarch64: Consider TARGET_CMPBR in rtx costs
  aarch64: Use cc when CB/CBB/CBH is out-of-range

 gcc/config/aarch64/aarch64-protos.h |  5 +-
 gcc/config/aarch64/aarch64.h        |  5 +-
 gcc/config/aarch64/aarch64-sme.md   |  3 +-
 gcc/config/aarch64/aarch64.cc       | 22 +++++--
 gcc/config/aarch64/aarch64.md       | 94 ++++++++++++++---------------
 5 files changed, 74 insertions(+), 55 deletions(-)

-- 
2.43.0

Reply via email to