-/* Copyright (c) 2002 by Universität Karlsruhe (TH). All Rights Reserved */
-//
-// Time-stamp: <Monday, 13.05.2002, 16:00:06 goetz@i44pc2.info.uni-karlsruhe.de>
-//
-
-/***
+/*
+ * 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"
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);
{
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
+ (get_irn_mode(node) == mode_X));/* Check for proper Proj attr */
return (true);
}
else
/*
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.
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
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);
return (exc_region == get_Block_exc (block));
- return (TRUE);
+ return (true);
}
/*
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;