X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fst%2Fexc.c;h=6fc1efd59556829f0c3d33b67fee1dcd56df97dd;hb=d0d85962ef52c14950db90e5981a7bea36023ab3;hp=9ce96dd8e325e350333c28d8c58841427f5f3f8b;hpb=3d507c5ed90a05f52cb9396c765369e35f08c029;p=libfirm diff --git a/ir/st/exc.c b/ir/st/exc.c index 9ce96dd8e..6fc1efd59 100644 --- a/ir/st/exc.c +++ b/ir/st/exc.c @@ -1,22 +1,26 @@ -/* Copyright (c) 2002 by Universität Karlsruhe (TH). All Rights Reserved */ -// -// Time-stamp: -// - -/*** +/* + * Project: libFIRM + * File name: ir/st/exc.c + * Purpose: Helper functions for jack exceptions. + * Author: Florian Liekweg + * Modified by: + * Created: 4.3.2002 + * CVS-ID: $Id$ + * Copyright: (c) 2002-2003 Universität Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + */ + +/** NAME exc PURPOSE Helper functions for exceptions - NOTES + S not quite complete - HISTORY - liekweg - Mar 4, 2002: Created. - CVS: - $Id$ ***/ -# include "exc.h" +#include +#include "exc.h" static char* exc_strings [] = { "Invalid", /* invalid */ @@ -40,7 +44,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,15 +67,15 @@ 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)); 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 + (op != op_Bad) /*&& (op != op_Unknown)*/ && + (get_irn_mode(node) == mode_X));/* Check for proper Proj attr */ return (true); } else @@ -83,21 +87,56 @@ 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 + +void set_Block_exc(ir_node *n, exc_t exc) { +} + +exc_t get_Block_exc(ir_node *n) { + return 0; +} + + +/* handler handling for Blocks */ +void +set_Block_handler (ir_node *block, ir_node *handler) { + assert (is_Block(block)); + assert (is_Block(handler)); +} + +ir_node * +get_Block_handler (ir_node *block) { + assert (is_Block(block)); + return (NULL); +} + +/* handler handling for Nodes */ +void +set_Node_handler (ir_node *node, ir_node *handler) { + +} + +ir_node * +get_Node_handler (ir_node *node) { + return (NULL); +} + /* Return true iff a new exception region must be left upon entry of this block. @@ -110,12 +149,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 @@ -145,7 +182,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); @@ -159,7 +196,7 @@ bool is_region_entry (ir_graph *graph, ir_node *block) return (exc_region == get_Block_exc (block)); - return (TRUE); + return (true); } /* @@ -181,7 +218,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;