combine: Convert subreg-of-lshiftrt to zero_extract properly (PR78390)
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 23 Nov 2016 14:33:13 +0000 (15:33 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 23 Nov 2016 14:33:13 +0000 (15:33 +0100)
commit712871dde1fb2d29b4f742fababb645cd3b1dbbe
tree35a38cefb14ddb97781f6cba2e1483e9cc17ac3c
parent33951763a85087927068d553be6709cd03953a09
combine: Convert subreg-of-lshiftrt to zero_extract properly (PR78390)

r242414, for PR77881, introduces some bugs (PR78390, PR78438, PR78477).
It all has the same root cause: that patch makes combine convert every
lowpart subreg of a logical shift right to a zero_extract.  This cannot
work at all if it is not a constant shift, and it has to be a bit more
careful exactly which bits it extracts.

PR target/77881
PR bootstrap/78390
PR target/78438
PR bootstrap/78477
* combine.c (make_compound_operation_int): Do not convert a subreg of
a non-constant logical shift right to a zero_extract.  Handle the case
where some zero bits have been shifted into the range covered by that
subreg.

From-SVN: r242757
gcc/ChangeLog
gcc/combine.c