Index: src/compiler/machine-operator.cc |
diff --git a/src/compiler/machine-operator.cc b/src/compiler/machine-operator.cc |
index 07bcf3f77f1b208a2c7dc8c655151aede2d0b084..b7ddcdb339b1c398c5d8134487087d373e721efe 100644 |
--- a/src/compiler/machine-operator.cc |
+++ b/src/compiler/machine-operator.cc |
@@ -122,18 +122,13 @@ CheckedStoreRepresentation CheckedStoreRepresentationOf(Operator const* op) { |
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(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,12 +139,19 @@ 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) |
+#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(Float32Abs, Operator::kNoProperties, 1, 0, 1) \ |
+ V(Float64Abs, 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) |
+ |
#define MACHINE_TYPE_LIST(V) \ |
V(MachFloat32) \ |
@@ -184,6 +186,7 @@ struct MachineOperatorGlobalCache { |
}; \ |
Name##Operator k##Name; |
PURE_OP_LIST(PURE) |
+ PURE_OPTIONAL_OP_LIST(PURE) |
#undef PURE |
#define LOAD(Type) \ |
@@ -255,6 +258,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) { |