Browse Source

Add FOLD rule to turn i << 1 into i + i.

Mike Pall 14 years ago
parent
commit
f6c4e8d3d7
1 changed files with 5 additions and 0 deletions
  1. 5 0
      src/lj_opt_fold.c

+ 5 - 0
src/lj_opt_fold.c

@@ -859,6 +859,11 @@ LJFOLDF(simplify_shift_ik)
   int32_t k = (fright->i & mask);
   if (k == 0)  /* i o 0 ==> i */
     return LEFTFOLD;
+  if (k == 1 && fins->o == IR_BSHL) {  /* i << 1 ==> i + i */
+    fins->o = IR_ADD;
+    fins->op2 = fins->op1;
+    return RETRYFOLD;
+  }
   if (k != fright->i) {  /* i o k ==> i o (k & mask) */
     fins->op2 = (IRRef1)lj_ir_kint(J, k);
     return RETRYFOLD;