summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2021-12-19 18:35:27 +0100
committerMike Pall <mike>2021-12-19 18:35:27 +0100
commite73916d811710ab02a4dfe447d621c99f4e7186c (patch)
tree50f7ddc6854c2e9fedb26ef2d0c727b0c623f7e4
parent7b994e0ee0399caf6319865bbac88ddf62129a36 (diff)
downloadluajit2-e73916d811710ab02a4dfe447d621c99f4e7186c.tar.gz
Prevent CSE of a REF_BASE operand across IR_RETF.
Reported by XmiliaH.
-rw-r--r--src/lj_opt_fold.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index b9efb0a1..6bb3fc59 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -2096,6 +2096,17 @@ LJFOLDF(xload_kptr)
LJFOLD(XLOAD any any)
LJFOLDX(lj_opt_fwd_xload)
+/* -- Frame handling ------------------------------------------------------ */
+
+/* Prevent CSE of a REF_BASE operand across IR_RETF. */
+LJFOLD(SUB any BASE)
+LJFOLD(SUB BASE any)
+LJFOLD(EQ any BASE)
+LJFOLDF(fold_base)
+{
+ return lj_opt_cselim(J, J->chain[IR_RETF]);
+}
+
/* -- Write barriers ------------------------------------------------------ */
/* Write barriers are amenable to CSE, but not across any incremental