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

--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to Jeffrey A. Law from comment #3)
> sh4eb is showing similar failures

Is this the same issue:

static machine_mode
sh_promote_function_mode (const_tree type, machine_mode mode, 
                          int *punsignedp, const_tree funtype,
                          int for_return)
{
  if (sh_promote_prototypes (funtype))
    return promote_mode (type, mode, punsignedp);
  else  
    return default_promote_function_mode (type, mode, punsignedp, funtype,
                                          for_return);
}

The incoming int arg is promoted to SImode:

machine_mode
promote_function_mode (const_tree type, machine_mode mode, int *punsignedp,
                       const_tree funtype, int for_return)
{
  /* Called without a type node for a libcall.  */
  if (type == NULL_TREE)
    {
      if (INTEGRAL_MODE_P (mode))
        return targetm.calls.promote_function_mode (NULL_TREE, mode,
                                                    punsignedp, funtype,
                                                    for_return);
      else
        return mode;
    }

  switch (TREE_CODE (type))
    {
    case INTEGER_TYPE:   case ENUMERAL_TYPE:   case BOOLEAN_TYPE:
    case REAL_TYPE:      case OFFSET_TYPE:     case FIXED_POINT_TYPE:
    case POINTER_TYPE:   case REFERENCE_TYPE:
      return targetm.calls.promote_function_mode (type, mode, punsignedp,
funtype,
                                                  for_return);

    default:
      return mode;
    }
}

Reply via email to