[Bug target/88856] [8/9 Regression] gfortran producing wrong code with -funroll-loops

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Feb 6 16:33:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88856

--- Comment #22 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
What we could do there is remove the first of those two splitters, remove the
&& !dead_or_set_p (insn, operands[1])
test from the second, and add peephole2 that would transform
   (set (access part 1) (subreg:SI (match_dup 1) low))
   (set (match_dup 1) (rotate:DI (match_dup 1) (const_int 32)))
   (set (access part 2) (subreg:SI (match_dup 1) low))
with a lshiftrt instead of rotate if reg 1 is dead after the third insn
(assuming rotate is more expensive as right shift, if it is the same
expensive/same size, then having the two splitters makes no sense).  The last
rotate should have been removed by DCE already if it was truly dead (though, of
course, if it for some reason isn't yet, you could have another peephole2 for
that too).


More information about the Gcc-bugs mailing list