[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 412/437: Add extra argument to jit_update to prevent rec
From: |
Andy Wingo |
Subject: |
[Guile-commits] 412/437: Add extra argument to jit_update to prevent recursion on branches |
Date: |
Mon, 2 Jul 2018 05:15:06 -0400 (EDT) |
wingo pushed a commit to branch lightning
in repository guile.
commit 59f32e85c3c9df698d244f41ff56d3b3e4ecb0d8
Author: pcpa <address@hidden>
Date: Wed Jan 31 17:09:29 2018 -0500
Add extra argument to jit_update to prevent recursion on branches
* lib/lightning.c: Avoid deep recursions when computing live
register ranges.
---
ChangeLog | 5 +++++
lib/lightning.c | 24 +++++++++++++++---------
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index eea7ae0..ef5af55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2018-01-31 Paulo Andrade <address@hidden>
+ * lib/lightning.c: Avoid deep recursions when computing live
+ register ranges.
+
+2018-01-31 Paulo Andrade <address@hidden>
+
* lib/jit_mips-cpu.c: Correct frame size and varargs
initialization for the n32 abi.
* lib/jit_mips.c, lib/jit_mips-fpu.c: Correct 32 bit abis
diff --git a/lib/lightning.c b/lib/lightning.c
index 57f5623..166aebf 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -91,10 +91,10 @@ _jit_dataset(jit_state_t *_jit);
static void
_jit_setup(jit_state_t *_jit, jit_block_t *block);
-#define jit_update(node, live, mask) _jit_update(_jit, node, live, mask)
+#define jit_update(node, live, mask, r) _jit_update(_jit, node, live,
mask, r)
static void
_jit_update(jit_state_t *_jit, jit_node_t *node,
- jit_regset_t *live, jit_regset_t *mask);
+ jit_regset_t *live, jit_regset_t *mask, jit_bool_t recurse);
#define thread_jumps() _thread_jumps(_jit)
static void
@@ -1574,7 +1574,7 @@ _jit_optimize(jit_state_t *_jit)
continue;
if (block->label->code != jit_code_epilog) {
jit_regset_set(&_jitc->regmask, &block->regmask);
- jit_update(block->label->next, &block->reglive, &_jitc->regmask);
+ jit_update(block->label->next, &block->reglive, &_jitc->regmask, 1);
}
}
/* do a second pass from start to properly handle some conditions
@@ -1587,7 +1587,7 @@ _jit_optimize(jit_state_t *_jit)
continue;
if (block->label->code != jit_code_epilog) {
jit_regset_set(&_jitc->regmask, &block->setmask);
- jit_update(block->label->next, &block->reglive, &_jitc->regmask);
+ jit_update(block->label->next, &block->reglive, &_jitc->regmask, 1);
}
}
@@ -1767,7 +1767,7 @@ _jit_reglive(jit_state_t *_jit, jit_node_t *node)
}
if (jit_regset_set_p(&_jitc->regmask)) {
bmp_zero();
- jit_update(node->next, &_jitc->reglive, &_jitc->regmask);
+ jit_update(node->next, &_jitc->reglive, &_jitc->regmask, 1);
if (jit_regset_set_p(&_jitc->regmask)) {
/* any unresolved live state is considered as live */
jit_regset_ior(&_jitc->reglive,
@@ -2193,7 +2193,7 @@ _jit_setup(jit_state_t *_jit, jit_block_t *block)
*/
static void
_jit_update(jit_state_t *_jit, jit_node_t *node,
- jit_regset_t *live, jit_regset_t *mask)
+ jit_regset_t *live, jit_regset_t *mask, jit_bool_t recurse)
{
jit_int32_t spec;
jit_int32_t regno;
@@ -2313,8 +2313,14 @@ _jit_update(jit_state_t *_jit, jit_node_t *node,
if (jit_regset_set_p(mask) == 0)
return;
/* restore mask if branch is conditional */
- jit_regset_set(&zmask, mask);
- jit_update(block->label->next, live, &zmask);
+ if (recurse) {
+ jit_regset_set(&zmask, mask);
+ jit_update(block->label->next, live, &zmask, 0);
+ }
+ else {
+ node = block->label->next;
+ goto restart;
+ }
jit_regset_xor(&ztmp, &zmask, mask);
/* remove known live registers from mask */
if (jit_regset_set_p(&ztmp)) {
@@ -3124,7 +3130,7 @@ _spill_reglive_p(jit_state_t *_jit, jit_node_t *node,
jit_int32_t regno)
if (!jit_regset_tstbit(&_jitc->reglive, regno)) {
bmp_zero();
jit_regset_setbit(&_jitc->regmask, regno);
- jit_update(node->next, &_jitc->reglive, &_jitc->regmask);
+ jit_update(node->next, &_jitc->reglive, &_jitc->regmask, 1);
if (!jit_regset_tstbit(&_jitc->reglive, regno) &&
register_change_p(node->next, node->link, regno) != jit_reg_change)
return (0);
- [Guile-commits] 361/437: Correct the reason the simplify_stxi bug was not noticed before, (continued)
- [Guile-commits] 361/437: Correct the reason the simplify_stxi bug was not noticed before, Andy Wingo, 2018/07/02
- [Guile-commits] 356/437: ARM: Do not limit to 24 bit displacement jump to unknown address, Andy Wingo, 2018/07/02
- [Guile-commits] 422/437: Remove lightning unit tests, Andy Wingo, 2018/07/02
- [Guile-commits] 226/437: New aarch64 port built on the Foundation v8 emulator., Andy Wingo, 2018/07/02
- [Guile-commits] 128/437: Big merge with new lightning semantics aiming for lightning 2.0., Andy Wingo, 2018/07/02
- [Guile-commits] 132/437: Add extra files implementing different jit backends., Andy Wingo, 2018/07/02
- [Guile-commits] 433/437: Remove unused configure-time checks for x87, thumb, and sof float, Andy Wingo, 2018/07/02
- [Guile-commits] 283/437: Correct crash on arm in the doc/printf example., Andy Wingo, 2018/07/02
- [Guile-commits] 432/437: Remove lightning configure snippet related to libdl, Andy Wingo, 2018/07/02
- [Guile-commits] 01/437: initial import, Andy Wingo, 2018/07/02
- [Guile-commits] 412/437: Add extra argument to jit_update to prevent recursion on branches,
Andy Wingo <=
- [Guile-commits] 404/437: Correct wrong live information for some code patterns, Andy Wingo, 2018/07/02