On 4/16/07, Jan Hubicka <[EMAIL PROTECTED]> wrote:
> On 4/16/07, Paulo J. Matos <[EMAIL PROTECTED]> wrote:
> >Hello all,
> >
> >I'm going through the bodies of all user-defined functions. I'm using
> >as user-defined function as one that:
> >DECL_BUILT_IN(node) == 0.
>
> >
> >Problem is that for a function (derived from a C++ file) whose output
> >from my pass is (output is self-explanatory, I think):
> >Registering cgraph node:
> >_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
> >[operator<<]... SUCCESSFUL
> >Declared on
>
>/home/pmatos/gsvt-bin/lib/gcc/x86_64-unknown-linux-gnu/4.1.1/../../../../include/c++/4.1.1/bits/ostream.tcc,
> >line 735
> >Decl Node Code is function_decl
> >Registering output void ...SUCCESSFUL
> >Arguments: __out : reference_type, __s : pointer_type
> >
> >Well, this is definitely builtin but DECL_BUILT_IN == 0, which means
> >that when I do FOR_EACH_BB_FN, I'm getting a segmentation fault
>
> First, it's not built in, because it's defined in a source file.
> Builtin functions are those defined by the compiler.
>
> Second, we should make FOR_EACH_BB_FN never crash on empty tree functions.
> It seems really rude to do otherwise.
Well, it works on empty functions,
That seems inconsistent with what he just said :)
but why would you ever want to walk
body of function that is not there?
If you just want to scan every function you have around, the obvious
way to do it is
For each function
FOR_EACH_BB_FN (function).
This is probably slightly slower than
For each function
if cgraph_function_body_availability != NOT_AVAILABLE
FOR_EACH_BB_FN (function)
But about 20x more intuitive.
cgraph_function_body_availability should be checked by IPA passes
to see what bodies are there and what can or can not change by
linking...
Again, this only matters if you care :)