From 76f5fd5f4d0d1096deea6cd10fd16370addfc32b Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Sat, 14 Jan 2006 21:04:47 +0000 Subject: [PATCH] DBG_OPT_EXC_REM() used, remove exception edges from Load and Store if it can be proved that the address is non-null and no other exception exists [r7243] --- ir/ir/iropt.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/ir/ir/iropt.c b/ir/ir/iropt.c index 219b8ea18..8b3afb6ee 100644 --- a/ir/ir/iropt.c +++ b/ir/ir/iropt.c @@ -1219,7 +1219,8 @@ static ir_node *equivalent_node_Phi(ir_node *n) } /** - * optimize Proj(Tuple) and gigo() for ProjX in Bad block + * optimize Proj(Tuple) and gigo() for ProjX in Bad block, + * ProjX(Load) and ProjX(Store) */ static ir_node *equivalent_node_Proj(ir_node *n) { @@ -1242,6 +1243,20 @@ static ir_node *equivalent_node_Proj(ir_node *n) /* Remove dead control flow -- early gigo(). */ n = new_Bad(); } + else if (! get_opt_ldst_only_null_ptr_exceptions()) { + ir_op *op = get_irn_op(a); + + if (op == op_Load || op == op_Store) { + /* get the load/store address */ + ir_node *addr = get_irn_n(a, 1); + if (value_not_null(addr)) { + /* this node may float */ + set_irn_pinned(a, op_pin_state_floats); + DBG_OPT_EXC_REM(n); + return new_Bad(); + } + } + } } return n; @@ -2116,6 +2131,7 @@ static ir_node *transform_node_Proj_Div(ir_node *proj) if (proj_nr == pn_Div_X_except) { /* we found an exception handler, remove it */ + DBG_OPT_EXC_REM(proj); return new_Bad(); } else if (proj_nr == pn_Div_M) { /* the memory Proj can be removed */ @@ -2147,6 +2163,7 @@ static ir_node *transform_node_Proj_Mod(ir_node *proj) if (proj_nr == pn_Mod_X_except) { /* we found an exception handler, remove it */ + DBG_OPT_EXC_REM(proj); return new_Bad(); } else if (proj_nr == pn_Mod_M) { /* the memory Proj can be removed */ @@ -2186,6 +2203,7 @@ static ir_node *transform_node_Proj_DivMod(ir_node *proj) if (proj_nr == pn_DivMod_X_except) { /* we found an exception handler, remove it */ + DBG_OPT_EXC_REM(proj); return new_Bad(); } else if (proj_nr == pn_DivMod_M) { -- 2.20.1