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) { |