Skip to content

Commit 5eddd27

Browse files
author
wilco
committed
[ARM] Cleanup logical DImode operations
Cleanup the logical DImode operations since the current implementation is way too complicated. Thumb-1, Thumb-2, VFP/Neon and iwMMXt all work differently, resulting in a bewildering number of expansions, patterns and splits across several md files. All this complexity is counterproductive and results in inefficient code. A much simpler approach is to split these operations early in the expander so that optimizations and register allocation are applied on the 32-bit halves. Codegeneration is unchanged on Thumb-1 and Arm/Thumb-2 without Neon or iwMMXt (which already expand these instructions early). With Neon these changes save ~1000 instructions from the PR77308 testcase, mostly by significantly reducing register pressure and spilling. Bootstrap OK on arm-none-linux-gnueabihf --with-cpu=cortex-a57 gcc/ * config/arm/arm.md (split and/eor/ior): Remove Neon check. (split not): Add DImode not splitter. (anddi3): Remove pattern. (anddi3_insn): Likewise. (anddi_zesidi_di): Likewise. (anddi_sesdi_di): Likewise. (anddi_notdi_di): Likewise. (anddi_notzesidi_di): Likewise. (anddi_notsesidi_di): Likewise. (iordi3): Likewise. (iordi3_insn): Likewise. (iordi_zesidi_di): Likewise. (iordi_sesidi_di): Likewise. (xordi3): Likewise. (xordi3_insn): Likewise. (xordi_sesidi_di): Likewise. (xordi_zesidi_di): Likewise. (one_cmpldi2): Likewise. (one_cmpldi2_insn): Likewise. * config/arm/constraints.md: Remove De, Df, Dg constraints. * config/arm/iwmmxt.md (iwmmxt_iordi3): Remove general register alternative. (iwmmxt_xordi3): Likewise. (iwmmxt_anddi3): Likewise. * config/arm/neon.md (orndi3_neon): Remove pattern. (anddi_notdi_di): Likewise. * config/arm/predicates.md (arm_anddi_operand_neon): Remove. (arm_iordi_operand_neon): Likewise. (arm_xordi_operand_neon): Likewise. * config/arm/thumb2.md(iordi_notdi_di): Remove pattern. (iordi_notzesidi_di): Likewise. (iordi_notdi_zesidi): Likewise. (iordi_notsesidi_di): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@274823 138bc75d-0d04-0410-961f-82ee72b054a4
1 parent a02b858 commit 5eddd27

File tree

7 files changed

+65
-713
lines changed

7 files changed

+65
-713
lines changed

gcc/ChangeLog

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,39 @@
1+
2019-08-22 Wilco Dijkstra <wdijkstr@arm.com>
2+
3+
* config/arm/arm.md (split and/eor/ior): Remove Neon check.
4+
(split not): Add DImode not splitter.
5+
(anddi3): Remove pattern.
6+
(anddi3_insn): Likewise.
7+
(anddi_zesidi_di): Likewise.
8+
(anddi_sesdi_di): Likewise.
9+
(anddi_notdi_di): Likewise.
10+
(anddi_notzesidi_di): Likewise.
11+
(anddi_notsesidi_di): Likewise.
12+
(iordi3): Likewise.
13+
(iordi3_insn): Likewise.
14+
(iordi_zesidi_di): Likewise.
15+
(iordi_sesidi_di): Likewise.
16+
(xordi3): Likewise.
17+
(xordi3_insn): Likewise.
18+
(xordi_sesidi_di): Likewise.
19+
(xordi_zesidi_di): Likewise.
20+
(one_cmpldi2): Likewise.
21+
(one_cmpldi2_insn): Likewise.
22+
* config/arm/constraints.md: Remove De, Df, Dg constraints.
23+
* config/arm/iwmmxt.md (iwmmxt_iordi3): Remove general register
24+
alternative.
25+
(iwmmxt_xordi3): Likewise.
26+
(iwmmxt_anddi3): Likewise.
27+
* config/arm/neon.md (orndi3_neon): Remove pattern.
28+
(anddi_notdi_di): Likewise.
29+
* config/arm/predicates.md (arm_anddi_operand_neon): Remove.
30+
(arm_iordi_operand_neon): Likewise.
31+
(arm_xordi_operand_neon): Likewise.
32+
* config/arm/thumb2.md(iordi_notdi_di): Remove pattern.
33+
(iordi_notzesidi_di): Likewise.
34+
(iordi_notdi_zesidi): Likewise.
35+
(iordi_notsesidi_di): Likewise.
36+
137
2019-08-22 Richard Earnshaw <rearnsha@arm.com>
238

339
* config/arm/arm.md (iorsi3_compare0): Add alternative for 16-bit thumb

0 commit comments

Comments
 (0)