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