]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Limit CSE for IR_CARG to fix loop optimizations.
authorMike Pall <mike>
Wed, 14 Aug 2024 22:07:34 +0000 (00:07 +0200)
committerMike Pall <mike>
Wed, 14 Aug 2024 22:07:34 +0000 (00:07 +0200)
Thanks to Peter Cawley. #1244

src/lj_opt_fold.c

index b437d67237b7e9a91cdb57582e5532a709e2cd65..98ec28c623fba90d05059450e6a4b4f07bb39efc 100644 (file)
@@ -2171,6 +2171,17 @@ LJFOLD(CNEW any any)
 LJFOLD(XSNEW any any)
 LJFOLDX(lj_ir_emit)
 
+/* -- Miscellaneous ------------------------------------------------------- */
+
+LJFOLD(CARG any any)
+LJFOLDF(cse_carg)
+{
+  TRef tr = lj_opt_cse(J);
+  if (tref_ref(tr) < J->chain[IR_LOOP])  /* CSE across loop? */
+    return EMITFOLD;  /* Raw emit. Assumes fins is left intact by CSE. */
+  return tr;
+}
+
 /* ------------------------------------------------------------------------ */
 
 /* Every entry in the generated hash table is a 32 bit pattern: