[Bug target/44532] x86-64 unnecessary parameter extension

jakub at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Mon Jun 14 08:02:00 GMT 2010



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



More information about the Gcc-bugs mailing list