struct int_tree_map *h;
void **loc;
- h = xmalloc (sizeof (struct int_tree_map));
+ h = XNEW (struct int_tree_map);
h->uid = uid;
h->to = to;
loc = htab_find_slot_with_hash (complex_variable_components, h,
const char *suffix, enum tree_code code)
{
tree r = create_tmp_var (type, prefix);
- add_referenced_tmp_var (r);
+ add_referenced_var (r);
DECL_SOURCE_LOCATION (r) = DECL_SOURCE_LOCATION (orig);
DECL_ARTIFICIAL (r) = 1;
;
/* If we've nothing assigned, and the value we're given is already stable,
- then install that as the value for this SSA_NAME. This pre-emptively
+ then install that as the value for this SSA_NAME. This preemptively
copy-propagates the value, which avoids unnecessary memory allocation. */
else if (is_gimple_min_invariant (value))
{
return TREE_OPERAND (t, imagpart_p);
case VAR_DECL:
+ case RESULT_DECL:
case PARM_DECL:
case INDIRECT_REF:
case COMPONENT_REF:
update_complex_components (bsi, stmt, r, i);
type = TREE_TYPE (TREE_OPERAND (mod, 1));
- TREE_OPERAND (mod, 1) = build (COMPLEX_EXPR, type, r, i);
+ TREE_OPERAND (mod, 1) = build2 (COMPLEX_EXPR, type, r, i);
update_stmt (stmt);
}
type = TREE_TYPE (type);
ssa_name = default_def (parm);
+ if (!ssa_name)
+ continue;
r = build1 (REALPART_EXPR, type, ssa_name);
i = build1 (IMAGPART_EXPR, type, ssa_name);
{
edge e;
- cond = build (COND_EXPR, void_type_node, cond, NULL, NULL);
+ cond = build3 (COND_EXPR, void_type_node, cond, NULL_TREE, NULL_TREE);
bsi_insert_before (bsi, cond, BSI_SAME_STMT);
/* Split the original block, and create the TRUE and FALSE blocks. */
bb_true = create_empty_bb (bb_cond);
bb_false = create_empty_bb (bb_true);
- t1 = build (GOTO_EXPR, void_type_node, tree_block_label (bb_true));
- t2 = build (GOTO_EXPR, void_type_node, tree_block_label (bb_false));
+ t1 = build1 (GOTO_EXPR, void_type_node, tree_block_label (bb_true));
+ t2 = build1 (GOTO_EXPR, void_type_node, tree_block_label (bb_false));
COND_EXPR_THEN (cond) = t1;
COND_EXPR_ELSE (cond) = t2;
if (bb_true)
{
- t1 = build (MODIFY_EXPR, inner_type, rr, tr);
+ t1 = build2 (MODIFY_EXPR, inner_type, rr, tr);
bsi_insert_before (bsi, t1, BSI_SAME_STMT);
- t1 = build (MODIFY_EXPR, inner_type, ri, ti);
+ t1 = build2 (MODIFY_EXPR, inner_type, ri, ti);
bsi_insert_before (bsi, t1, BSI_SAME_STMT);
- bsi_remove (bsi);
+ bsi_remove (bsi, true);
}
}
if (bb_false)
{
- t1 = build (MODIFY_EXPR, inner_type, rr, tr);
+ t1 = build2 (MODIFY_EXPR, inner_type, rr, tr);
bsi_insert_before (bsi, t1, BSI_SAME_STMT);
- t1 = build (MODIFY_EXPR, inner_type, ri, ti);
+ t1 = build2 (MODIFY_EXPR, inner_type, ri, ti);
bsi_insert_before (bsi, t1, BSI_SAME_STMT);
- bsi_remove (bsi);
+ bsi_remove (bsi, true);
}
}
\f
/* Entry point for complex operation lowering during optimization. */
-static void
+static unsigned int
tree_lower_complex (void)
{
int old_last_basic_block;
basic_block bb;
if (!init_dont_simulate_again ())
- return;
+ return 0;
complex_lattice_values = VEC_alloc (complex_lattice_t, heap, num_ssa_names);
VEC_safe_grow (complex_lattice_t, heap,
htab_delete (complex_variable_components);
VEC_free (tree, heap, complex_ssa_name_components);
VEC_free (complex_lattice_t, heap, complex_lattice_values);
+ return 0;
}
struct tree_opt_pass pass_lower_complex =
0, /* tv_id */
PROP_ssa, /* properties_required */
0, /* properties_provided */
- 0, /* properties_destroyed */
+ PROP_smt_usage, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func | TODO_ggc_collect
- | TODO_update_ssa
- | TODO_verify_stmts, /* todo_flags_finish */
+ | TODO_update_smt_usage
+ | TODO_update_ssa
+ | TODO_verify_stmts, /* todo_flags_finish */
0 /* letter */
};
\f
/* Entry point for complex operation lowering without optimization. */
-static void
+static unsigned int
tree_lower_complex_O0 (void)
{
int old_last_basic_block = last_basic_block;
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
expand_complex_operations_1 (&bsi);
}
+ return 0;
}
static bool