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]

Can Some one please help me on this gcc plugin..


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.
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);
             }
       }
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]