ソースを参照

Limit CSE for IR_CARG to fix loop optimizations.

Thanks to Peter Cawley. #1244
Mike Pall 1 年間 前
コミット
3bdc6498c4
1 ファイル変更11 行追加0 行削除
  1. 11 0
      src/lj_opt_fold.c

+ 11 - 0
src/lj_opt_fold.c

@@ -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: