Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1105)

Unified Diff: src/compiler/simplified-operator.cc

Issue 2373983004: [turbofan] inline %StringIteratorPrototype%.next in JSBuiltinReducer. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) { \

Powered by Google App Engine
This is Rietveld 408576698