X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fst%2Fexc.c;h=bd8f159e9baba3838c913a55257e05f2932176bb;hb=72a90e4127b0c4f4cba1df4466e6269c31221693;hp=5ef2b18c6b97889c009e38e8e8097f75e9b39e79;hpb=627e17872263df1abe20244ca5a4199ae51970ad;p=libfirm diff --git a/ir/st/exc.c b/ir/st/exc.c index 5ef2b18c6..bd8f159e9 100644 --- a/ir/st/exc.c +++ b/ir/st/exc.c @@ -1,14 +1,14 @@ /* Copyright (c) 2002 by Universität Karlsruhe (TH). All Rights Reserved */ -// -// Time-stamp: <02/03/04 17:24:07 liekweg> -// +/* +* Time-stamp: +*/ -/*** +/** NAME exc PURPOSE Helper functions for exceptions - NOTES + S not quite complete HISTORY liekweg - Mar 4, 2002: Created. @@ -40,7 +40,7 @@ static bool has_handler (ir_graph *graph, ir_node *b, ir_node *a) ir_node *succ = 0; assert (0 && "Wrongly implemented"); - // must check for _immediate_ dominance !!! + /* must check for _immediate_ dominance !!! */ if (is_handler_entry (graph, b) && dominates (graph, a, b)) return (true); @@ -63,17 +63,16 @@ static bool is_exc_jmp (ir_node *node) { ir_op *op = get_irn_op (node); - // Proj_X (Load), Proj_X (Sto), Proj_X (Div_Int), - // Proj_X (Raise), Proj_X (Call), Proj_X (Alloc) + /* Proj_X (Load), Proj_X (Sto), Proj_X (Div_Int), + Proj_X (Raise), Proj_X (Call), Proj_X (Alloc) */ if (op == op_Proj) { op = get_irn_op (get_Proj_pred (node)); - // ToDo: Check for proper Proj attr?!? - if ((op == op_Load) || (op == op_Store) || - (op == op_Div ) || (op == op_Raise) || - (op == op_Call) || (op == op_Alloc)) - return (true); + assert ((is_fragile_op(get_Proj_pred(node))) && + (op != op_Bad) /*&& (op != op_Unknown)*/ && + (get_irn_mode(node) == mode_X));/* Check for proper Proj attr */ + return (true); } else { @@ -84,21 +83,23 @@ static bool is_exc_jmp (ir_node *node) /* Return true iff the given node represents a normal cfg jump */ +#if 0 static bool is_cfg_jmp (ir_node *node) { ir_op *op = get_irn_op (node); if (op == op_Proj) - { - op = get_irn_op (get_Proj_pred (node)); + { + op = get_irn_op (get_Proj_pred (node)); - // Proj_X (Proj_Cmp (Cond)) - if (op_Proj == op) - return (true); /* check for op == op_Cmp and op == op_Cond */ - } + /* Proj_X (Proj_Cmp (Cond)) */ + if (op_Proj == op) + return (true); /* check for op == op_Cmp and op == op_Cond */ + } return (false); } +#endif /* Return true iff a new exception region must be left upon entry of this block. @@ -111,12 +112,10 @@ bool is_handler_entry (ir_graph *graph, ir_node *block) bool is_entry = true; int i = 0; int n = get_irn_arity (block); - ir_node *node = 0; - ir_op* op = op_Bad; if (exc_invalid == get_Block_exc (block)) { - for (i = 0; (i < n) && is_entry; i ++) + for (i = 0; (i < n) && (is_entry == true); i ++) if (is_exc_jmp (get_irn_n (block, i))) continue; else @@ -146,7 +145,7 @@ bool is_region_entry (ir_graph *graph, ir_node *block) bool no_handler = true; - for (i = 0; (i < n) && no_handler; i ++) + for (i = 0; (i < n) && (no_handler == true); i ++) { succ = get_irn_out (block, i); @@ -160,7 +159,7 @@ bool is_region_entry (ir_graph *graph, ir_node *block) return (exc_region == get_Block_exc (block)); - return (TRUE); + return (true); } /* @@ -182,7 +181,7 @@ bool is_handler_block (ir_graph *graph, ir_node *block) int n_blocks = env->dt->n_blocks; int i = 0; - for (i = 0; (i < n_blocks) && no_handler; i ++) + for (i = 0; (i < n_blocks) && (no_handler == true); i ++) if (0 != (env->dt->masks [i] & block_mask)) /* if dominator */ if (is_handler_entry (graph, env->dt->blocks [i])) /* is handler entry */ no_handler = false;