------- Comment #1 from jakub at gcc dot gnu dot org 2010-06-14 08:01 ------- tempreg = convert_to_mode (data->nominal_mode, tempreg, unsignedp);
if (GET_CODE (tempreg) == SUBREG && GET_MODE (tempreg) == data->nominal_mode && REG_P (SUBREG_REG (tempreg)) && data->nominal_mode == data->passed_mode && GET_MODE (SUBREG_REG (tempreg)) == GET_MODE (data->entry_parm) && GET_MODE_SIZE (GET_MODE (tempreg)) < GET_MODE_SIZE (GET_MODE (data->entry_parm))) { /* The argument is already sign/zero extended, so note it into the subreg. */ SUBREG_PROMOTED_VAR_P (tempreg) = 1; SUBREG_PROMOTED_UNSIGNED_SET (tempreg, unsignedp); } For x86_64 and short/char, all the conditions above are true except that nominal_mode (HImode) != passed_mode (SImode). -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hubicka at gcc dot gnu dot | |org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44532