From f308e00e03c28227cade61c9429dbf3ac526eb9a Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 8 Dec 2010 20:57:21 +0100 Subject: [PATCH] Add FOLD rule to reassociate 64 bit (x+k1)+k2. --- src/lj_opt_fold.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index cf5de82f..8fc646c9 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c @@ -983,6 +983,20 @@ LJFOLDF(reassoc_intarith_k) return NEXTFOLD; } +LJFOLD(ADD ADD KINT64) +LJFOLDF(reassoc_intarith_k64) +{ + IRIns *irk = IR(fleft->op2); + if (irk->o == IR_KINT64) { + uint64_t k = ir_kint64(irk)->u64 + ir_kint64(fright)->u64; + PHIBARRIER(fleft); + fins->op1 = fleft->op1; + fins->op2 = (IRRef1)lj_ir_kint64(J, k); + return RETRYFOLD; /* (i o k1) o k2 ==> i o (k1 o k2) */ + } + return NEXTFOLD; +} + LJFOLD(MIN MIN any) LJFOLD(MAX MAX any) LJFOLD(BAND BAND any)