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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-06-15
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |WAITING

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
What target is this for?
For both x86_64 and aarch64 we have both shifts in SI mode so we don't end up
with problem.
We get the following RTL for aarch64 (before combine):
(insn 6 3 7 2 (set (reg:SI 96)
        (ashift:SI (reg/v:SI 94 [ a ])
            (const_int 16 [0x10]))) "t551.c":3:15 692
{*aarch64_ashl_sisd_or_int_si3}
     (expr_list:REG_DEAD (reg/v:SI 94 [ a ])
        (nil)))
(insn 7 6 12 2 (set (reg:SI 95)
        (ashiftrt:SI (reg:SI 96)
            (const_int 16 [0x10]))) "t551.c":3:22 696
{*aarch64_ashr_sisd_or_int_si3}
     (expr_list:REG_DEAD (reg:SI 96)
        (nil)))

And then we get:
Trying 6 -> 7:
    6: r96:SI=r97:SI<<0x10
      REG_DEAD r97:SI
    7: r95:SI=r96:SI>>0x10
      REG_DEAD r96:SI
Successfully matched this instruction:
(set (reg:SI 95)
    (sign_extend:SI (subreg:HI (reg:SI 97) 0)))
In combine.


I Noticed you have:
r76:SI=r78:DI#0<<0x10
7: r75:SI=r76:SI>>0x10

In combine, so you have a subreg of r78, where is the subreg produced ...

Reply via email to