The condexec state machine never predicates a region that ends in a
call on a BLX-capable core, or one that ends in a return.  1/3 handles
returns, indirect calls and sibling calls, 2/3 lets a USE or CLOBBER
sit inside the region, and 3/3 adds -mpredicate-calls for direct calls,
which need a veneer to reach a Thumb callee.  The series needs the
callee-save cost hooks, <[email protected]>.

.text of vmlinux:

                         base       1+2  +3 (option on)
  bcmrpi  ARMv6 -O2  10683484  10674880        10664536
  bcmrpi  ARMv6 -Os   8709508   8701308         8666500
  bcm2709 ARMv7 -O2  11183812  11175128        11163784

Dominic P (3):
  arm: predicate a guarded return, indirect call or sibling call
  arm: skip a bare USE or CLOBBER in a condexec skipped region
  arm: add -mpredicate-calls to predicate a guarded direct call

 gcc/config/arm/arm-protos.h                   |  1 +
 gcc/config/arm/arm.cc                         | 60 ++++++++++--
 gcc/config/arm/arm.md                         |  6 +-
 gcc/config/arm/arm.opt                        |  7 ++
 gcc/doc/invoke.texi                           | 24 +++++
 .../arm/cond-exec-call-indirect-1.c           | 22 +++++
 .../gcc.target/arm/cond-exec-return-1.c       | 37 +++++++
 .../gcc.target/arm/cond-exec-return-2.c       | 43 ++++++++
 .../gcc.target/arm/cond-exec-run-1.c          | 97 +++++++++++++++++++
 .../gcc.target/arm/cond-exec-sibcall-1.c      | 21 ++++
 .../gcc.target/arm/cond-exec-thumb-1.c        | 34 +++++++
 .../gcc.target/arm/predicate-calls-1.c        | 46 +++++++++
 .../gcc.target/arm/predicate-calls-2.c        | 21 ++++
 .../gcc.target/arm/predicate-calls-3.c        | 28 ++++++
 .../gcc.target/arm/predicate-calls-4.c        | 68 +++++++++++++
 15 files changed, 505 insertions(+), 10 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-call-indirect-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-return-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-return-2.c
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-run-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-sibcall-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/cond-exec-thumb-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/predicate-calls-1.c
 create mode 100644 gcc/testsuite/gcc.target/arm/predicate-calls-2.c
 create mode 100644 gcc/testsuite/gcc.target/arm/predicate-calls-3.c
 create mode 100644 gcc/testsuite/gcc.target/arm/predicate-calls-4.c

-- 
2.55.0

Reply via email to