aboutsummaryrefslogtreecommitdiffhomepage
path: root/x86_64
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2026-01-08 12:21:40 +0100
committerlemon <lsof@mailbox.org>2026-01-08 12:21:40 +0100
commit2769a58ab256522eafec1f833676ceffb4baff24 (patch)
tree6c76f99d14598d7cf0a93a08a8dcd714752236f2 /x86_64
parent45036f2a6f612d8bbe071d332c5a0baf92783044 (diff)
codegen: eliminate redudant consecutive ret sequences
Diffstat (limited to 'x86_64')
-rw-r--r--x86_64/emit.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/x86_64/emit.c b/x86_64/emit.c
index 783ea20..17ea1f3 100644
--- a/x86_64/emit.c
+++ b/x86_64/emit.c
@@ -1372,6 +1372,8 @@ emitbin(struct function *fn)
emitinstr(pcode, fn, blk, i, &instrtab[blk->ins.p[i]]);
if (blk->jmp.t == Jret) {
+ if (blk->lnext != fn->entry && blk->lnext->jmp.t == Jret && blk->lnext->ins.n == 0)
+ continue; /* fallthru to next blk's RET */
/* epilogue */
if (fn->stksiz && (saverestore || !usebp))
Xadd(pcode, KPTR, mkoper(OREG, .reg = RSP), mkoper(OIMM, .imm = fn->stksiz));