diff options
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index ab7de37..4f5612b 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -610,7 +610,8 @@ visit_stmt (tree stmt) size_t i; stmt_ann_t ann; def_optype defs; - vdef_optype vdefs; + v_may_def_optype v_may_defs; + v_must_def_optype v_must_defs; /* If the statement has already been deemed to be VARYING, don't simulate it again. */ @@ -669,10 +670,15 @@ visit_stmt (tree stmt) add_outgoing_control_edges (bb_for_stmt (stmt)); } - /* Mark all VDEF operands VARYING. */ - vdefs = VDEF_OPS (ann); - for (i = 0; i < NUM_VDEFS (vdefs); i++) - def_to_varying (VDEF_RESULT (vdefs, i)); + /* Mark all V_MAY_DEF operands VARYING. */ + v_may_defs = V_MAY_DEF_OPS (ann); + for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++) + def_to_varying (V_MAY_DEF_RESULT (v_may_defs, i)); + + /* Mark all V_MUST_DEF operands VARYING. */ + v_must_defs = V_MUST_DEF_OPS (ann); + for (i = 0; i < NUM_V_MUST_DEFS (v_must_defs); i++) + def_to_varying (V_MUST_DEF_OP (v_must_defs, i)); } @@ -1129,7 +1135,8 @@ initialize (void) tree stmt; stmt_ann_t ann; def_optype defs; - vdef_optype vdefs; + v_may_def_optype v_may_defs; + v_must_def_optype v_must_defs; size_t x; int vary; @@ -1149,14 +1156,23 @@ initialize (void) } DONT_SIMULATE_AGAIN (stmt) = vary; - /* Mark all VDEF operands VARYING. */ - vdefs = VDEF_OPS (ann); - for (x = 0; x < NUM_VDEFS (vdefs); x++) + /* Mark all V_MAY_DEF operands VARYING. */ + v_may_defs = V_MAY_DEF_OPS (ann); + for (x = 0; x < NUM_V_MAY_DEFS (v_may_defs); x++) { - tree res = VDEF_RESULT (vdefs, x); + tree res = V_MAY_DEF_RESULT (v_may_defs, x); get_value (res)->lattice_val = VARYING; SET_BIT (virtual_var, SSA_NAME_VERSION (res)); } + + /* Mark all V_MUST_DEF operands VARYING. */ + v_must_defs = V_MUST_DEF_OPS (ann); + for (x = 0; x < NUM_V_MUST_DEFS (v_must_defs); x++) + { + tree v_must_def = V_MUST_DEF_OP (v_must_defs, x); + get_value (v_must_def)->lattice_val = VARYING; + SET_BIT (virtual_var, SSA_NAME_VERSION (v_must_def)); + } } for (e = bb->succ; e; e = e->succ_next) @@ -2064,7 +2080,8 @@ set_rhs (tree *stmt_p, tree expr) if (TREE_SIDE_EFFECTS (expr)) { def_optype defs; - vdef_optype vdefs; + v_may_def_optype v_may_defs; + v_must_def_optype v_must_defs; size_t i; /* Fix all the SSA_NAMEs created by *STMT_P to point to its new @@ -2077,10 +2094,18 @@ set_rhs (tree *stmt_p, tree expr) SSA_NAME_DEF_STMT (var) = *stmt_p; } - vdefs = VDEF_OPS (ann); - for (i = 0; i < NUM_VDEFS (vdefs); i++) + v_may_defs = V_MAY_DEF_OPS (ann); + for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++) + { + tree var = V_MAY_DEF_RESULT (v_may_defs, i); + if (TREE_CODE (var) == SSA_NAME) + SSA_NAME_DEF_STMT (var) = *stmt_p; + } + + v_must_defs = V_MUST_DEF_OPS (ann); + for (i = 0; i < NUM_V_MUST_DEFS (v_must_defs); i++) { - tree var = VDEF_RESULT (vdefs, i); + tree var = V_MUST_DEF_OP (v_must_defs, i); if (TREE_CODE (var) == SSA_NAME) SSA_NAME_DEF_STMT (var) = *stmt_p; } |