tree-scalar-evolution.c (scev_const_prop): Add arguments to force_gimple_operand_bsi.

* tree-scalar-evolution.c (scev_const_prop): Add arguments to
	force_gimple_operand_bsi.
	* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr,
	rewrite_use_compare): Ditto.
	* tree-ssa-address.c (gimplify_mem_ref_parts, create_mem_ref):
	Ditto.
	* tree-ssa-ifcombine.c (ifcombine_ifandif): Ditto.
	* tree-ssa-loop-prefetch.c (issue_prefetch_ref): Ditto.
	* lambda-code.c (replace_uses_equiv_to_x_with_y): Ditto.
	* tree-profile.c (prepare_instrumented_value,
	tree_gen_interval_profiler, tree_gen_pow2_profiler,
	tree_gen_one_value_profiler, tree_gen_ic_profiler,
	tree_gen_ic_func_profiler, tree_gen_average_profiler,
	tree_gen_ior_profiler): Ditto.
	* tree-ssa-reassoc.c (negate_value): Ditto.
	* matrix-reorg.c (transform_access_sites, transform_allocation_sites):
	Use force_gimple_operand_bsi.
	* tree-vect-transform.c (vect_update_ivs_after_vectorizer): Ditto.
	* tree-if-conv.c (add_to_dst_predicate_list,
	find_phi_replacement_condition): Ditto.
	* gimplify.c (force_gimple_operand_bsi): Add before and m arguments.
	Call mark_symbols_for_renaming for new statements.
	* tree-flow.h (force_gimple_operand_bsi): Declaration changed.

From-SVN: r126500
This commit is contained in:
Zdenek Dvorak 2007-07-10 01:04:06 +02:00 committed by Zdenek Dvorak
parent 452ba14de1
commit c6540bdeb4
14 changed files with 115 additions and 102 deletions

View File

@ -1,3 +1,29 @@
2007-07-10 Zdenek Dvorak <dvorakz@suse.cz>
* tree-scalar-evolution.c (scev_const_prop): Add arguments to
force_gimple_operand_bsi.
* tree-ssa-loop-ivopts.c (rewrite_use_nonlinear_expr,
rewrite_use_compare): Ditto.
* tree-ssa-address.c (gimplify_mem_ref_parts, create_mem_ref):
Ditto.
* tree-ssa-ifcombine.c (ifcombine_ifandif): Ditto.
* tree-ssa-loop-prefetch.c (issue_prefetch_ref): Ditto.
* lambda-code.c (replace_uses_equiv_to_x_with_y): Ditto.
* tree-profile.c (prepare_instrumented_value,
tree_gen_interval_profiler, tree_gen_pow2_profiler,
tree_gen_one_value_profiler, tree_gen_ic_profiler,
tree_gen_ic_func_profiler, tree_gen_average_profiler,
tree_gen_ior_profiler): Ditto.
* tree-ssa-reassoc.c (negate_value): Ditto.
* matrix-reorg.c (transform_access_sites, transform_allocation_sites):
Use force_gimple_operand_bsi.
* tree-vect-transform.c (vect_update_ivs_after_vectorizer): Ditto.
* tree-if-conv.c (add_to_dst_predicate_list,
find_phi_replacement_condition): Ditto.
* gimplify.c (force_gimple_operand_bsi): Add before and m arguments.
Call mark_symbols_for_renaming for new statements.
* tree-flow.h (force_gimple_operand_bsi): Declaration changed.
2007-07-10 Zdenek Dvorak <dvorakz@suse.cz> 2007-07-10 Zdenek Dvorak <dvorakz@suse.cz>
* cfghooks.c (remove_edge): New function. * cfghooks.c (remove_edge): New function.

View File

