diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ir_mem2reg.c | 6 |
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); |