projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
New implementation of tarval module
[libfirm]
/
ir
/
st
/
exc.c
diff --git
a/ir/st/exc.c
b/ir/st/exc.c
index
5ef2b18
..
bd8f159
100644
(file)
--- 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 */
/* Copyright (c) 2002 by Universität Karlsruhe (TH). All Rights Reserved */
-/
/
-
// Time-stamp: <02/03/04 17:24:07 liekweg
>
-
/
/
+/
*
+
* Time-stamp: <Monday, 04.11.2002, 17:28:27 goetz@i44pc2.info.uni-karlsruhe.de
>
+
*
/
-/**
*
+/**
NAME
exc
PURPOSE
Helper functions for exceptions
NAME
exc
PURPOSE
Helper functions for exceptions
-
NOTE
S
+ S
not quite complete
HISTORY
liekweg - Mar 4, 2002: Created.
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");
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);
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);
{
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));
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
{
}
else
{
@@
-84,21
+83,23
@@
static bool is_exc_jmp (ir_node *node)
/*
Return true iff the given node represents a normal cfg jump
*/
/*
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)
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);
}
return (false);
}
+#endif
/*
Return true iff a new exception region must be left upon entry of this block.
/*
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);
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))
{
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
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;
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);
{
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 (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;
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;
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;