arm: Avoid indirection with -mpure-code on v6m (PR96967)
authorChristophe Lyon <christophe.lyon@linaro.org>
Mon, 2 Nov 2020 07:31:22 +0000 (07:31 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Mon, 2 Nov 2020 07:31:22 +0000 (07:31 +0000)
commit4d9af90d6a216822fe117337fb9836ba656dc3af
treeba0dcb7edd4d81c1746dd136ae4e85e1e13c582d
parent590febb5f6624f78b36402a7c9a9c318978f1efa
arm: Avoid indirection with -mpure-code on v6m (PR96967)

With -mpure-code on v6m (thumb-1), to avoid a useless indirection when
building the address of a symbol, we want to consider SYMBOL_REF as a
legitimate constant. This way, we build the address using a series of
upper/lower relocations instead of loading the address from memory.

This patch also fixes a missing "clob" conds attribute for
thumb1_movsi_insn, needed because that alternative clobbers the flags.

2020-11-02  Christophe Lyon  <christophe.lyon@linaro.org>

gcc/
PR target/96967
* config/arm/arm.c (thumb_legitimate_constant_p): Add support for
disabled literal pool in thumb-1.
* config/arm/thumb1.md (thumb1_movsi_symbol_ref): Remove.
(*thumb1_movsi_insn): Add support for SYMBOL_REF with -mpure-code.

gcc/testsuite
PR target/96967
* gcc.target/arm/pure-code/pr96767.c: New test.
gcc/config/arm/arm.c
gcc/config/arm/thumb1.md
gcc/testsuite/gcc.target/arm/pure-code/pr96767.c [new file with mode: 0644]