Remove node from cgraph

Chassin chassin@ceis.cujae.edu.cu
Fri Jan 25 19:07:00 GMT 2013


On 01/25/2013 09:21 AM, Richard Biener wrote:
> 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
I changed the loop  and it works pretty well .

-- 
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



More information about the Gcc mailing list