I asked the question about the name compatibility for CALL_EXPR in SSA form. Thanks for the answers from this mailing list. My understanding is that we don't need to convert a stmt node into SSA form as long as the call instruction (CALL_EXPR) does not use any variable as an argument.

But the following simple example make GCC crash, the error is caused by loop_commit_inserts () operation. i.e., when loop_commit_inserts () does bsi_commit_inserts(), the internal data structure is not compatible. (Note: stmt is a CALL_EXPR like void my_special_counter(void), which does not have any argument.)
-----------------------------------------------------------------------------
static
void inserting_call_expr(struct loops *loops){

 tree functype;
 tree stmt, decl;
 basic_block src, dest, new_bb;
 int i;
   for (i = 1; i < loops->num; i++)
   {
     struct loop *loop = loops->parray[i];
     edge e_instrument;
     if (!loop)
       continue;
     e_instrument = loop_preheader_edge (loop);
     functype = build_function_type (void_type_node, NULL_TREE);
decl = build_decl (FUNCTION_DECL, get_identifier ("my_special_counter"), functype);
     stmt = build_function_call_expr (decl, NULL_TREE);
     bsi_insert_on_edge(e_instrument, stmt);
   }
 loop_commit_inserts ();
}
--------------------------------------------------------------------------


Can someone give me some further info? I read the code in tree-ssa-*.c and only found code that transforms MODIFY_EXPR nodes from GIMPLE IR to SSA form, like this piece of code in tree-vect-transform.c
----------------converting MODIFY_EXPR into SSA---------------------------
 tmp = create_tmp_var (integer_type_node, "update");
 add_referenced_tmp_var (tmp);
 size = TYPE_SIZE (vect_ptr_type);
 type = lang_hooks.types.type_for_size (tree_low_cst (size, 1), 1);
 ptr_update = create_tmp_var (type, "update");
 add_referenced_tmp_var (ptr_update);
 vectype_size = TYPE_SIZE_UNIT (vectype);
 vec_stmt = build2 (MULT_EXPR, integer_type_node, idx, vectype_size);
 vec_stmt = build2 (MODIFY_EXPR, void_type_node, tmp, vec_stmt);
 new_temp = make_ssa_name (tmp, vec_stmt);
 TREE_OPERAND (vec_stmt, 0) = new_temp;
 bsi_insert_before (bsi, vec_stmt, BSI_SAME_STMT);
-------------------------------------------------

_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today - it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

Reply via email to