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

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

Issue 2797993006: [turbofan] Add type to the allocation operator. (Closed)
Patch Set: Rename Created 3 years, 8 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 f360c4ac0fe419382b7f34e288c1973e8ccc906f..a5582f3668dd0b2e236ac45cc500e7d5c7bede8f 100644
--- a/src/compiler/simplified-operator.cc
+++ b/src/compiler/simplified-operator.cc
@@ -388,9 +388,34 @@ NumberOperationHint NumberOperationHintOf(const Operator* op) {
return OpParameter<NumberOperationHint>(op);
}
+size_t hash_value(AllocationParameters info) {
+ return base::hash_combine(info.type, info.pretenure);
+}
+
+V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
+ AllocationParameters info) {
+ info.type->PrintTo(os);
+ return os << ", " << info.pretenure;
+}
+
+bool operator==(AllocationParameters const& lhs,
+ AllocationParameters const& rhs) {
+ return lhs.pretenure == rhs.pretenure && lhs.type == rhs.type;
+}
+
+bool operator!=(AllocationParameters const& lhs,
+ AllocationParameters const& rhs) {
+ return !(lhs == rhs);
+}
+
PretenureFlag PretenureFlagOf(const Operator* op) {
DCHECK_EQ(IrOpcode::kAllocate, op->opcode());
- return OpParameter<PretenureFlag>(op);
+ return OpParameter<AllocationParameters>(op).pretenure;
+}
+
+Type* AllocateTypeOf(const Operator* op) {
+ DCHECK_EQ(IrOpcode::kAllocate, op->opcode());
+ return OpParameter<AllocationParameters>(op).type;
}
UnicodeEncoding UnicodeEncodingOf(const Operator* op) {
@@ -646,16 +671,22 @@ struct SimplifiedOperatorGlobalCache final {
CheckFloat64HoleNaNOperator<CheckFloat64HoleMode::kNeverReturnHole>
kCheckFloat64HoleNeverReturnHoleOperator;
- template <PretenureFlag kPretenure>
- struct AllocateOperator final : public Operator1<PretenureFlag> {
- AllocateOperator()
- : Operator1<PretenureFlag>(
+ struct AllocateOperator : public Operator1<AllocationParameters> {
+ AllocateOperator(Type* type, PretenureFlag pretenure)
+ : Operator1<AllocationParameters>(
IrOpcode::kAllocate,
Operator::kNoDeopt | Operator::kNoThrow | Operator::kNoWrite,
- "Allocate", 1, 1, 1, 1, 1, 0, kPretenure) {}
+ "Allocate", 1, 1, 1, 1, 1, 0,
+ AllocationParameters(type, pretenure)) {}
};
- AllocateOperator<NOT_TENURED> kAllocateNotTenuredOperator;
- AllocateOperator<TENURED> kAllocateTenuredOperator;
+
+ template <PretenureFlag kPretenure>
+ struct AllocateTypeAnyOperator final : public AllocateOperator {
+ AllocateTypeAnyOperator() : AllocateOperator(Type::Any(), kPretenure) {}
+ };
+
+ AllocateTypeAnyOperator<NOT_TENURED> kAllocateNotTenuredTypeAnyOperator;
+ AllocateTypeAnyOperator<TENURED> kAllocateTenuredTypeAnyOperator;
struct EnsureWritableFastElementsOperator final : public Operator {
EnsureWritableFastElementsOperator()
@@ -864,15 +895,19 @@ bool IsRestLengthOf(const Operator* op) {
return OpParameter<ArgumentsLengthParameters>(op).is_rest_length;
}
-const Operator* SimplifiedOperatorBuilder::Allocate(PretenureFlag pretenure) {
- switch (pretenure) {
- case NOT_TENURED:
- return &cache_.kAllocateNotTenuredOperator;
- case TENURED:
- return &cache_.kAllocateTenuredOperator;
+const Operator* SimplifiedOperatorBuilder::Allocate(Type* type,
+ PretenureFlag pretenure) {
+ if (Type::Any()->Is(type)) {
Benedikt Meurer 2017/04/06 12:08:05 I'd rather remove the caching completely. We don't
Jarin 2017/04/06 15:11:29 Done.
+ switch (pretenure) {
+ case NOT_TENURED:
+ return &cache_.kAllocateNotTenuredTypeAnyOperator;
+ case TENURED:
+ return &cache_.kAllocateTenuredTypeAnyOperator;
+ }
+ UNREACHABLE();
}
- UNREACHABLE();
- return nullptr;
+ return new (zone())
+ SimplifiedOperatorGlobalCache::AllocateOperator(type, pretenure);
}

Powered by Google App Engine
This is Rietveld 408576698