X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-ssa-loop-im.c;h=d8ee787cc470bdbfa272fd529802c5d46eecc97c;hb=1cf1742e4834f67465fd29068ec87ac427940a6c;hp=4c85c878e6cb1338440f276bd48f3bb009528ac1;hpb=75a70cf95f65fe9204b15ad9aba31c571381d224;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 4c85c878e6c..d8ee787cc47 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -362,7 +362,7 @@ movement_possibility (gimple stmt) if (gimple_get_lhs (stmt) == NULL_TREE) return MOVE_IMPOSSIBLE; - if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_VIRTUAL_DEFS)) + if (gimple_vdef (stmt)) return MOVE_IMPOSSIBLE; if (stmt_ends_bb_p (stmt) @@ -681,7 +681,7 @@ determine_max_movement (gimple stmt, bool must_preserve_exec) if (!add_dependency (val, lim_data, loop, true)) return false; - if (!ZERO_SSA_OPERANDS (stmt, SSA_OP_VIRTUAL_USES)) + if (gimple_vuse (stmt)) { mem_ref_p ref = mem_ref_in_stmt (stmt); @@ -694,7 +694,7 @@ determine_max_movement (gimple stmt, bool must_preserve_exec) } else { - FOR_EACH_SSA_TREE_OPERAND (val, stmt, iter, SSA_OP_VIRTUAL_USES) + if ((val = gimple_vuse (stmt)) != NULL_TREE) { if (!add_dependency (val, lim_data, loop, false)) return false; @@ -763,6 +763,7 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi) { gimple stmt, stmt1, stmt2; tree var, name, lhs, type; + tree real_one; stmt = gsi_stmt (*bsi); lhs = gimple_assign_lhs (stmt); @@ -770,9 +771,24 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi) var = create_tmp_var (type, "reciptmp"); add_referenced_var (var); + DECL_GIMPLE_REG_P (var) = 1; + + /* For vectors, create a VECTOR_CST full of 1's. */ + if (TREE_CODE (type) == VECTOR_TYPE) + { + int i, len; + tree list = NULL_TREE; + real_one = build_real (TREE_TYPE (type), dconst1); + len = TYPE_VECTOR_SUBPARTS (type); + for (i = 0; i < len; i++) + list = tree_cons (NULL, real_one, list); + real_one = build_vector (type, list); + } + else + real_one = build_real (type, dconst1); stmt1 = gimple_build_assign_with_ops (RDIV_EXPR, - var, build_real (type, dconst1), gimple_assign_rhs2 (stmt)); + var, real_one, gimple_assign_rhs2 (stmt)); name = make_ssa_name (var, stmt1); gimple_assign_set_lhs (stmt1, name); @@ -819,8 +835,7 @@ rewrite_bittest (gimple_stmt_iterator *bsi) return stmt; /* There is a conversion in between possibly inserted by fold. */ - if (gimple_assign_rhs_code (stmt1) == NOP_EXPR - || gimple_assign_rhs_code (stmt1) == CONVERT_EXPR) + if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt1))) { t = gimple_assign_rhs1 (stmt1); if (TREE_CODE (t) != SSA_NAME @@ -984,7 +999,7 @@ determine_invariantness (void) memset (&walk_data, 0, sizeof (struct dom_walk_data)); walk_data.dom_direction = CDI_DOMINATORS; - walk_data.before_dom_children_before_stmts = determine_invariantness_stmt; + walk_data.before_dom_children = determine_invariantness_stmt; init_walk_dominator_tree (&walk_data); walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR); @@ -1058,14 +1073,14 @@ move_computations (void) memset (&walk_data, 0, sizeof (struct dom_walk_data)); walk_data.dom_direction = CDI_DOMINATORS; - walk_data.before_dom_children_before_stmts = move_computations_stmt; + walk_data.before_dom_children = move_computations_stmt; init_walk_dominator_tree (&walk_data); walk_dominator_tree (&walk_data, ENTRY_BLOCK_PTR); fini_walk_dominator_tree (&walk_data); gsi_commit_edge_inserts (); - if (need_ssa_update_p ()) + if (need_ssa_update_p (cfun)) rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa); } @@ -1294,13 +1309,12 @@ gather_mem_refs_stmt (struct loop *loop, gimple stmt) hashval_t hash; PTR *slot; mem_ref_p ref; - ssa_op_iter oi; tree vname; bool is_stored; bitmap clvops; unsigned id; - if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) + if (!gimple_vuse (stmt)) return; mem = simple_mem_ref_in_stmt (stmt, &is_stored); @@ -1332,14 +1346,14 @@ gather_mem_refs_stmt (struct loop *loop, gimple stmt) if (is_stored) mark_ref_stored (ref, loop); - FOR_EACH_SSA_TREE_OPERAND (vname, stmt, oi, SSA_OP_VIRTUAL_USES) + if ((vname = gimple_vuse (stmt)) != NULL_TREE) bitmap_set_bit (ref->vops, DECL_UID (SSA_NAME_VAR (vname))); record_mem_ref_loc (ref, loop, stmt, mem); return; fail: clvops = VEC_index (bitmap, memory_accesses.clobbered_vops, loop->num); - FOR_EACH_SSA_TREE_OPERAND (vname, stmt, oi, SSA_OP_VIRTUAL_USES) + if ((vname = gimple_vuse (stmt)) != NULL_TREE) bitmap_set_bit (clvops, DECL_UID (SSA_NAME_VAR (vname))); } @@ -1780,6 +1794,10 @@ gen_lsm_tmp_name (tree ref) lsm_tmp_name_add ("R"); break; + case INTEGER_CST: + /* Nothing. */ + break; + default: gcc_unreachable (); }