diff options
author | Mike Pall <mike> | 2021-12-19 18:35:27 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2021-12-19 18:35:27 +0100 |
commit | e73916d811710ab02a4dfe447d621c99f4e7186c (patch) | |
tree | 50f7ddc6854c2e9fedb26ef2d0c727b0c623f7e4 /src | |
parent | 7b994e0ee0399caf6319865bbac88ddf62129a36 (diff) | |
download | luajit-e73916d811710ab02a4dfe447d621c99f4e7186c.tar.gz luajit-e73916d811710ab02a4dfe447d621c99f4e7186c.tar.bz2 luajit-e73916d811710ab02a4dfe447d621c99f4e7186c.zip |
Prevent CSE of a REF_BASE operand across IR_RETF.
Reported by XmiliaH.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_opt_fold.c | 11 |
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) | |||
2096 | LJFOLD(XLOAD any any) | 2096 | LJFOLD(XLOAD any any) |
2097 | LJFOLDX(lj_opt_fwd_xload) | 2097 | LJFOLDX(lj_opt_fwd_xload) |
2098 | 2098 | ||
2099 | /* -- Frame handling ------------------------------------------------------ */ | ||
2100 | |||
2101 | /* Prevent CSE of a REF_BASE operand across IR_RETF. */ | ||
2102 | LJFOLD(SUB any BASE) | ||
2103 | LJFOLD(SUB BASE any) | ||
2104 | LJFOLD(EQ any BASE) | ||
2105 | LJFOLDF(fold_base) | ||
2106 | { | ||
2107 | return lj_opt_cselim(J, J->chain[IR_RETF]); | ||
2108 | } | ||
2109 | |||
2099 | /* -- Write barriers ------------------------------------------------------ */ | 2110 | /* -- Write barriers ------------------------------------------------------ */ |
2100 | 2111 | ||
2101 | /* Write barriers are amenable to CSE, but not across any incremental | 2112 | /* Write barriers are amenable to CSE, but not across any incremental |