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

--- Comment #3 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> but we do:
> 6987        /* Handle calls that return values in multiple non-contiguous
> locations.
> 6988           The Irix 6 ABI has examples of this.  */
> 6989        if (GET_CODE (temp) == PARALLEL)
> 6990          {
> 6991            HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp));
> 6992            scalar_int_mode temp_mode
> 6993              = smallest_int_mode_for_size (size * BITS_PER_UNIT);
> 6994            rtx temp_target = gen_reg_rtx (temp_mode);
> 6995            emit_group_store (temp_target, temp, TREE_TYPE (exp), size);
> 6996            temp = temp_target;
> 6997          }
> 
> and starting from that temp has a wrong mode (DImode) rather than the
> desired one (SCmode).  I must say I really don't understanding this change,
> before that temp_mode was GET_MODE (temp) except when it was BLKmode or
> VOIDmode.

As stated in the ChangeLog, the point was to avoid clobbering MODE, but I agree
that it's probably a little too bold.

Reply via email to