v2 changes only tests. The Linaro CI applied the series without the callee-save cost hooks it builds on, and three call tests matched only with them. They now use shapes that compile the same either way, and accept a (PLT) suffix. The code is unchanged.
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 | 23 +++++ .../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 | 41 ++++++++ .../gcc.target/arm/predicate-calls-2.c | 20 ++++ .../gcc.target/arm/predicate-calls-3.c | 28 ++++++ .../gcc.target/arm/predicate-calls-4.c | 68 +++++++++++++ 15 files changed, 500 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
