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

--- Comment #5 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongtao.liu from comment #4)
> > 
> > and it hit REG_P (XEXP (x, 1)), XEXP (x, 1) is invalid for subreg, so
> > set_rtl  here doesn't accept subreg?
> 
> typo, it hit gcc_assert that if X is not REG, it must be CONCAT or PARALLEL,
> but here is SUBREG, so gcc_assert failed.

in extract_bit_bitfield_1
target: (reg/v:DF 153)
op0: (mem/c:DF (plus:SI (reg/f:SI 103 virtual-incoming-args)
        (const_int 24 [0x18])) [1 d+0 S8 A32])


in good case, it will move op0 to target by 2 32-bit loads

---cut from  extract_integral_bit_field-----

  /* Handle fields bigger than a word.  */

  if (bitsize > BITS_PER_WORD)
    {
      /* Here we transfer the words of the field
         in the order least significant first.
         This is because the most significant word is the one which may
         be less than full.  */
--------cut end-------

after my changed, it will return (subreg:DF (reg: DI 0))

Reply via email to