This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Fri, Jan 25, 2013 at 8:57 AM, Chassin <chassin@ceis.cujae.edu.cu> wrote:I changed the loop and it works pretty well .On 01/24/2013 06:43 AM, Richard Biener wrote:The loops can be replaced withOn 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.cuHi 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.cuRichard 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)
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
-- 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
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |