summaryrefslogtreecommitdiffhomepage
path: root/ir/be/bespillslots.c
diff options
context:
space:
mode:
authorManuel Mohr <manuel.mohr@kit.edu>2013-06-27 14:00:31 +0200
committerManuel Mohr <manuel.mohr@kit.edu>2013-06-27 14:00:31 +0200
commit4e36e86b7ae7850168faf21d14e925d32462db1b (patch)
tree7821ab8f7af73808ea2403b2350d0a592ea1522c /ir/be/bespillslots.c
parent60a4728c16f2f39160e0369a1c7d9baad399dcf7 (diff)
Do not coalesce spillslots if graph contains a call that returns twice.
This works around a problem with modeling control flow for calls to setjmp and similar functions.
Diffstat (limited to 'ir/be/bespillslots.c')
-rw-r--r--ir/be/bespillslots.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/ir/be/bespillslots.c b/ir/be/bespillslots.c
index d2fd98f..64b538e 100644
--- a/ir/be/bespillslots.c
+++ b/ir/be/bespillslots.c
@@ -675,7 +675,8 @@ void be_free_frame_entity_coalescer(be_fec_env_t *env)
void be_assign_entities(be_fec_env_t *env,
set_frame_entity_func set_frame_entity,
- bool alloc_entities_at_begin)
+ bool alloc_entities_at_begin,
+ bool coalescing_allowed)
{
env->set_frame_entity = set_frame_entity;
env->at_begin = alloc_entities_at_begin;
@@ -684,7 +685,7 @@ void be_assign_entities(be_fec_env_t *env,
stat_ev_dbl("spillslots", ARR_LEN(env->spills));
}
- if (be_coalesce_spill_slots) {
+ if (be_coalesce_spill_slots && coalescing_allowed) {
do_greedy_coalescing(env);
}