| Index: test/cctest/compiler/test-machine-operator-reducer.cc
 | 
| diff --git a/test/cctest/compiler/test-machine-operator-reducer.cc b/test/cctest/compiler/test-machine-operator-reducer.cc
 | 
| index c46045635d2354eb88cabdbded9e3ce7c1c9be9e..7ee5751875476846abc5cee5fba4c11b394a5087 100644
 | 
| --- a/test/cctest/compiler/test-machine-operator-reducer.cc
 | 
| +++ b/test/cctest/compiler/test-machine-operator-reducer.cc
 | 
| @@ -100,7 +100,7 @@ class ReducerTester : public HandleAndZoneScope {
 | 
|    // the {expect} value.
 | 
|    template <typename T>
 | 
|    void CheckFoldBinop(volatile T expect, Node* a, Node* b) {
 | 
| -    CHECK_NE(NULL, binop);
 | 
| +    CHECK(binop);
 | 
|      Node* n = CreateBinopNode(a, b);
 | 
|      MachineOperatorReducer reducer(&jsgraph);
 | 
|      Reduction reduction = reducer.Reduce(n);
 | 
| @@ -112,7 +112,7 @@ class ReducerTester : public HandleAndZoneScope {
 | 
|    // Check that the reduction of this binop applied to {a} and {b} yields
 | 
|    // the {expect} node.
 | 
|    void CheckBinop(Node* expect, Node* a, Node* b) {
 | 
| -    CHECK_NE(NULL, binop);
 | 
| +    CHECK(binop);
 | 
|      Node* n = CreateBinopNode(a, b);
 | 
|      MachineOperatorReducer reducer(&jsgraph);
 | 
|      Reduction reduction = reducer.Reduce(n);
 | 
| @@ -124,7 +124,7 @@ class ReducerTester : public HandleAndZoneScope {
 | 
|    // this binop applied to {left_expect} and {right_expect}.
 | 
|    void CheckFoldBinop(Node* left_expect, Node* right_expect, Node* left,
 | 
|                        Node* right) {
 | 
| -    CHECK_NE(NULL, binop);
 | 
| +    CHECK(binop);
 | 
|      Node* n = CreateBinopNode(left, right);
 | 
|      MachineOperatorReducer reducer(&jsgraph);
 | 
|      Reduction reduction = reducer.Reduce(n);
 | 
| @@ -139,7 +139,7 @@ class ReducerTester : public HandleAndZoneScope {
 | 
|    template <typename T>
 | 
|    void CheckFoldBinop(volatile T left_expect, const Operator* op_expect,
 | 
|                        Node* right_expect, Node* left, Node* right) {
 | 
| -    CHECK_NE(NULL, binop);
 | 
| +    CHECK(binop);
 | 
|      Node* n = CreateBinopNode(left, right);
 | 
|      MachineOperatorReducer reducer(&jsgraph);
 | 
|      Reduction r = reducer.Reduce(n);
 | 
| @@ -154,7 +154,7 @@ class ReducerTester : public HandleAndZoneScope {
 | 
|    template <typename T>
 | 
|    void CheckFoldBinop(Node* left_expect, const Operator* op_expect,
 | 
|                        volatile T right_expect, Node* left, Node* right) {
 | 
| -    CHECK_NE(NULL, binop);
 | 
| +    CHECK(binop);
 | 
|      Node* n = CreateBinopNode(left, right);
 | 
|      MachineOperatorReducer reducer(&jsgraph);
 | 
|      Reduction r = reducer.Reduce(n);
 | 
| @@ -723,133 +723,6 @@ TEST(ReduceLoadStore) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -static void CheckNans(ReducerTester* R) {
 | 
| -  Node* x = R->Parameter();
 | 
| -  std::vector<double> nans = ValueHelper::nan_vector();
 | 
| -  for (std::vector<double>::const_iterator pl = nans.begin(); pl != nans.end();
 | 
| -       ++pl) {
 | 
| -    for (std::vector<double>::const_iterator pr = nans.begin();
 | 
| -         pr != nans.end(); ++pr) {
 | 
| -      Node* nan1 = R->Constant<double>(*pl);
 | 
| -      Node* nan2 = R->Constant<double>(*pr);
 | 
| -      R->CheckBinop(nan1, x, nan1);     // x op NaN => NaN
 | 
| -      R->CheckBinop(nan1, nan1, x);     // NaN op x => NaN
 | 
| -      R->CheckBinop(nan1, nan2, nan1);  // NaN op NaN => NaN
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -
 | 
| -TEST(ReduceFloat64Add) {
 | 
| -  ReducerTester R;
 | 
| -  R.binop = R.machine.Float64Add();
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(pl) {
 | 
| -    FOR_FLOAT64_INPUTS(pr) {
 | 
| -      double x = *pl, y = *pr;
 | 
| -      R.CheckFoldBinop<double>(x + y, x, y);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(i) {
 | 
| -    Double tmp(*i);
 | 
| -    if (!tmp.IsSpecial() || tmp.IsInfinite()) {
 | 
| -      // Don't check NaNs as they are reduced more.
 | 
| -      R.CheckPutConstantOnRight(*i);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  CheckNans(&R);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -TEST(ReduceFloat64Sub) {
 | 
| -  ReducerTester R;
 | 
| -  R.binop = R.machine.Float64Sub();
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(pl) {
 | 
| -    FOR_FLOAT64_INPUTS(pr) {
 | 
| -      double x = *pl, y = *pr;
 | 
| -      R.CheckFoldBinop<double>(x - y, x, y);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  Node* zero = R.Constant<double>(0.0);
 | 
| -  Node* x = R.Parameter();
 | 
| -
 | 
| -  R.CheckBinop(x, x, zero);  // x - 0.0 => x
 | 
| -
 | 
| -  CheckNans(&R);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -TEST(ReduceFloat64Mul) {
 | 
| -  ReducerTester R;
 | 
| -  R.binop = R.machine.Float64Mul();
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(pl) {
 | 
| -    FOR_FLOAT64_INPUTS(pr) {
 | 
| -      double x = *pl, y = *pr;
 | 
| -      R.CheckFoldBinop<double>(x * y, x, y);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  double inf = V8_INFINITY;
 | 
| -  R.CheckPutConstantOnRight(-inf);
 | 
| -  R.CheckPutConstantOnRight(-0.1);
 | 
| -  R.CheckPutConstantOnRight(0.1);
 | 
| -  R.CheckPutConstantOnRight(inf);
 | 
| -
 | 
| -  Node* x = R.Parameter();
 | 
| -  Node* one = R.Constant<double>(1.0);
 | 
| -
 | 
| -  R.CheckBinop(x, x, one);  // x * 1.0 => x
 | 
| -  R.CheckBinop(x, one, x);  // 1.0 * x => x
 | 
| -
 | 
| -  CheckNans(&R);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -TEST(ReduceFloat64Div) {
 | 
| -  ReducerTester R;
 | 
| -  R.binop = R.machine.Float64Div();
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(pl) {
 | 
| -    FOR_FLOAT64_INPUTS(pr) {
 | 
| -      double x = *pl, y = *pr;
 | 
| -      R.CheckFoldBinop<double>(x / y, x, y);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  Node* x = R.Parameter();
 | 
| -  Node* one = R.Constant<double>(1.0);
 | 
| -
 | 
| -  R.CheckBinop(x, x, one);  // x / 1.0 => x
 | 
| -
 | 
| -  CheckNans(&R);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -TEST(ReduceFloat64Mod) {
 | 
| -  ReducerTester R;
 | 
| -  R.binop = R.machine.Float64Mod();
 | 
| -
 | 
| -  FOR_FLOAT64_INPUTS(pl) {
 | 
| -    FOR_FLOAT64_INPUTS(pr) {
 | 
| -      double x = *pl, y = *pr;
 | 
| -      R.CheckFoldBinop<double>(modulo(x, y), x, y);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  Node* x = R.Parameter();
 | 
| -  Node* zero = R.Constant<double>(0.0);
 | 
| -
 | 
| -  R.CheckFoldBinop<double>(std::numeric_limits<double>::quiet_NaN(), x, zero);
 | 
| -
 | 
| -  CheckNans(&R);
 | 
| -}
 | 
| -
 | 
| -
 | 
|  // TODO(titzer): test MachineOperatorReducer for Word64And
 | 
|  // TODO(titzer): test MachineOperatorReducer for Word64Or
 | 
|  // TODO(titzer): test MachineOperatorReducer for Word64Xor
 | 
| @@ -870,3 +743,8 @@ TEST(ReduceFloat64Mod) {
 | 
|  // TODO(titzer): test MachineOperatorReducer for ChangeInt32ToFloat64
 | 
|  // TODO(titzer): test MachineOperatorReducer for ChangeFloat64ToInt32
 | 
|  // TODO(titzer): test MachineOperatorReducer for Float64Compare
 | 
| +// TODO(titzer): test MachineOperatorReducer for Float64Add
 | 
| +// TODO(titzer): test MachineOperatorReducer for Float64Sub
 | 
| +// TODO(titzer): test MachineOperatorReducer for Float64Mul
 | 
| +// TODO(titzer): test MachineOperatorReducer for Float64Div
 | 
| +// TODO(titzer): test MachineOperatorReducer for Float64Mod
 | 
| 
 |