cgraph callees availability

Paulo J. Matos pocmatos@gmail.com
Fri Jul 1 08:38:00 GMT 2011


Hi,

In TARGET_FUNCTION_OK_FOR_SIBCALL I use the number of callees of the 
current_function_decl to decide if a sibcall should be done.

I have:
int aaa[9];

__attribute__ ((noinline))
int *foo(void) { return aaa; }

__attribute__ ((noinline))
void bar(int *a) { a[0] = 0x1234; }

void test(void)
{
     int *x;
     x = foo();
     x[8] = 1;
     bar(x);
}


I then use this code in TARGET_FUNCTION_OK_FOR_SIBCALL:

     node = cgraph_get_node(current_function_decl);
     if(node == NULL)
         return false;

     for(edge = node->callees; edge; edge = edge->next_callee)
         if(++ncallees > 1)
             return false;

     return true;

In GCC4.4 function test presents 2 callees foo() and bar() and the 
sibcall is not done. In GCC4.5 the sibcall is done (but shouldn't) 
because callees in cgraph is 0x0. I wonder if this information is not 
available anymore at this point and if there's something I can do about it.

Cheers,
-- 
Paulo Matos



More information about the Gcc mailing list