[ARM] Add logical DImode expanders
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 18 Sep 2019 19:52:09 +0000 (19:52 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Wed, 18 Sep 2019 19:52:09 +0000 (19:52 +0000)
commit1ea956609a5a4ac12841ef86353995bd434fa1ef
tree04a0a7e9b8668596a3050d3f99b2ce21094b21d6
parent7706f2f312a87b0c8509cccc986d6372dcd2fbcf
[ARM] Add logical DImode expanders

We currently use default mid-end expanders for logical DImode operations.
These split operations without first splitting off complex immediates or
memory operands.  The resulting expansions are non-optimal and allow for
fewer LDRD/STRD opportunities.  So add back explicit expanders which ensure
memory operands and immediates are handled more efficiently.

    gcc/
PR target/91738
* config/arm/arm.md (<logical_op>di3): Expand explicitly.
(one_cmpldi2): Likewise.
* config/arm/arm.c (const_ok_for_dimode_op): Return true if one
of the constant parts is simple.
* config/arm/iterators.md (LOGICAL): Add new code iterator.
(logical_op): Add new code attribute.
(logical_OP): Likewise.
* config/arm/predicates.md (arm_anddi_operand): Add predicate.
(arm_iordi_operand): Add predicate.
(arm_xordi_operand): Add predicate.

From-SVN: r275907
gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/arm/arm.md
gcc/config/arm/iterators.md
gcc/config/arm/predicates.md