aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/frontend-passes.c
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2016-02-26 19:49:18 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2016-02-26 19:49:18 +0100
commitd1f2bea53f8990253f655cfa22815046efb2ed87 (patch)
treea2ab31b8e1412e6c8eac442b1a4af5a6c6090a3e /gcc/fortran/frontend-passes.c
parent4a4f9d2bf86ef5f48d45ad39802d34dc349f6509 (diff)
downloadgcc-d1f2bea53f8990253f655cfa22815046efb2ed87.zip
gcc-d1f2bea53f8990253f655cfa22815046efb2ed87.tar.gz
gcc-d1f2bea53f8990253f655cfa22815046efb2ed87.tar.bz2
powerpc: Handle DImode rotatert implemented with rlwinm (PR69946)
Some DImode rotate-right-and-mask can be implemented best with a rlwinm instruction: those that could be a lshiftrt instead of a rotatert, while the mask is not right-aligned. Why the rotate in the testcase is not optimised to a plain shift is another question, but we need to handle it here anyway. We compute the shift amount for a 64-bit rotate. This is 32 too high in this case; if we print using %h that is masked out (and this doesn't silently let through invalid instructions, everything is checked by rs6000_is_valid_shift_mask which is much more thorough). PR target/69946 * config/rs6000/rs6000.c (rs6000_insn_for_shift_mask): Print rlwinm shift amount using %h. Add comment. gcc/testsuite/ * gcc.target/powerpc/pr69946.c: New file. From-SVN: r233755
Diffstat (limited to 'gcc/fortran/frontend-passes.c')
0 files changed, 0 insertions, 0 deletions