http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52883

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
          Component|rtl-optimization            |target
         AssignedTo|ebotcazou at gcc dot        |unassigned at gcc dot
                   |gnu.org                     |gnu.org

--- Comment #7 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2012-04-08 
13:36:16 UTC ---
> Leaving this to RTX experts, since the code does not match the comment.

The problem is elsewhere though, namely in the zero_extendsidi2_rex64 pattern:

(define_insn "*zero_extendsidi2_rex64"
  [(set (match_operand:DI 0 "nonimmediate_operand"
            "=r ,o,?*Ym,?*y,?*Yi,!*x")
    (zero_extend:DI
     (match_operand:SI 1 "x86_64_zext_general_operand"
                "rmZ,0,r   ,m  ,r   ,m*x")))]
  "TARGET_64BIT"

The problematic RTL is generated by reload because the Z constraint is invalid
in the above pattern.  Excerpt from the manual:

"For all conversion operations, X must not be `VOIDmode' because the
mode in which to do the conversion would not be known.  The conversion
must either be done at compile-time or X must be placed into a register.

`(sign_extend:M X)'
     Represents the result of sign-extending the value X to machine
     mode M.  M must be a fixed-point mode and X a fixed-point value of
     a mode narrower than M.

`(zero_extend:M X)'
     Represents the result of zero-extending the value X to machine
     mode M.  M must be a fixed-point mode and X a fixed-point value of
     a mode narrower than M."

Reply via email to