| Index: src/compiler/machine-operator.cc
 | 
| diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc
 | 
| index dc00ddc587476fe284c16565cd28b8c561682c31..e850534923eea923d56d93d41c86b526079b5345 100644
 | 
| --- a/src/compiler/machine-operator.cc
 | 
| +++ b/src/compiler/machine-operator.cc
 | 
| @@ -118,22 +118,19 @@ CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) {
 | 
|    V(TruncateFloat64ToFloat32, Operator::kNoProperties, 1, 0, 1)               \
 | 
|    V(TruncateFloat64ToInt32, Operator::kNoProperties, 1, 0, 1)                 \
 | 
|    V(TruncateInt64ToInt32, Operator::kNoProperties, 1, 0, 1)                   \
 | 
| +  V(Float32Abs, Operator::kNoProperties, 1, 0, 1)                             \
 | 
|    V(Float32Add, Operator::kCommutative, 2, 0, 1)                              \
 | 
|    V(Float32Sub, Operator::kNoProperties, 2, 0, 1)                             \
 | 
|    V(Float32Mul, Operator::kCommutative, 2, 0, 1)                              \
 | 
|    V(Float32Div, Operator::kNoProperties, 2, 0, 1)                             \
 | 
| -  V(Float32Abs, Operator::kNoProperties, 1, 0, 1)                             \
 | 
|    V(Float32Sqrt, Operator::kNoProperties, 1, 0, 1)                            \
 | 
| +  V(Float64Abs, Operator::kNoProperties, 1, 0, 1)                             \
 | 
|    V(Float64Add, Operator::kCommutative, 2, 0, 1)                              \
 | 
|    V(Float64Sub, Operator::kNoProperties, 2, 0, 1)                             \
 | 
|    V(Float64Mul, Operator::kCommutative, 2, 0, 1)                              \
 | 
|    V(Float64Div, Operator::kNoProperties, 2, 0, 1)                             \
 | 
|    V(Float64Mod, Operator::kNoProperties, 2, 0, 1)                             \
 | 
| -  V(Float64Abs, Operator::kNoProperties, 1, 0, 1)                             \
 | 
|    V(Float64Sqrt, Operator::kNoProperties, 1, 0, 1)                            \
 | 
| -  V(Float64RoundDown, Operator::kNoProperties, 1, 0, 1)                       \
 | 
| -  V(Float64RoundTruncate, Operator::kNoProperties, 1, 0, 1)                   \
 | 
| -  V(Float64RoundTiesAway, Operator::kNoProperties, 1, 0, 1)                   \
 | 
|    V(Float32Equal, Operator::kCommutative, 2, 0, 1)                            \
 | 
|    V(Float32LessThan, Operator::kNoProperties, 2, 0, 1)                        \
 | 
|    V(Float32LessThanOrEqual, Operator::kNoProperties, 2, 0, 1)                 \
 | 
| @@ -144,13 +141,18 @@ CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) {
 | 
|    V(Float64ExtractHighWord32, Operator::kNoProperties, 1, 0, 1)               \
 | 
|    V(Float64InsertLowWord32, Operator::kNoProperties, 2, 0, 1)                 \
 | 
|    V(Float64InsertHighWord32, Operator::kNoProperties, 2, 0, 1)                \
 | 
| -  V(Float32Max, Operator::kNoProperties, 2, 0, 1)                             \
 | 
| -  V(Float32Min, Operator::kNoProperties, 2, 0, 1)                             \
 | 
| -  V(Float64Max, Operator::kNoProperties, 2, 0, 1)                             \
 | 
| -  V(Float64Min, Operator::kNoProperties, 2, 0, 1)                             \
 | 
|    V(LoadStackPointer, Operator::kNoProperties, 0, 0, 1)                       \
 | 
|    V(LoadFramePointer, Operator::kNoProperties, 0, 0, 1)
 | 
|  
 | 
| +#define PURE_OPTIONAL_OP_LIST(V)                            \
 | 
| +  V(Float32Max, Operator::kNoProperties, 2, 0, 1)           \
 | 
| +  V(Float32Min, Operator::kNoProperties, 2, 0, 1)           \
 | 
| +  V(Float64Max, Operator::kNoProperties, 2, 0, 1)           \
 | 
| +  V(Float64Min, Operator::kNoProperties, 2, 0, 1)           \
 | 
| +  V(Float64RoundDown, Operator::kNoProperties, 1, 0, 1)     \
 | 
| +  V(Float64RoundTruncate, Operator::kNoProperties, 1, 0, 1) \
 | 
| +  V(Float64RoundTiesAway, Operator::kNoProperties, 1, 0, 1)
 | 
| +
 | 
|  
 | 
|  #define MACHINE_TYPE_LIST(V) \
 | 
|    V(MachFloat32)             \
 | 
| @@ -185,6 +187,7 @@ struct MachineOperatorGlobalCache {
 | 
|    };                                                                           \
 | 
|    Name##Operator k##Name;
 | 
|    PURE_OP_LIST(PURE)
 | 
| +  PURE_OPTIONAL_OP_LIST(PURE)
 | 
|  #undef PURE
 | 
|  
 | 
|  #define LOAD(Type)                                                             \
 | 
| @@ -256,6 +259,13 @@ MachineOperatorBuilder::MachineOperatorBuilder(Zone* zone, MachineType word,
 | 
|  PURE_OP_LIST(PURE)
 | 
|  #undef PURE
 | 
|  
 | 
| +#define PURE(Name, properties, value_input_count, control_input_count,     \
 | 
| +             output_count)                                                 \
 | 
| +  const OptionalOperator MachineOperatorBuilder::Name() {                  \
 | 
| +    return OptionalOperator(flags_ & k##Name ? &cache_.k##Name : nullptr); \
 | 
| +  }
 | 
| +PURE_OPTIONAL_OP_LIST(PURE)
 | 
| +#undef PURE
 | 
|  
 | 
|  const Operator* MachineOperatorBuilder::Load(LoadRepresentation rep) {
 | 
|    switch (rep) {
 | 
| 
 |