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."