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 |
