On Thu, Sep 02, 2010 at 07:18:29PM +0700, Phung Nguyen wrote:
> I am porting GCC to a new target. I don't know how to get attribute of
> callee of a call.
> 
> I defined a new attribute to assign to a function but when writing for
> pattern name "call" or "call_value", I don't know how to know if the
> callee is assigned the attribute.  As the code for the call depends on
> the attribute of the callee, I need to get the corresponding function
> decl tree. As the operand of "call" or "call_value" might be
> SYMBOL_REF (direct call) or REG (indirect call), I don't know how to
> get the function declaration (fndecl).

>From SYMBOL_REF you just look at SYMBOL_REF_DECL, which will most often be a
FUNCTION_DECL of the called function.
For indirect call, most often (unless the optimizers have done a bad job)
you don't know what function will be called.  So, if your attribute is
supposed to change behavior of a call, including indirect calls, you'd
better make it a type attribute and arrange during expand to use a different
call pattern if the called function's type has that attribute.  At final
time for indirect calls the called fn FUNCTION_TYPE is no longer available.

        Jakub

Reply via email to