cris: New peephole2 movulsr + test-case.
authorHans-Peter Nilsson <hp@axis.com>
Mon, 6 Jul 2020 00:04:48 +0000 (02:04 +0200)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 6 Jul 2020 00:38:53 +0000 (02:38 +0200)
commitcf2bfc7c8013b7fc72ec5f104156fce736c2b3e1
tree323b9532fb34772c52e7ef90070a1792d69136b3
parent1e98f060280b48328e9e7f5912d63d52c3ed6814
cris: New peephole2 movulsr + test-case.

Combine likes to change a zero-extension / and + shift as seen
in the test-case source to a logical shift followed by an and of
the shifted mask, like:
 lsrq 1,r0
 and.d 0x7f,r0

This was observed in the hot loop of coremark crcu16 and crcu32,
when doing other changes affecting instruction selection.  While
fixable by other means (like instruction costs or combine
patches), I wanted to break this out from those "other means".
The similarity to extant peephole optimizations is not
deliberate.

I noticed some paths to other peephole2 test-cases have changed
due to moves and renaming, so I updated them.

gcc:
* config/cris/cris.md (movulsr): New peephole2.

gcc/testsuite:
* gcc.target/cris/peep2-movulsr.c: New test.
gcc/config/cris/cris.md
gcc/testsuite/gcc.target/cris/peep2-movulsr.c [new file with mode: 0644]