Re: cgraph callees availability

2011-07-01 Thread Paulo J. Matos
On 01/07/11 10:46, Richard Guenther wrote: You could add this logic to the tree-tailcall.c pass. I suppose what you really want is no dominating call rather than only a single call in total. Yes, that's true. I am currently porting the backend to 4.6.1 so I might do the changes in tree-tail

Re: cgraph callees availability

2011-07-01 Thread Richard Guenther
On Fri, Jul 1, 2011 at 11:41 AM, Paulo J. Matos wrote: > On 01/07/11 10:31, Richard Guenther wrote: >> >> It is being done because the edges are not kept up-to-date.  There is >> no other way to find callees but to walk all statements.  I also do not >> see a good reason why you would want to use

Re: cgraph callees availability

2011-07-01 Thread Paulo J. Matos
On 01/07/11 10:31, Richard Guenther wrote: It is being done because the edges are not kept up-to-date. There is no other way to find callees but to walk all statements. I also do not see a good reason why you would want to use the number of callees of a function to decide whether to emit sibca

Re: cgraph callees availability

2011-07-01 Thread Richard Guenther
On Fri, Jul 1, 2011 at 11:10 AM, Paulo J. Matos wrote: > > > On 01/07/11 09:38, Paulo J. Matos wrote: > >> 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

Re: cgraph callees availability

2011-07-01 Thread Paulo J. Matos
On 01/07/11 09:38, Paulo J. Matos wrote: 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 so

cgraph callees availability

2011-07-01 Thread Paulo J. Matos
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)