aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorWilco Dijkstra <wilco.dijkstra@arm.com>2022-05-18 16:06:57 +0100
committerWilco Dijkstra <wdijkstr@arm.com>2022-05-20 15:10:38 +0100
commit48f3f27f607d3c145ed1e3ad652baac84aacdb91 (patch)
tree634988a7a0a3ca93a1c176080f168444f85723e6 /gcc/fortran
parent1be715f31605976d8e4336973d3b81c5b7cea79f (diff)
downloadgcc-48f3f27f607d3c145ed1e3ad652baac84aacdb91.zip
gcc-48f3f27f607d3c145ed1e3ad652baac84aacdb91.tar.gz
gcc-48f3f27f607d3c145ed1e3ad652baac84aacdb91.tar.bz2
AArch64: Improve rotate patterns
Improve and generalize rotate patterns. Rotates by more than half the bitwidth of a register are canonicalized to rotate left. Many existing shift patterns don't handle this case correctly, so add rotate left to the shift iterator and convert rotate left into ror during assembly output. Add missing zero_extend patterns for shifted BIC, ORN and EON. gcc/ * config/aarch64/aarch64.md (and_<SHIFT:optab><mode>3_compare0): Support rotate left. (and_<SHIFT:optab>si3_compare0_uxtw): Likewise. (<LOGICAL:optab>_<SHIFT:optab><mode>3): Likewise. (<LOGICAL:optab>_<SHIFT:optab>si3_uxtw): Likewise. (one_cmpl_<optab><mode>2): Likewise. (<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3): Likewise. (<LOGICAL:optab>_one_cmpl_<SHIFT:optab>sidi_uxtw): New pattern. (eor_one_cmpl_<SHIFT:optab><mode>3_alt): Support rotate left. (eor_one_cmpl_<SHIFT:optab>sidi3_alt_ze): Likewise. (and_one_cmpl_<SHIFT:optab><mode>3_compare0): Likewise. (and_one_cmpl_<SHIFT:optab>si3_compare0_uxtw): Likewise. (and_one_cmpl_<SHIFT:optab><mode>3_compare0_no_reuse): Likewise. (and_<SHIFT:optab><mode>3nr_compare0): Likewise. (*<optab>si3_insn_uxtw): Use SHIFT_no_rotate. (rolsi3_insn_uxtw): New pattern. * config/aarch64/iterators.md (SHIFT): Add rotate left. (SHIFT_no_rotate): Add new iterator. (SHIFT:shift): Print rotate left as ror. (is_rotl): Add test for left rotate. gcc/testsuite/ * gcc.target/aarch64/ror_2.c: New test. * gcc.target/aarch64/ror_3.c: New test.
Diffstat (limited to 'gcc/fortran')
0 files changed, 0 insertions, 0 deletions