aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2010-12-08 20:57:21 +0100
committerMike Pall <mike>2010-12-08 20:57:21 +0100
commitf308e00e03c28227cade61c9429dbf3ac526eb9a (patch)
tree4a3043870ecb278fa3bc1cd14f5eacc33111ee14
parent70071241bfbd06a02d61c6bfcc66e35eb7704d81 (diff)
downloadluajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.tar.gz
luajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.tar.bz2
luajit-f308e00e03c28227cade61c9429dbf3ac526eb9a.zip
Add FOLD rule to reassociate 64 bit (x+k1)+k2.
-rw-r--r--src/lj_opt_fold.c14
1 files changed, 14 insertions, 0 deletions
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)
983 return NEXTFOLD; 983 return NEXTFOLD;
984} 984}
985 985
986LJFOLD(ADD ADD KINT64)
987LJFOLDF(reassoc_intarith_k64)
988{
989 IRIns *irk = IR(fleft->op2);
990 if (irk->o == IR_KINT64) {
991 uint64_t k = ir_kint64(irk)->u64 + ir_kint64(fright)->u64;
992 PHIBARRIER(fleft);
993 fins->op1 = fleft->op1;
994 fins->op2 = (IRRef1)lj_ir_kint64(J, k);
995 return RETRYFOLD; /* (i o k1) o k2 ==> i o (k1 o k2) */
996 }
997 return NEXTFOLD;
998}
999
986LJFOLD(MIN MIN any) 1000LJFOLD(MIN MIN any)
987LJFOLD(MAX MAX any) 1001LJFOLD(MAX MAX any)
988LJFOLD(BAND BAND any) 1002LJFOLD(BAND BAND any)