aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ir_mem2reg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir_mem2reg.c')
-rw-r--r--src/ir_mem2reg.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/ir_mem2reg.c b/src/ir_mem2reg.c
index ae41833..043ac9b 100644
--- a/src/ir_mem2reg.c
+++ b/src/ir_mem2reg.c
@@ -257,6 +257,12 @@ mem2reg(Function *fn)
do {
if (use->u == USERJUMP) goto Skip;
Instr *m = &instrtab[use->u];
+ if (use->blk->id < sb.lastvisit) {
+ /* alloca appears after some of its uses; happens rarely, only
+ * generated with code with gotos into loops. breaks this algo
+ * due to reprocessing sealed blocks */
+ goto Skip;
+ }
if (oisload(m->op) && (!sz || sz == loadsz(m->op))) {
sz = loadsz(m->op);
k = loadcls(m->op);