@ -6648,17 +6648,34 @@ force_gimple_operand (tree expr, tree *stmts, bool simple, tree var)
} }
/* Invokes force_gimple_operand for EXPR with parameters SIMPLE_P and VAR. If /* Invokes force_gimple_operand for EXPR with parameters SIMPLE_P and VAR. If
some statements are produced, emits them before BSI. */ some statements are produced, emits them at BSI. If BEFORE is true.
the statements are appended before BSI, otherwise they are appended after
it. M specifies the way BSI moves after insertion (BSI_SAME_STMT or
BSI_CONTINUE_LINKING are the usual values). */
tree tree
force_gimple_operand_bsi (block_stmt_iterator *bsi, tree expr, force_gimple_operand_bsi (block_stmt_iterator *bsi, tree expr,
bool simple_p, tree var) bool simple_p, tree var, bool before,
enum bsi_iterator_update m)
{ {
tree stmts; tree stmts;
expr = force_gimple_operand (expr, &stmts, simple_p, var); expr = force_gimple_operand (expr, &stmts, simple_p, var);
if (stmts) if (stmts)
bsi_insert_before (bsi, stmts, BSI_SAME_STMT); {
if (gimple_in_ssa_p (cfun))
{
tree_stmt_iterator tsi;
for (tsi = tsi_start (stmts); !tsi_end_p (tsi); tsi_next (&tsi))
mark_symbols_for_renaming (tsi_stmt (tsi));
}
if (before)
bsi_insert_before (bsi, stmts, m);
else
bsi_insert_after (bsi, stmts, m);
}
return expr; return expr;
} }

View File

