projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
763b7a1
)
improve jumpthreading comments
author
Andreas Zwinkau
<zwinkau@kit.edu>
Fri, 10 Jun 2011 12:20:01 +0000
(14:20 +0200)
committer
Andreas Zwinkau
<zwinkau@kit.edu>
Fri, 10 Jun 2011 12:30:49 +0000
(14:30 +0200)
ir/opt/jumpthreading.c
patch
|
blob
|
history
diff --git
a/ir/opt/jumpthreading.c
b/ir/opt/jumpthreading.c
index
7561ded
..
39de745
100644
(file)
--- a/
ir/opt/jumpthreading.c
+++ b/
ir/opt/jumpthreading.c
@@
-60,7
+60,7
@@
static void add_pred(ir_node* node, ir_node* x)
int n;
int i;
int n;
int i;
- assert(is_Block(node)
|| is_Phi(node)
);
+ assert(is_Block(node));
n = get_irn_arity(node);
NEW_ARR_A(ir_node*, ins, n + 1);
n = get_irn_arity(node);
NEW_ARR_A(ir_node*, ins, n + 1);
@@
-194,6
+194,16
@@
static void construct_ssa(ir_node *orig_block, ir_node *orig_val,
}
}
}
}
+/**
+ * jumpthreading produces critical edges, e.g. B-C:
+ * A A
+ * \ / \ |
+ * B => B |
+ * / \ / \|
+ * C C
+ *
+ * By splitting this critical edge more threadings might be possible.
+ */
static void split_critical_edge(ir_node *block, int pos)
{
ir_graph *irg = get_irn_irg(block);
static void split_critical_edge(ir_node *block, int pos)
{
ir_graph *irg = get_irn_irg(block);
@@
-634,6
+644,7
@@
static void thread_jumps(ir_node* block, void* data)
ir_node *badX;
int cnst_pos;
ir_node *badX;
int cnst_pos;
+ /* we do not deal with Phis, so restrict this to exactly one cfgpred */
if (get_Block_n_cfgpreds(block) != 1)
return;
if (get_Block_n_cfgpreds(block) != 1)
return;