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]

Re: Assigning a value to a temp var in GIMPLE SSA


Hi,

> I'm trying to add a simple statement to GIMPLE code adding a new pass,
> that I put in pass_tree_loop.sub as last pass just before
> pass_tree_loop_done pass. Just as test I'd like to add a call like:
> 
> .palp = shmalloc (16);
> 
> This is the code I'm using:
> 
>              t = build_function_type_list (ptr_type_node,
> integer_type_node, NULL_TREE);
>              decl = build_fn_decl ("shmalloc", t);
>              t = build_int_cst (integer_type_node, 16);
>              args = tree_cons (NULL, t, NULL);
>              t = build_function_call_expr (decl, args);
>              TREE_SIDE_EFFECTS (t) = 1;
> 
>              palpstruct = create_tmp_var (ptr_type_node, ".palp");
>              add_referenced_var (palpstruct);
>              t1 = build2 (MODIFY_EXPR, ptr_type_node, palpstruct, t);

depending on what version of gcc you use, you might need to use

t1 = build_gimple_modify_stmt (palpstruct, t);

>              t2 = make_ssa_name (palpstruct, NULL);

t2 = make_ssa_name (palpstruct, t1);

>              DECL_ARTIFICIAL (t1) = 1;
>              TREE_SIDE_EFFECTS (t1) = 1;
>              DECL_EXTERNAL (t1) = 1;

remove these three statements (t1 is not decl, and setting
TREE_SIDE_EFFECTS of t1 is not necessary).

>              TREE_OPERAND (t1, 0) = t2;
>              bsi_insert_after (&si, t1, BSI_CONTINUE_LINKING);
> 
> If I try to add just the shmalloc(16); statement it works, but if I
> add the code to assign the result to a temporary variable, gcc
> segfaults while executing the vrp2 pass in tree-vrp.c. Could someone
> point me to the right direction? What am I doing wrong?

It may also turn out to be necessary to ensure that virtual operands
are updated,

Zdenek


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