@ -2058,7 +2058,8 @@ replace_uses_equiv_to_x_with_y (struct loop *loop, tree stmt, tree x,
which sets Y. */ which sets Y. */
var = create_tmp_var (TREE_TYPE (use), "perfecttmp"); var = create_tmp_var (TREE_TYPE (use), "perfecttmp");
add_referenced_var (var); add_referenced_var (var);
val = force_gimple_operand_bsi (firstbsi, val, false, NULL); val = force_gimple_operand_bsi (firstbsi, val, false, NULL,
true, BSI_SAME_STMT);
setstmt = build_gimple_modify_stmt (var, val); setstmt = build_gimple_modify_stmt (var, val);
var = make_ssa_name (var, setstmt); var = make_ssa_name (var, setstmt);
GIMPLE_STMT_OPERAND (setstmt, 0) = var; GIMPLE_STMT_OPERAND (setstmt, 0) = var;

View File

@ -1708,7 +1708,6 @@ compute_offset (HOST_WIDE_INT orig, HOST_WIDE_INT new, tree result)
static int static int
transform_access_sites (void **slot, void *data ATTRIBUTE_UNUSED) transform_access_sites (void **slot, void *data ATTRIBUTE_UNUSED)
{ {
tree stmts;
block_stmt_iterator bsi; block_stmt_iterator bsi;
struct matrix_info *mi = *slot; struct matrix_info *mi = *slot;
int min_escape_l = mi->min_indirect_level_escape; int min_escape_l = mi->min_indirect_level_escape;
@ -1831,19 +1830,10 @@ transform_access_sites (void **slot, void *data ATTRIBUTE_UNUSED)
total_elements = new_offset; total_elements = new_offset;
if (new_offset != offset) if (new_offset != offset)
{ {
tmp1 = bsi = bsi_for_stmt (acc_info->stmt);
force_gimple_operand (total_elements, &stmts, true, tmp1 = force_gimple_operand_bsi (&bsi, total_elements,
NULL); true, NULL,
if (stmts) true, BSI_SAME_STMT);
{
tree_stmt_iterator tsi;
for (tsi = tsi_start (stmts); !tsi_end_p (tsi);
tsi_next (&tsi))
mark_symbols_for_renaming (tsi_stmt (tsi));
bsi = bsi_for_stmt (acc_info->stmt);
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
}
} }
else else
tmp1 = offset; tmp1 = offset;
@ -1855,18 +1845,10 @@ transform_access_sites (void **slot, void *data ATTRIBUTE_UNUSED)
num_elements = num_elements =
fold_build2 (MULT_EXPR, sizetype, fold_convert (sizetype, acc_info->index), fold_build2 (MULT_EXPR, sizetype, fold_convert (sizetype, acc_info->index),
fold_convert (sizetype, d_size)); fold_convert (sizetype, d_size));
tmp1 = force_gimple_operand (num_elements, &stmts, true, NULL);
add_referenced_var (d_size); add_referenced_var (d_size);
if (stmts) bsi = bsi_for_stmt (acc_info->stmt);
{ tmp1 = force_gimple_operand_bsi (&bsi, num_elements, true,
tree_stmt_iterator tsi; NULL, true, BSI_SAME_STMT);
for (tsi = tsi_start (stmts); !tsi_end_p (tsi);
tsi_next (&tsi))
mark_symbols_for_renaming (tsi_stmt (tsi));
bsi = bsi_for_stmt (acc_info->stmt);
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
}
} }
/* Replace the offset if needed. */ /* Replace the offset if needed. */
if (tmp1 != offset) if (tmp1 != offset)
@ -1942,7 +1924,7 @@ transform_allocation_sites (void **slot, void *data ATTRIBUTE_UNUSED)
{ {
int i; int i;
struct matrix_info *mi; struct matrix_info *mi;
tree type, call_stmt_0, malloc_stmt, oldfn, stmts, prev_dim_size, use_stmt; tree type, call_stmt_0, malloc_stmt, oldfn, prev_dim_size, use_stmt;
struct cgraph_node *c_node; struct cgraph_node *c_node;
struct cgraph_edge *e; struct cgraph_edge *e;
block_stmt_iterator bsi; block_stmt_iterator bsi;
@ -2069,7 +2051,6 @@ transform_allocation_sites (void **slot, void *data ATTRIBUTE_UNUSED)
{ {
tree dim_size, dim_var, tmp; tree dim_size, dim_var, tmp;
tree d_type_size; tree d_type_size;
tree_stmt_iterator tsi;
/* Now put the size expression in a global variable and initialize it to /* Now put the size expression in a global variable and initialize it to
the size expression before the malloc of level 0. */ the size expression before the malloc of level 0. */
@ -2099,20 +2080,13 @@ transform_allocation_sites (void **slot, void *data ATTRIBUTE_UNUSED)
dim_size = fold_build2 (MULT_EXPR, type, dim_size, prev_dim_size); dim_size = fold_build2 (MULT_EXPR, type, dim_size, prev_dim_size);
} }
dim_size = force_gimple_operand (dim_size, &stmts, true, NULL); dim_size = force_gimple_operand_bsi (&bsi, dim_size, true, NULL,
if (stmts) true, BSI_SAME_STMT);
{
for (tsi = tsi_start (stmts); !tsi_end_p (tsi); tsi_next (&tsi))
mark_symbols_for_renaming (tsi_stmt (tsi));
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
bsi = bsi_for_stmt (call_stmt_0);
}
/* GLOBAL_HOLDING_THE_SIZE = DIM_SIZE. */ /* GLOBAL_HOLDING_THE_SIZE = DIM_SIZE. */
tmp = fold_build2 (GIMPLE_MODIFY_STMT, type, dim_var, dim_size); tmp = fold_build2 (GIMPLE_MODIFY_STMT, type, dim_var, dim_size);
GIMPLE_STMT_OPERAND (tmp, 0) = dim_var; GIMPLE_STMT_OPERAND (tmp, 0) = dim_var;
mark_symbols_for_renaming (tmp); mark_symbols_for_renaming (tmp);
bsi_insert_before (&bsi, tmp, BSI_NEW_STMT); bsi_insert_before (&bsi, tmp, BSI_SAME_STMT);
bsi = bsi_for_stmt (call_stmt_0);
prev_dim_size = mi->dimension_size[i] = dim_var; prev_dim_size = mi->dimension_size[i] = dim_var;
} }
@ -2122,17 +2096,8 @@ transform_allocation_sites (void **slot, void *data ATTRIBUTE_UNUSED)
malloc_stmt = GIMPLE_STMT_OPERAND (call_stmt_0, 1); malloc_stmt = GIMPLE_STMT_OPERAND (call_stmt_0, 1);
c_node = cgraph_node (mi->allocation_function_decl); c_node = cgraph_node (mi->allocation_function_decl);
old_size_0 = CALL_EXPR_ARG (malloc_stmt, 0); old_size_0 = CALL_EXPR_ARG (malloc_stmt, 0);
bsi = bsi_for_stmt (call_stmt_0); tmp = force_gimple_operand_bsi (&bsi, mi->dimension_size[0], true,
tmp = force_gimple_operand (mi->dimension_size[0], &stmts, true, NULL); NULL, true, BSI_SAME_STMT);
if (stmts)
{
tree_stmt_iterator tsi;
for (tsi = tsi_start (stmts); !tsi_end_p (tsi); tsi_next (&tsi))
mark_symbols_for_renaming (tsi_stmt (tsi));
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
bsi = bsi_for_stmt (call_stmt_0);
}
if (TREE_CODE (old_size_0) == SSA_NAME) if (TREE_CODE (old_size_0) == SSA_NAME)
{ {
FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, old_size_0) FOR_EACH_IMM_USE_STMT (use_stmt, imm_iter, old_size_0)

View File

@ -1126,7 +1126,8 @@ extern void register_jump_thread (edge, edge);
/* In gimplify.c */ /* In gimplify.c */
tree force_gimple_operand (tree, tree *, bool, tree); tree force_gimple_operand (tree, tree *, bool, tree);
tree force_gimple_operand_bsi (block_stmt_iterator *, tree, bool, tree); tree force_gimple_operand_bsi (block_stmt_iterator *, tree, bool, tree,
bool, enum bsi_iterator_update);
/* In tree-ssa-structalias.c */ /* In tree-ssa-structalias.c */
bool find_what_p_points_to (tree); bool find_what_p_points_to (tree);

View File

@ -637,17 +637,12 @@ add_to_dst_predicate_list (struct loop * loop, edge e,
{ {
tree tmp; tree tmp;
tree tmp_stmt = NULL_TREE; tree tmp_stmt = NULL_TREE;
tree tmp_stmts1 = NULL_TREE;
tree tmp_stmts2 = NULL_TREE;
prev_cond = force_gimple_operand (unshare_expr (prev_cond),
&tmp_stmts1, true, NULL);
if (tmp_stmts1)
bsi_insert_before (bsi, tmp_stmts1, BSI_SAME_STMT);
cond = force_gimple_operand (unshare_expr (cond), prev_cond = force_gimple_operand_bsi (bsi, unshare_expr (prev_cond),
&tmp_stmts2, true, NULL); true, NULL, true, BSI_SAME_STMT);
if (tmp_stmts2)
bsi_insert_before (bsi, tmp_stmts2, BSI_SAME_STMT); cond = force_gimple_operand_bsi (bsi, unshare_expr (cond),
true, NULL, true, BSI_SAME_STMT);
/* Add the condition to aux field of the edge. In case edge /* Add the condition to aux field of the edge. In case edge
destination is a PHI node, this condition will be ANDed with destination is a PHI node, this condition will be ANDed with
@ -698,7 +693,7 @@ find_phi_replacement_condition (struct loop *loop,
block_stmt_iterator *bsi) block_stmt_iterator *bsi)
{ {
edge first_edge, second_edge; edge first_edge, second_edge;
tree tmp_cond, new_stmts; tree tmp_cond;
gcc_assert (EDGE_COUNT (bb->preds) == 2); gcc_assert (EDGE_COUNT (bb->preds) == 2);
first_edge = EDGE_PRED (bb, 0); first_edge = EDGE_PRED (bb, 0);
@ -777,9 +772,8 @@ find_phi_replacement_condition (struct loop *loop,
value as condition. Various targets use different means to communicate value as condition. Various targets use different means to communicate
condition in vector compare operation. Using gimple value allows compiler condition in vector compare operation. Using gimple value allows compiler
to emit vector compare and select RTL without exposing compare's result. */ to emit vector compare and select RTL without exposing compare's result. */
*cond = force_gimple_operand (*cond, &new_stmts, false, NULL_TREE); *cond = force_gimple_operand_bsi (bsi, *cond, false, NULL_TREE,
if (new_stmts) true, BSI_SAME_STMT);
bsi_insert_before (bsi, new_stmts, BSI_SAME_STMT);
if (!is_gimple_reg (*cond) && !is_gimple_condexpr (*cond)) if (!is_gimple_reg (*cond) && !is_gimple_condexpr (*cond))
{ {
tree new_stmt; tree new_stmt;

View File

@ -192,7 +192,7 @@ prepare_instrumented_value (block_stmt_iterator *bsi,
{ {
tree val = value->hvalue.value; tree val = value->hvalue.value;
return force_gimple_operand_bsi (bsi, fold_convert (gcov_type_node, val), return force_gimple_operand_bsi (bsi, fold_convert (gcov_type_node, val),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
} }
/* Output instructions as GIMPLE trees to increment the interval histogram /* Output instructions as GIMPLE trees to increment the interval histogram
@ -211,7 +211,7 @@ tree_gen_interval_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value); val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_interval_profiler_fn, 4, call = build_call_expr (tree_interval_profiler_fn, 4,
ref_ptr, val, start, steps); ref_ptr, val, start, steps);
@ -232,7 +232,7 @@ tree_gen_pow2_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value); val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_pow2_profiler_fn, 2, ref_ptr, val); call = build_call_expr (tree_pow2_profiler_fn, 2, ref_ptr, val);
bsi_insert_before (&bsi, call, BSI_SAME_STMT); bsi_insert_before (&bsi, call, BSI_SAME_STMT);
@ -252,7 +252,7 @@ tree_gen_one_value_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value); val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_one_value_profiler_fn, 2, ref_ptr, val); call = build_call_expr (tree_one_value_profiler_fn, 2, ref_ptr, val);
bsi_insert_before (&bsi, call, BSI_SAME_STMT); bsi_insert_before (&bsi, call, BSI_SAME_STMT);
@ -275,7 +275,7 @@ tree_gen_ic_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
/* Insert code: /* Insert code:
@ -325,7 +325,8 @@ tree_gen_ic_func_profiler (void)
cur_func = force_gimple_operand_bsi (&bsi, cur_func = force_gimple_operand_bsi (&bsi,
build_addr (current_function_decl, build_addr (current_function_decl,
current_function_decl), current_function_decl),
true, NULL_TREE); true, NULL_TREE,
true, BSI_SAME_STMT);
tree_uid = build_int_cst (gcov_type_node, c_node->pid); tree_uid = build_int_cst (gcov_type_node, c_node->pid);
stmt1 = build_call_expr (tree_indirect_call_profiler_fn, 4, stmt1 = build_call_expr (tree_indirect_call_profiler_fn, 4,
ic_gcov_type_ptr_var, ic_gcov_type_ptr_var,
@ -367,7 +368,8 @@ tree_gen_average_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE,
true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value); val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_average_profiler_fn, 2, ref_ptr, val); call = build_call_expr (tree_average_profiler_fn, 2, ref_ptr, val);
bsi_insert_before (&bsi, call, BSI_SAME_STMT); bsi_insert_before (&bsi, call, BSI_SAME_STMT);
@ -387,7 +389,7 @@ tree_gen_ior_profiler (histogram_value value, unsigned tag, unsigned base)
ref_ptr = force_gimple_operand_bsi (&bsi, ref_ptr = force_gimple_operand_bsi (&bsi,
build_addr (ref, current_function_decl), build_addr (ref, current_function_decl),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
val = prepare_instrumented_value (&bsi, value); val = prepare_instrumented_value (&bsi, value);
call = build_call_expr (tree_ior_profiler_fn, 2, ref_ptr, val); call = build_call_expr (tree_ior_profiler_fn, 2, ref_ptr, val);
bsi_insert_before (&bsi, call, BSI_SAME_STMT); bsi_insert_before (&bsi, call, BSI_SAME_STMT);

View File

@ -2851,7 +2851,8 @@ scev_const_prop (void)
{ {
block_stmt_iterator dest = bsi; block_stmt_iterator dest = bsi;
bsi_insert_before (&dest, ass, BSI_NEW_STMT); bsi_insert_before (&dest, ass, BSI_NEW_STMT);
def = force_gimple_operand_bsi (&dest, def, false, NULL_TREE); def = force_gimple_operand_bsi (&dest, def, false, NULL_TREE,
true, BSI_SAME_STMT);
} }
GIMPLE_STMT_OPERAND (ass, 1) = def; GIMPLE_STMT_OPERAND (ass, 1) = def;
update_stmt (ass); update_stmt (ass);

View File

@ -556,10 +556,12 @@ gimplify_mem_ref_parts (block_stmt_iterator *bsi, struct mem_address *parts)
{ {
if (parts->base) if (parts->base)
parts->base = force_gimple_operand_bsi (bsi, parts->base, parts->base = force_gimple_operand_bsi (bsi, parts->base,
true, NULL_TREE); true, NULL_TREE,
true, BSI_SAME_STMT);
if (parts->index) if (parts->index)
parts->index = force_gimple_operand_bsi (bsi, parts->index, parts->index = force_gimple_operand_bsi (bsi, parts->index,
true, NULL_TREE); true, NULL_TREE,
true, BSI_SAME_STMT);
} }
/* Creates and returns a TARGET_MEM_REF for address ADDR. If necessary /* Creates and returns a TARGET_MEM_REF for address ADDR. If necessary
@ -588,7 +590,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
parts.index = force_gimple_operand_bsi (bsi, parts.index = force_gimple_operand_bsi (bsi,
fold_build2 (MULT_EXPR, sizetype, fold_build2 (MULT_EXPR, sizetype,
parts.index, parts.step), parts.index, parts.step),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
parts.step = NULL_TREE; parts.step = NULL_TREE;
mem_ref = create_mem_ref_raw (type, &parts); mem_ref = create_mem_ref_raw (type, &parts);
@ -614,7 +616,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
fold_build2 (PLUS_EXPR, atype, fold_build2 (PLUS_EXPR, atype,
fold_convert (atype, parts.base), fold_convert (atype, parts.base),
tmp), tmp),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
} }
else else
{ {
@ -641,7 +643,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
fold_build2 (PLUS_EXPR, atype, fold_build2 (PLUS_EXPR, atype,
parts.base, parts.base,
fold_convert (atype, parts.index)), fold_convert (atype, parts.index)),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
} }
else else
parts.base = parts.index; parts.base = parts.index;
@ -662,7 +664,7 @@ create_mem_ref (block_stmt_iterator *bsi, tree type, aff_tree *addr)
fold_build2 (POINTER_PLUS_EXPR, atype, fold_build2 (POINTER_PLUS_EXPR, atype,
parts.base, parts.base,
fold_convert (sizetype, parts.offset)), fold_convert (sizetype, parts.offset)),
true, NULL_TREE); true, NULL_TREE, true, BSI_SAME_STMT);
} }
else else
parts.base = parts.offset; parts.base = parts.offset;

View File

@ -317,9 +317,11 @@ ifcombine_ifandif (basic_block inner_cond_bb, basic_block outer_cond_bb)
t2 = fold_build2 (LSHIFT_EXPR, TREE_TYPE (name1), t2 = fold_build2 (LSHIFT_EXPR, TREE_TYPE (name1),
integer_one_node, bit2); integer_one_node, bit2);
t = fold_build2 (BIT_IOR_EXPR, TREE_TYPE (name1), t, t2); t = fold_build2 (BIT_IOR_EXPR, TREE_TYPE (name1), t, t2);
t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE); t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE,
true, BSI_SAME_STMT);
t2 = fold_build2 (BIT_AND_EXPR, TREE_TYPE (name1), name1, t); t2 = fold_build2 (BIT_AND_EXPR, TREE_TYPE (name1), name1, t);
t2 = force_gimple_operand_bsi (&bsi, t2, true, NULL_TREE); t2 = force_gimple_operand_bsi (&bsi, t2, true, NULL_TREE,
true, BSI_SAME_STMT);
COND_EXPR_COND (inner_cond) = fold_build2 (EQ_EXPR, boolean_type_node, COND_EXPR_COND (inner_cond) = fold_build2 (EQ_EXPR, boolean_type_node,
t2, t); t2, t);
update_stmt (inner_cond); update_stmt (inner_cond);
@ -405,9 +407,11 @@ ifcombine_iforif (basic_block inner_cond_bb, basic_block outer_cond_bb)
/* Do it. */ /* Do it. */
bsi = bsi_for_stmt (inner_cond); bsi = bsi_for_stmt (inner_cond);
t = fold_build2 (BIT_IOR_EXPR, TREE_TYPE (name1), bits1, bits2); t = fold_build2 (BIT_IOR_EXPR, TREE_TYPE (name1), bits1, bits2);
t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE); t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE,
true, BSI_SAME_STMT);
t = fold_build2 (BIT_AND_EXPR, TREE_TYPE (name1), name1, t); t = fold_build2 (BIT_AND_EXPR, TREE_TYPE (name1), name1, t);
t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE); t = force_gimple_operand_bsi (&bsi, t, true, NULL_TREE,
true, BSI_SAME_STMT);
COND_EXPR_COND (inner_cond) = fold_build2 (NE_EXPR, boolean_type_node, t, COND_EXPR_COND (inner_cond) = fold_build2 (NE_EXPR, boolean_type_node, t,
build_int_cst (TREE_TYPE (t), 0)); build_int_cst (TREE_TYPE (t), 0));
update_stmt (inner_cond); update_stmt (inner_cond);

View File

@ -4862,7 +4862,7 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data,
struct iv_use *use, struct iv_cand *cand) struct iv_use *use, struct iv_cand *cand)
{ {
tree comp; tree comp;
tree op, stmts, tgt, ass; tree op, tgt, ass;
block_stmt_iterator bsi; block_stmt_iterator bsi;
/* An important special case -- if we are asked to express value of /* An important special case -- if we are asked to express value of
@ -4947,9 +4947,8 @@ rewrite_use_nonlinear_expr (struct ivopts_data *data,
gcc_unreachable (); gcc_unreachable ();
} }
op = force_gimple_operand (comp, &stmts, false, SSA_NAME_VAR (tgt)); op = force_gimple_operand_bsi (&bsi, comp, false, SSA_NAME_VAR (tgt),
if (stmts) true, BSI_SAME_STMT);
bsi_insert_before (&bsi, stmts, BSI_SAME_STMT);
if (TREE_CODE (use->stmt) == PHI_NODE) if (TREE_CODE (use->stmt) == PHI_NODE)
{ {
@ -5115,7 +5114,8 @@ rewrite_use_compare (struct ivopts_data *data,
compare = iv_elimination_compare (data, use); compare = iv_elimination_compare (data, use);
bound = unshare_expr (fold_convert (var_type, bound)); bound = unshare_expr (fold_convert (var_type, bound));
op = force_gimple_operand_bsi (&bsi, bound, true, NULL_TREE); op = force_gimple_operand_bsi (&bsi, bound, true, NULL_TREE,
true, BSI_SAME_STMT);
*use->op_p = build2 (compare, boolean_type_node, var, op); *use->op_p = build2 (compare, boolean_type_node, var, op);
return; return;
@ -5129,7 +5129,8 @@ rewrite_use_compare (struct ivopts_data *data,
ok = extract_cond_operands (data, use->op_p, &var_p, NULL, NULL, NULL); ok = extract_cond_operands (data, use->op_p, &var_p, NULL, NULL, NULL);
gcc_assert (ok); gcc_assert (ok);
*var_p = force_gimple_operand_bsi (&bsi, comp, true, SSA_NAME_VAR (*var_p)); *var_p = force_gimple_operand_bsi (&bsi, comp, true, SSA_NAME_VAR (*var_p),
true, BSI_SAME_STMT);
} }
/* Rewrites USE using candidate CAND. */ /* Rewrites USE using candidate CAND. */

View File

@ -883,7 +883,8 @@ issue_prefetch_ref (struct mem_ref *ref, unsigned unroll_factor, unsigned ahead)
n_prefetches = ((unroll_factor + ref->prefetch_mod - 1) n_prefetches = ((unroll_factor + ref->prefetch_mod - 1)
/ ref->prefetch_mod); / ref->prefetch_mod);
addr_base = build_fold_addr_expr_with_type (ref->mem, ptr_type_node); addr_base = build_fold_addr_expr_with_type (ref->mem, ptr_type_node);
addr_base = force_gimple_operand_bsi (&bsi, unshare_expr (addr_base), true, NULL); addr_base = force_gimple_operand_bsi (&bsi, unshare_expr (addr_base),
true, NULL, true, BSI_SAME_STMT);
write_p = ref->write_p ? integer_one_node : integer_zero_node; write_p = ref->write_p ? integer_one_node : integer_zero_node;
local = build_int_cst (integer_type_node, nontemporal ? 0 : 3); local = build_int_cst (integer_type_node, nontemporal ? 0 : 3);
@ -893,7 +894,8 @@ issue_prefetch_ref (struct mem_ref *ref, unsigned unroll_factor, unsigned ahead)
delta = (ahead + ap * ref->prefetch_mod) * ref->group->step; delta = (ahead + ap * ref->prefetch_mod) * ref->group->step;
addr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node, addr = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node,
addr_base, size_int (delta)); addr_base, size_int (delta));
addr = force_gimple_operand_bsi (&bsi, unshare_expr (addr), true, NULL); addr = force_gimple_operand_bsi (&bsi, unshare_expr (addr), true, NULL,
true, BSI_SAME_STMT);
/* Create the prefetch instruction. */ /* Create the prefetch instruction. */
prefetch = build_call_expr (built_in_decls[BUILT_IN_PREFETCH], prefetch = build_call_expr (built_in_decls[BUILT_IN_PREFETCH],

View File

@ -1026,7 +1026,7 @@ negate_value (tree tonegate, block_stmt_iterator *bsi)
tonegate = fold_build1 (NEGATE_EXPR, TREE_TYPE (tonegate), tonegate); tonegate = fold_build1 (NEGATE_EXPR, TREE_TYPE (tonegate), tonegate);
resultofnegate = force_gimple_operand_bsi (bsi, tonegate, true, resultofnegate = force_gimple_operand_bsi (bsi, tonegate, true,
NULL_TREE); NULL_TREE, true, BSI_SAME_STMT);
VEC_safe_push (tree, heap, broken_up_subtracts, resultofnegate); VEC_safe_push (tree, heap, broken_up_subtracts, resultofnegate);
return resultofnegate; return resultofnegate;

View File

@ -5341,7 +5341,7 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
tree evolution_part; tree evolution_part;
tree init_expr; tree init_expr;
tree step_expr; tree step_expr;
tree var, stmt, ni, ni_name; tree var, ni, ni_name;
block_stmt_iterator last_bsi; block_stmt_iterator last_bsi;
if (vect_print_dump_info (REPORT_DETAILS)) if (vect_print_dump_info (REPORT_DETAILS))
@ -5399,12 +5399,9 @@ vect_update_ivs_after_vectorizer (loop_vec_info loop_vinfo, tree niters,
var = create_tmp_var (TREE_TYPE (init_expr), "tmp"); var = create_tmp_var (TREE_TYPE (init_expr), "tmp");
add_referenced_var (var); add_referenced_var (var);
ni_name = force_gimple_operand (ni, &stmt, false, var);
/* Insert stmt into exit_bb. */
last_bsi = bsi_last (exit_bb); last_bsi = bsi_last (exit_bb);
if (stmt) ni_name = force_gimple_operand_bsi (&last_bsi, ni, false, var,
bsi_insert_before (&last_bsi, stmt, BSI_SAME_STMT); true, BSI_SAME_STMT);
/* Fix phi expressions in the successor bb. */ /* Fix phi expressions in the successor bb. */
SET_PHI_ARG_DEF (phi1, update_e->dest_idx, ni_name); SET_PHI_ARG_DEF (phi1, update_e->dest_idx, ni_name);