On Fri, Apr 30, 2010 at 3:35 PM, Massimo Nazaria <ma...@rocketmail.com> wrote: >> You'll have to post your work so people can see. Now the >> best the >> experts here can do is guess what you're holding behind >> your back :-) >> >> Ciao! >> Steven >> > > I completely agree with you. This is my pass: > > static unsigned int > execute_mypass (void) > { > basic_block bb; > gimple stmt, def_stmt; > gimple_stmt_iterator gsi; > struct cgraph_node *node; > unsigned int rhs_code_class; > > if (flag_mypass) > { > for (node = cgraph_nodes; node; node = node->next) > { > if (node->analyzed && cgraph_is_master_clone (node)) > { > push_cfun (DECL_STRUCT_FUNCTION (node->decl)); > > FOR_EACH_BB (bb) > { > for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next > (&gsi)) > { > stmt = gsi_stmt (gsi); > > if (gimple_code (stmt) == GIMPLE_ASSIGN) > { > /* Check if the assignment is acctually > a function call. For example: > D.1 = func (args...); > a.9 = D.1 > a = a.9 > The last one is seen as a GIMPLE_ASSIGN stmt > but I want to check if it refers to a function call > */ > > rhs_code_class = get_gimple_rhs_class > (gimple_assign_rhs_code (stmt)); > if ((rhs_code_class == GIMPLE_UNARY_RHS) || > (rhs_code_class == GIMPLE_SINGLE_RHS)) > { > if (is_temporary_var (gimple_assign_rhs1 > (stmt))) // e.g.: a.1, D.1234...
This check is critical - if it is not verifying that TREE_CODE (gimple_Assign_rhs1 (Stmt)) == SSA_NAME then it's wrong. > { > def_stmt = SSA_NAME_DEF_STMT > (gimple_assign_rhs1 (stmt)); > > fprintf (dump_file, "gimple_code: %d\n", > gimple_code (def_stmt)); // Here I get segmentation fault... > } > } > } > } > } > pop_cfun (); > } > } > } > > return 0; > } > > The problem is that "SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt))" does not > return a gimple stmt. I think that's because, when I make a dump of the stmts > with the code above, this one has not the SSA-form. But if only use the > FOR_EACH (bb), without "for (node = cgraph_nodes; ...", the SS-form is OK and > SSA_NAME_DEF_STMT works well. > > How can I do? > > Thank you! > > > >