| Index: src/compiler/simplified-operator.cc
|
| diff --git a/src/compiler/simplified-operator.cc b/src/compiler/simplified-operator.cc
|
| index ee03ba07bc755cb3d8f8b7992cc4875743b3a4e2..216ce9f7264ca29fa1e6be68ad767bc5fdd8ebe2 100644
|
| --- a/src/compiler/simplified-operator.cc
|
| +++ b/src/compiler/simplified-operator.cc
|
| @@ -337,6 +337,16 @@ PretenureFlag PretenureFlagOf(const Operator* op) {
|
| return OpParameter<PretenureFlag>(op);
|
| }
|
|
|
| +StringOperationHint StringOperationHintOf(const Operator* op) {
|
| + DCHECK(op->opcode() == IrOpcode::kStringCharCodeAt);
|
| + return OpParameter<StringOperationHint>(op);
|
| +}
|
| +
|
| +UnicodeEncoding UnicodeEncodingOf(const Operator* op) {
|
| + DCHECK(op->opcode() == IrOpcode::kStringFromCodePoint);
|
| + return OpParameter<UnicodeEncoding>(op);
|
| +}
|
| +
|
| #define PURE_OP_LIST(V) \
|
| V(BooleanNot, Operator::kNoProperties, 1, 0) \
|
| V(NumberEqual, Operator::kCommutative, 2, 0) \
|
| @@ -390,7 +400,6 @@ PretenureFlag PretenureFlagOf(const Operator* op) {
|
| V(NumberToInt32, Operator::kNoProperties, 1, 0) \
|
| V(NumberToUint32, Operator::kNoProperties, 1, 0) \
|
| V(NumberSilenceNaN, Operator::kNoProperties, 1, 0) \
|
| - V(StringCharCodeAt, Operator::kNoProperties, 2, 1) \
|
| V(StringFromCharCode, Operator::kNoProperties, 1, 0) \
|
| V(PlainPrimitiveToNumber, Operator::kNoProperties, 1, 0) \
|
| V(PlainPrimitiveToWord32, Operator::kNoProperties, 1, 0) \
|
| @@ -468,6 +477,28 @@ struct SimplifiedOperatorGlobalCache final {
|
| CHECKED_OP_LIST(CHECKED)
|
| #undef CHECKED
|
|
|
| + template <StringOperationHint kHint>
|
| + struct StringCharCodeAtOperator final : public Operator {
|
| + StringCharCodeAtOperator()
|
| + : Operator(IrOpcode::kStringCharCodeAt, Operator::kPure,
|
| + "StringCharCodeAt", 2, 0, 1, 1, 0, 0) {}
|
| + };
|
| + StringCharCodeAtOperator<StringOperationHint::kAny>
|
| + kStringCharCodeAtOperatorAny;
|
| + StringCharCodeAtOperator<StringOperationHint::kSeqStringOrExternalString>
|
| + kStringCharCodeAtOperatorSeqStringOrExternalString;
|
| +
|
| + template <UnicodeEncoding kEncoding>
|
| + struct StringFromCodePointOperator final : public Operator {
|
| + StringFromCodePointOperator()
|
| + : Operator(IrOpcode::kStringFromCodePoint, Operator::kPure,
|
| + "StringFromCodePoint", 1, 0, 0, 1, 0, 0) {}
|
| + };
|
| + StringFromCodePointOperator<UnicodeEncoding::UTF16>
|
| + kStringFromCodePointOperatorUTF16;
|
| + StringFromCodePointOperator<UnicodeEncoding::UTF32>
|
| + kStringFromCodePointOperatorUTF32;
|
| +
|
| struct ArrayBufferWasNeuteredOperator final : public Operator {
|
| ArrayBufferWasNeuteredOperator()
|
| : Operator(IrOpcode::kArrayBufferWasNeutered, Operator::kEliminatable,
|
| @@ -779,6 +810,30 @@ const Operator* SimplifiedOperatorBuilder::StoreBuffer(BufferAccess access) {
|
| return nullptr;
|
| }
|
|
|
| +const Operator* SimplifiedOperatorBuilder::StringCharCodeAt(
|
| + StringOperationHint hint) {
|
| + switch (hint) {
|
| + case StringOperationHint::kAny:
|
| + return &cache_.kStringCharCodeAtOperatorAny;
|
| + case StringOperationHint::kSeqStringOrExternalString:
|
| + return &cache_.kStringCharCodeAtOperatorSeqStringOrExternalString;
|
| + }
|
| + UNREACHABLE();
|
| + return nullptr;
|
| +}
|
| +
|
| +const Operator* SimplifiedOperatorBuilder::StringFromCodePoint(
|
| + UnicodeEncoding encoding) {
|
| + switch (encoding) {
|
| + case UnicodeEncoding::UTF16:
|
| + return &cache_.kStringFromCodePointOperatorUTF16;
|
| + case UnicodeEncoding::UTF32:
|
| + return &cache_.kStringFromCodePointOperatorUTF32;
|
| + }
|
| + UNREACHABLE();
|
| + return nullptr;
|
| +}
|
| +
|
| #define SPECULATIVE_NUMBER_BINOP(Name) \
|
| const Operator* SimplifiedOperatorBuilder::Name(NumberOperationHint hint) { \
|
| switch (hint) { \
|
|
|