aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c
index ce78505b..62483c26 100644
--- a/src/lj_opt_fold.c
+++ b/src/lj_opt_fold.c
@@ -1935,9 +1935,10 @@ LJFOLDF(abc_k)
1935LJFOLD(ABC any any) 1935LJFOLD(ABC any any)
1936LJFOLDF(abc_invar) 1936LJFOLDF(abc_invar)
1937{ 1937{
1938 /* Invariant ABC marked as PTR. Drop if op1 is invariant, too. */ 1938 /* Invariant ABC marked as P32 or U32. Drop if op1 is invariant too. */
1939 if (!irt_isint(fins->t) && fins->op1 < J->chain[IR_LOOP] && 1939 if (!irt_isint(fins->t) && fins->op1 < J->chain[IR_LOOP] &&
1940 !irt_isphi(IR(fins->op1)->t)) 1940 (irt_isu32(fins->t) ||
1941 (!irref_isk(fins->op1) && !irt_isphi(IR(fins->op1)->t))))
1941 return DROPFOLD; 1942 return DROPFOLD;
1942 return NEXTFOLD; 1943 return NEXTFOLD;
1943} 1944}
@@ -2485,6 +2486,17 @@ LJFOLD(CNEW any any)
2485LJFOLD(XSNEW any any) 2486LJFOLD(XSNEW any any)
2486LJFOLDX(lj_ir_emit) 2487LJFOLDX(lj_ir_emit)
2487 2488
2489/* -- Miscellaneous ------------------------------------------------------- */
2490
2491LJFOLD(CARG any any)
2492LJFOLDF(cse_carg)
2493{
2494 TRef tr = lj_opt_cse(J);
2495 if (tref_ref(tr) < J->chain[IR_LOOP]) /* CSE across loop? */
2496 return EMITFOLD; /* Raw emit. Assumes fins is left intact by CSE. */
2497 return tr;
2498}
2499
2488/* ------------------------------------------------------------------------ */ 2500/* ------------------------------------------------------------------------ */
2489 2501
2490/* Every entry in the generated hash table is a 32 bit pattern: 2502/* Every entry in the generated hash table is a 32 bit pattern: