This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/80425] Extra inter-unit register move with zero-extension


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

--- Comment #6 from Uroš Bizjak <ubizjak at gmail dot com> ---
Mostly fixed, an issue from Comment #4 remains, although *zero_extendsidi2
pattern now reads:

(define_insn "*zero_extendsidi2"
  [(set (match_operand:DI 0 "nonimmediate_operand"
                "=r,?r,?o,r   ,o,?*Ym,?!*y,?r ,?r,?*Yi,*x,*x,*v,*r")
        (zero_extend:DI
         (match_operand:SI 1 "x86_64_zext_operand"
                "0 ,rm,r ,rmWz,0,r   ,m   ,*Yj,*x,r   ,m ,*x,*v,*k")))]

LRA starts with:

    7: r96:DI=zero_extend([`a'])
   12: r92:V8DI#0=r95:V16SI>>r96:DI
      REG_DEAD r96:DI
      REG_DEAD r95:V16SI

and creates:

    7: ax:DI=zero_extend([`a'])
   21: [bp:DI-0x38]=ax:DI
   22: xmm1:DI=[bp:DI-0x38]
   12: xmm0:V16SI=xmm0:V16SI>>xmm1:DI

xmm0 could be zero-extended directly from memory.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]