This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Remove node from cgraph
On Fri, Jan 25, 2013 at 8:57 AM, Chassin <chassin@ceis.cujae.edu.cu> wrote:
> On 01/24/2013 06:43 AM, Richard Biener wrote:
>>
>> On Thu, Jan 24, 2013 at 4:46 AM, Chassin <chassin@ceis.cujae.edu.cu>
>> wrote:
>>>
>>> On 01/23/2013 02:37 PM, Richard Biener wrote:
>>>>
>>>> Please keep this on the list.
>>>>
>>>> On Wed, Jan 23, 2013 at 5:52 PM, Chassin <chassin@ceis.cujae.edu.cu>
>>>> wrote:
>>>>>
>>>>> On 01/23/2013 10:55 AM, Richard Biener wrote:
>>>>>
>>>>> The callgraph isn't the main data structure to modify here. You
>>>>> probably
>>>>> still
>>>>> have references to the function in the IL via calls for example. You
>>>>> probably
>>>>> want to remove all calls to the cgraph node.
>>>>>
>>>>> Thanks for the quick replay Sr , do you mean by removing calls the (
>>>>> edges )
>>>>> ? , but by using cgraph_remove_node it seams to delete all callee and
>>>>> callers to that node
>>>>>
>>>>>
>>>>> ....
>>>>> 01494 cgraph_node_remove_callers (node);
>>>>> 01495 cgraph_node_remove_callees (node);
>>>>> 01496 ipa_remove_all_references (&node->ref_list);
>>>>> 01497 ipa_remove_all_refering (&node->ref_list);
>>>>> ...
>>>>>
>>>>>
>>>>> in the dump file in my previous mail it shows that all edges related
>>>>> were
>>>>> removed , should i remove the reference in the GIMPLE body manually ?
>>>>> how
>>>>> ?
>>>>
>>>> You need to remove the call stmts - they are the main representation
>>>> of the edges which
>>>> get re-built when needed. You can iterate over the call statements
>>>> via the cgraph node
>>>> callers list of edges. In the cgraph edge structure you'll find a
>>>> call_stmt member. To
>>>> remove it you need to switch to the corresponding function
>>>> (push/pop_cfun,
>>>> use
>>>> DECL_STRUCT_FUNCTION (edge->caller->decl)) and then remove the stmt via
>>>> for example gsi_remove () after initializing an iterator via
>>>> gsi_for_stmt.
>>>>
>>>> That's not all of the details, you of course have to think of what to
>>>> do for other
>>>> references to the function (function pointers and later indirect
>>>> calls). You have to
>>>> think about what the point is of removing arbitrary calls throughout a
>>>> program
>>>> of course - I can't see any good reason to do this kind of stuff ;)
>>>>
>>>> Richard.
>>>>
>>>>> cheers
>>>>>
>>>>> --
>>>>> Chaddy Huussin Vazquez , Chassin@ceis.cujae.edu.cu
>>>>>
>>>>> Superior Polytechnic Institute âJose Antonio EcheverrÄaâ
>>>>> Informatics Engineering Faculty
>>>>>
>>>>> 48 Aniversario del Instituto Superior PolitÃcnico Josà Antonio
>>>>> EcheverrÃa,
>>>>> Cujae Una obra de la RevoluciÃn Cubana | 2 de diciembre de 1964 |
>>>>> http://cujae.edu.cu
>>>>>
>>>>>
>>>>> Consulte la enciclopedia colaborativa cubana. http://www.ecured.cu
>>>
>>> Hi Ms.Richard , i am new to gcc , i got confused so by removing the edge
>>> i
>>> am really not doing anything !!! cuz if the call stmt still exist , did i
>>> understood right ?
>>> if so then what really the edge represent ??
>>
>> Callgraph nodes and callgraph edges are a representation of functions
>> and call statements. The functions with their statements are the main
>> representation of the intermediate language ontop of which other
>> high-level data structures are built. The functions and their statements
>> are the representation to change.
>>
>>> , can you provide me a sample
>>> code how to do that ?
>>
>> No, because it's quite a nonsensical operation so there doesn't exist
>> an example in GCC itself I can point you to.
>>
>> Please do not continue to ask me questions privately, but post questions
>> on the mailing-list. This way other people can benefit as well from your
>> questions and answers you get.
>>
>> Richard.
>>
>>> thnx for your time
>>>
>>>
>>> --
>>> Chaddy Huussin Vazquez , Chassin@ceis.cujae.edu.cu
>>>
>>> Superior Polytechnic Institute âJose Antonio EcheverrÄaâ
>>> Informatics Engineering Faculty
>>>
>>>
>>>
>>> 48 Aniversario del Instituto Superior Politecnico Jose Antonio
>>> Echeverria,
>>> Cujae
>>> Una obra de la Revolucion Cubana | 2 de diciembre de 1964 |
>>> http://cujae.edu.cu
>>>
>>>
>>>
>>>
>>> Consulte la enciclopedia colaborativa cubana. http://www.ecured.cu
>
> Richard thnx for your feedbacks i managed to code the function here i
> provide a sample ,
>
> // This will remove just one call but i think with this we can get a
> start point to manage how to delete all other references
> char *in_str="main";
> char *to_str="f_1";
> struct cgraph_node *in_node = util_get_cgnode_by_name(in_str);
> struct cgraph_node *to_node = util_get_cgnode_by_name(to_str);
> struct cgraph_edge *edge =
> util_get_cgedge_matches_first_call(in_node,to_node);
>
> push_cfun(DECL_STRUCT_FUNCTION(in_node->decl));
> int i=0;
> basic_block bb;
> gimple_stmt_iterator gsi;
> gimple stmt;
>
> // itearte over the basic block in the current function pushed
> FOR_EACH_BB(bb)
> for (gsi=gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
> {
> stmt = gsi_stmt(gsi);
> if(stmt == edge->call_stmt)
The loops can be replaced with
gsi = gsi_for_stmt (edge->call_stmt);
> {
> gsi_remove((&gsi), true); // remove the stmt
> }
> }
>
> cgraph_remove_edge(edge);
>
>
> Sample APP calls Before
> main -> f_1
> After
> main
>
>
> --
> Chaddy Huussin Vazquez , Chassin@ceis.cujae.edu.cu
>
> Superior Polytechnic Institute âJose Antonio EcheverrÄaâ
> Informatics Engineering Faculty
>
>
>
> 48 Aniversario del Instituto Superior Politecnico Jose Antonio Echeverria,
> Cujae
> Una obra de la Revolucion Cubana | 2 de diciembre de 1964 |
> http://cujae.edu.cu
>
>
>
> Consulte la enciclopedia colaborativa cubana. http://www.ecured.cu