Index: src/compiler/simplified-operator.cc |
diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc |
index dbb29eadddb64ff62aad54f7737f5b726dca521f..8432d21d952ff7b4fd4ae5ff968a75b000cdec01 100644 |
--- a/src/compiler/simplified-operator.cc |
+++ b/src/compiler/simplified-operator.cc |
@@ -174,9 +174,6 @@ const ElementAccess& ElementAccessOf(const Operator* op) { |
V(NumberToInt32, Operator::kNoProperties, 1) \ |
V(NumberToUint32, Operator::kNoProperties, 1) \ |
V(PlainPrimitiveToNumber, Operator::kNoProperties, 1) \ |
- V(StringEqual, Operator::kCommutative, 2) \ |
- V(StringLessThan, Operator::kNoProperties, 2) \ |
- V(StringLessThanOrEqual, Operator::kNoProperties, 2) \ |
V(ChangeTaggedToInt32, Operator::kNoProperties, 1) \ |
V(ChangeTaggedToUint32, Operator::kNoProperties, 1) \ |
V(ChangeTaggedToFloat64, Operator::kNoProperties, 1) \ |
@@ -187,6 +184,10 @@ const ElementAccess& ElementAccessOf(const Operator* op) { |
V(ChangeBitToBool, Operator::kNoProperties, 1) \ |
V(ObjectIsSmi, Operator::kNoProperties, 1) |
+#define NO_THROW_OP_LIST(V) \ |
+ V(StringEqual, Operator::kCommutative, 2) \ |
+ V(StringLessThan, Operator::kNoThrow, 2) \ |
+ V(StringLessThanOrEqual, Operator::kNoThrow, 2) |
struct SimplifiedOperatorGlobalCache final { |
#define PURE(Name, properties, input_count) \ |
@@ -199,6 +200,16 @@ struct SimplifiedOperatorGlobalCache final { |
PURE_OP_LIST(PURE) |
#undef PURE |
+#define NO_THROW(Name, properties, input_count) \ |
+ struct Name##Operator final : public Operator { \ |
+ Name##Operator() \ |
+ : Operator(IrOpcode::k##Name, Operator::kNoThrow | properties, #Name, \ |
+ input_count, 1, 1, 1, 1, 0) {} \ |
+ }; \ |
+ Name##Operator k##Name; |
+ NO_THROW_OP_LIST(NO_THROW) |
+#undef NO_THROW |
+ |
#define BUFFER_ACCESS(Type, type, TYPE, ctype, size) \ |
struct LoadBuffer##Type##Operator final : public Operator1<BufferAccess> { \ |
LoadBuffer##Type##Operator() \ |
@@ -229,10 +240,11 @@ SimplifiedOperatorBuilder::SimplifiedOperatorBuilder(Zone* zone) |
: cache_(kCache.Get()), zone_(zone) {} |
-#define PURE(Name, properties, input_count) \ |
+#define GET_FROM_CACHE(Name, properties, input_count) \ |
const Operator* SimplifiedOperatorBuilder::Name() { return &cache_.k##Name; } |
-PURE_OP_LIST(PURE) |
-#undef PURE |
+PURE_OP_LIST(GET_FROM_CACHE) |
+NO_THROW_OP_LIST(GET_FROM_CACHE) |
+#undef GET_FROM_CACHE |
const Operator* SimplifiedOperatorBuilder::ReferenceEqual(Type* type) { |