1. Yes, we should be able to generalize and handle non-struct return
cases too.  However, the patch is well-tested as-is so I would prefer
to make that improvement as a separate change and do more testing.

2. add_fake_parm creates a new VCALL with return type of void, so it
will not add another fake parameter when we lower_call for the newly
generated VCALL.

On Tue, May 17, 2011 at 7:05 AM, Yin Ma <y...@absoft.com> wrote:
> Hi David,
>
>   I looked at those code. I have some concerns on this implementations.
>
> 1.  in wgen_decl.cxx/wgen_expr.cxx, the code only remove Mreturn.bar9_temp_0
> if
>   Need_Hidden_Parameter return true, which need first fake argument.
>   Should we also remove temp_0 for the case that the return value doesn't
>   require the first fake argument because temp copy is also not neccesary?
>   Normalize to
>      MCALL bar9
>   MSTID return_decl_1885
>    for all the cases? And leave for backend to handle the conversion for
>    better compatibility because the frontend should not use too much
>    about lower level information such as ABI.
>
> 2. I am also wondering in wn_lower.cxx, after lower_return_mstid is called
> and
>   add_fake_parm is called. And later when the backend runs to lower_call,
>   .vcall will not be generated?
>
> Because I cannot integrate those changes into the backend and actually run
> the
> code, my questions may be ambigurous.
>
>
>                                                 Yin
>
>
>
>
> ----- Original Message ----- From: "David Coakley" <dcoak...@gmail.com>
> To: "Sun Chan" <sun.c...@gmail.com>
> Cc: "open64-devel" <open64-devel@lists.sourceforge.net>
> Sent: Monday, May 16, 2011 10:40 PM
> Subject: Re: [Open64-devel] patch for better AMD64 ABI compatibility
>
>
>> It is generic.  The document that describes the ABI (from
>> http://www.x86-64.org) uses the term AMD64 instead of x8664, but the
>> same ABI is used for Intel too.
>>
>> On Mon, May 16, 2011 at 6:22 PM, Sun Chan <sun.c...@gmail.com> wrote:
>>>
>>> is this AMD64 ABI or generic X8664 ABI? I guess I don't know much
>>> about Intel vs AMD ABI differences, if there is.
>>> Sun
>>>
>>> On Tue, May 17, 2011 at 8:01 AM, David Coakley <dcoak...@gmail.com>
>>> wrote:
>>>>
>>>> (Attachment added this time.)
>>>>
>>>> On Mon, May 16, 2011 at 5:01 PM, David Coakley <dcoak...@gmail.com>
>>>> wrote:
>>>>>
>>>>> Could a gatekeeper review the attached patch? It fixes some AMD64 ABI
>>>>> compatibility problems and also eliminates some unnecessary struct
>>>>> copies. The second part should apply to all targets.
>>>>>
>>>>> Here is the proposed log message:
>>>>>
>>>>>
>>>>> Improve AMD64 ABI compliance and avoid unnecessary struct copies.
>>>>>
>>>>> For the following code, the compiler generated unnecessary struct
>>>>> copies
>>>>> for a return value that has a size too big to be passed in registers.
>>>>>
>>>>> typedef struct { char big[1024]; } C;
>>>>> C gc;
>>>>> extern C bar9 (void);
>>>>> extern C check9 (void) { return bar9 (); }
>>>>>
>>>>> In this case there were two copies and one temporary variable
>>>>> generated.
>>>>> After this change the compiler does not generate any extra copies.
>>>>>
>>>>> According to the AMD64 ABI, the caller provides space for the return
>>>>> value in a hidden first argument and this address is returned in %rax.
>>>>> Previously the compiler was not following this rule.
>>>>>
>>>>> The change handles the similar cases of initialization by function
>>>>> call ("C c = bar9();") and assignment to a pointer ("*cp = bar9()").
>>>>>
>>>>> Also, a complex long double field is now returned in the register pair
>>>>> (%st0, %st1) as specified by the AMD64 ABI.
>>>>>
>>>>>
>>>>>
>>>>> I am still looking for a review for the patch I posted last week (May
>>>>> 10) as well. Thanks,
>>>>>
>>>>> -David Coakley / AMD Open Source Compiler Engineering
>>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Achieve unprecedented app performance and reliability
>>>> What every C/C++ and Fortran developer should know.
>>>> Learn how Intel has extended the reach of its next-generation tools
>>>> to help boost performance applications - inlcuding clusters.
>>>> http://p.sf.net/sfu/intel-dev2devmay
>>>> _______________________________________________
>>>> Open64-devel mailing list
>>>> Open64-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>>>
>>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Achieve unprecedented app performance and reliability
>> What every C/C++ and Fortran developer should know.
>> Learn how Intel has extended the reach of its next-generation tools
>> to help boost performance applications - inlcuding clusters.
>> http://p.sf.net/sfu/intel-dev2devmay
>> _______________________________________________
>> Open64-devel mailing list
>> Open64-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>
>>
>
>

------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to