diff options
author | Mike Pall <mike> | 2024-08-15 00:07:34 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2024-08-15 00:07:34 +0200 |
commit | 3bdc6498c4c012a8fbf9cfa2756a5b07f56f1540 (patch) | |
tree | 983ae8af5337389ab12ae0a6661f97ea2f80247f | |
parent | 7a608e4425ce0777f5c980dad9f4fdc1bcce0b8c (diff) | |
download | luajit-3bdc6498c4c012a8fbf9cfa2756a5b07f56f1540.tar.gz luajit-3bdc6498c4c012a8fbf9cfa2756a5b07f56f1540.tar.bz2 luajit-3bdc6498c4c012a8fbf9cfa2756a5b07f56f1540.zip |
Limit CSE for IR_CARG to fix loop optimizations.
Thanks to Peter Cawley. #1244
-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 b437d672..98ec28c6 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -2171,6 +2171,17 @@ LJFOLD(CNEW any any) | |||
2171 | LJFOLD(XSNEW any any) | 2171 | LJFOLD(XSNEW any any) |
2172 | LJFOLDX(lj_ir_emit) | 2172 | LJFOLDX(lj_ir_emit) |
2173 | 2173 | ||
2174 | /* -- Miscellaneous ------------------------------------------------------- */ | ||
2175 | |||
2176 | LJFOLD(CARG any any) | ||
2177 | LJFOLDF(cse_carg) | ||
2178 | { | ||
2179 | TRef tr = lj_opt_cse(J); | ||
2180 | if (tref_ref(tr) < J->chain[IR_LOOP]) /* CSE across loop? */ | ||
2181 | return EMITFOLD; /* Raw emit. Assumes fins is left intact by CSE. */ | ||
2182 | return tr; | ||
2183 | } | ||
2184 | |||
2174 | /* ------------------------------------------------------------------------ */ | 2185 | /* ------------------------------------------------------------------------ */ |
2175 | 2186 | ||
2176 | /* Every entry in the generated hash table is a 32 bit pattern: | 2187 | /* Every entry in the generated hash table is a 32 bit pattern: |