On Wed, Feb 12, 2014 at 10:22 PM, Mohsin Khan <mohsin1510@xxxxxxxxx> wrote: > Hi, > > I am developing plugins for the GCC-4.8.2. I am a newbie in plugins. > I wrote a plugin and tried to count and see the Goto Statements using > the gimple_stmt_iterator. I get gimple statements printed on my > stdout, but I am not able to find the line which has goto statements. Try using gimple_lineno() > I only get other lines such as variable declaration and logic > statements, but no goto statements. > When I open the Gimple/SSA/CFG file seperately using the vim editor > I find the goto statements are actually present. > So, can anyone help me. How can I actually get the count of Goto > statements or atleast access these goto statements using some > iterator. > I have used -fdump-tree-all, -fdump-tree-cfg as flags. > > Here is the pseudocode: > > struct register_pass_info pass_info = { > &(pass_plugin.pass), /* Address of new pass, > here, the 'struct > opt_pass' field of > 'gimple_opt_pass' > defined above */ > "ssa", /* Name of the reference > pass for hooking up > the new pass. ??? */ > 0, /* Insert the pass at the > specified instance > number of the reference > pass. Do it for > every instance if it is 0. */ > PASS_POS_INSERT_AFTER /* how to insert the new > pass: before, > after, or replace. Here > we are inserting > a pass names 'plug' after > the pass named > 'pta' */ > }; > > > ............. > > static unsigned int dead_code_elimination (void) > { > > FOR_EACH_BB_FN (bb, cfun) > { > // gimple_dump_bb(stdout,bb,0,0); > // printf("\nIn New BB"); > > gsi2= gsi_after_labels (bb); > print_gimple_stmt(stdout,gsi_stmt(gsi2),0,0); > /*Iterating over each gimple statement in a basic block*/ > for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) > { > g = gsi_stmt(gsi); > > print_gimple_stmt(stdout,g,0,0); > > if (gimple_code(g)==GIMPLE_GOTO) > printf("\nFound GOTO stmt\n"); > > > print_gimple_stmt(stdout,gsi_stmt(gsi),0,0); > // analyze_gimple_statement (gsi); > } > } > }