On Fri, Mar 1, 2013 at 3:56 PM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> But in theory this pessimizes code as aggregate_value_p returned true
>> for this?  That is, isn't the bug that we rewrite a possible
>> return-slot-decl into SSA?  (do we do that here?)
>
> Yes, aggregate_value_p returns true for this because the ABI says that this
> type is returned in memory.  And, no, I don't think that this will further
> pessimize, given that it's already "pessimized" in gimplify_modify_expr_rhs:
>
>         case CALL_EXPR:
>           /* For calls that return in memory, give *to_p as the CALL_EXPR's
>              return slot so that we don't generate a temporary.  */
>           if (!CALL_EXPR_RETURN_SLOT_OPT (*from_p)
>               && aggregate_value_p (*from_p, *from_p))
>             {
>               bool use_target;
>
>               if (!(rhs_predicate_for (*to_p))(*from_p))
>                 /* If we need a temporary, *to_p isn't accurate.  */
>                 use_target = false;
>               /* It's OK to use the return slot directly unless it's an NRV. 
> */
>               else if (TREE_CODE (*to_p) == RESULT_DECL
>                        && DECL_NAME (*to_p) == NULL_TREE
>                        && needs_to_live_in_memory (*to_p))
>                 use_target = true;
>               else if (is_gimple_reg_type (TREE_TYPE (*to_p))
>                        || (DECL_P (*to_p) && DECL_REGISTER (*to_p)))
>                 /* Don't force regs into memory.  */
>                 use_target = false;

Ah, ok.  Patch is ok then.

Thanks,
Richard.

> --
> Eric Botcazou

Reply via email to