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