projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
55786a9
)
Do not create be_Return for "dead" ends
author
Michael Beck
<beck@ipd.info.uni-karlsruhe.de>
Mon, 24 Apr 2006 13:11:34 +0000
(13:11 +0000)
committer
Michael Beck
<beck@ipd.info.uni-karlsruhe.de>
Mon, 24 Apr 2006 13:11:34 +0000
(13:11 +0000)
ir/be/beabi.c
patch
|
blob
|
history
diff --git
a/ir/be/beabi.c
b/ir/be/beabi.c
index
b9783c8
..
a763407
100644
(file)
--- a/
ir/be/beabi.c
+++ b/
ir/be/beabi.c
@@
-1161,6
+1161,15
@@
static ir_node *create_barrier(be_abi_irg_t *env, ir_node *bl, ir_node **mem, pm
return irn;
}
return irn;
}
+/**
+ * Creates a be_Return for a Return node.
+ *
+ * @param @env the abi environment
+ * @param irn the Return node or NULL if there was none
+ * @param bl the block where the be_Retun should be placed
+ * @param mem the current memory
+ * @param n_res number of return results
+ */
static ir_node *create_be_return(be_abi_irg_t *env, ir_node *irn, ir_node *bl, ir_node *mem, int n_res) {
be_abi_call_t *call = env->call;
const arch_isa_t *isa = env->birg->main_env->arch_env->isa;
static ir_node *create_be_return(be_abi_irg_t *env, ir_node *irn, ir_node *bl, ir_node *mem, int n_res) {
be_abi_call_t *call = env->call;
const arch_isa_t *isa = env->birg->main_env->arch_env->isa;
@@
-1449,17
+1458,13
@@
static void modify_irg(be_abi_irg_t *env)
for (i = 0, n = get_Block_n_cfgpreds(end); i < n; ++i) {
ir_node *irn = get_Block_cfgpred(end, i);
for (i = 0, n = get_Block_n_cfgpreds(end); i < n; ++i) {
ir_node *irn = get_Block_cfgpred(end, i);
- if (
get_irn_opcode(irn) == iro_Return
) {
+ if (
is_Return(irn)
) {
ir_node *ret = create_be_return(env, irn, get_nodes_block(irn), get_Return_mem(irn), get_Return_n_ress(irn));
exchange(irn, ret);
}
}
ir_node *ret = create_be_return(env, irn, get_nodes_block(irn), get_Return_mem(irn), get_Return_n_ress(irn));
exchange(irn, ret);
}
}
-
- if (n <= 0) {
- /* we have endless loops, add a dummy return without return vals */
- ir_node *ret = create_be_return(env, NULL, end, get_irg_no_mem(irg), n);
- add_End_keepalive(get_irg_end(irg), ret);
- }
+ /* if we have endless loops here, n might be <= 0. Do NOT create a be_Return than,
+ the code is dead and will never be executed. */
del_pset(dont_save);
obstack_free(&env->obst, args);
del_pset(dont_save);
obstack_free(&env->obst, args);