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

Unified Diff: src/compiler/js-global-object-specialization.cc

Issue 2312703002: [turbofan] Use MachineRepresentation for PropertyCell access. (Closed)
Patch Set: Nit. 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
« no previous file with comments | « src/compiler/access-builder.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/js-global-object-specialization.cc
diff --git a/src/compiler/js-global-object-specialization.cc b/src/compiler/js-global-object-specialization.cc
index f76ce0e383d7ef3a8f177a0149cd8aca0ab01523..85cdf53824a2636311b1f0d3a4251074ed02e879 100644
--- a/src/compiler/js-global-object-specialization.cc
+++ b/src/compiler/js-global-object-specialization.cc
@@ -48,6 +48,18 @@ Reduction JSGlobalObjectSpecialization::Reduce(Node* node) {
return NoChange();
}
+static FieldAccess ForPropertyCellValue(MachineRepresentation representation,
Benedikt Meurer 2016/09/05 12:10:48 Nit: Put this into an anonymous namespace instead
mvstanton 2016/09/05 12:54:18 Done.
+ Type* type, Handle<Name> name) {
+ WriteBarrierKind kind = kFullWriteBarrier;
+ if (representation == MachineRepresentation::kTaggedSigned) {
+ kind = kNoWriteBarrier;
+ }
Benedikt Meurer 2016/09/05 12:10:48 You can use kPointerWriteBarrier for kTaggedPointe
mvstanton 2016/09/05 12:54:18 Done.
+ MachineType r = MachineType::TypeForRepresentation(representation);
+ FieldAccess access = {kTaggedBase, PropertyCell::kValueOffset, name, type, r,
+ kind};
+ return access;
+}
+
Reduction JSGlobalObjectSpecialization::ReduceJSLoadGlobal(Node* node) {
DCHECK_EQ(IrOpcode::kJSLoadGlobal, node->opcode());
Handle<Name> name = LoadGlobalParametersOf(node->op()).name();
@@ -104,25 +116,31 @@ Reduction JSGlobalObjectSpecialization::ReduceJSLoadGlobal(Node* node) {
}
// Load from constant type cell can benefit from type feedback.
- Type* property_cell_value_type = Type::Tagged();
+ Type* property_cell_value_type = Type::NonInternal();
+ MachineRepresentation representation = MachineRepresentation::kTagged;
if (property_details.cell_type() == PropertyCellType::kConstantType) {
// Compute proper type based on the current value in the cell.
if (property_cell_value->IsSmi()) {
property_cell_value_type = type_cache_.kSmi;
+ representation = MachineRepresentation::kTaggedSigned;
} else if (property_cell_value->IsNumber()) {
+ // TODO(mvstanton): Remove kHeapNumber from type cache, it's just
+ // Type::Number().
property_cell_value_type = type_cache_.kHeapNumber;
+ representation = MachineRepresentation::kTaggedPointer;
} else {
// TODO(turbofan): Track the property_cell_value_map on the FieldAccess
// below and use it in LoadElimination to eliminate map checks.
Handle<Map> property_cell_value_map(
Handle<HeapObject>::cast(property_cell_value)->map(), isolate());
property_cell_value_type = Type::For(property_cell_value_map);
+ representation = MachineRepresentation::kTaggedPointer;
}
}
- Node* value = effect = graph()->NewNode(
- simplified()->LoadField(
- AccessBuilder::ForPropertyCellValue(property_cell_value_type)),
- jsgraph()->HeapConstant(property_cell), effect, control);
+ Node* value = effect =
+ graph()->NewNode(simplified()->LoadField(ForPropertyCellValue(
+ representation, property_cell_value_type, name)),
+ jsgraph()->HeapConstant(property_cell), effect, control);
ReplaceWithValue(node, value, effect, control);
return Replace(value);
}
@@ -181,6 +199,7 @@ Reduction JSGlobalObjectSpecialization::ReduceJSStoreGlobal(Node* node) {
// values' type doesn't match the type of the previous value in the cell.
dependencies()->AssumePropertyCell(property_cell);
Type* property_cell_value_type;
+ MachineRepresentation representation = MachineRepresentation::kTagged;
if (property_cell_value->IsHeapObject()) {
// Check that the {value} is a HeapObject.
value = effect = graph()->NewNode(simplified()->CheckTaggedPointer(),
@@ -192,16 +211,18 @@ Reduction JSGlobalObjectSpecialization::ReduceJSStoreGlobal(Node* node) {
effect = graph()->NewNode(
simplified()->CheckMaps(1), value,
jsgraph()->HeapConstant(property_cell_value_map), effect, control);
- property_cell_value_type = Type::TaggedPointer();
+ property_cell_value_type = Type::OtherInternal();
+ representation = MachineRepresentation::kTaggedPointer;
} else {
// Check that the {value} is a Smi.
value = effect = graph()->NewNode(simplified()->CheckTaggedSigned(),
value, effect, control);
- property_cell_value_type = Type::TaggedSigned();
+ property_cell_value_type = Type::Number();
Benedikt Meurer 2016/09/05 12:12:27 Type::SignedSmall here.
mvstanton 2016/09/05 12:54:18 Done.
+ representation = MachineRepresentation::kTaggedSigned;
}
effect = graph()->NewNode(
- simplified()->StoreField(
- AccessBuilder::ForPropertyCellValue(property_cell_value_type)),
+ simplified()->StoreField(ForPropertyCellValue(
+ representation, property_cell_value_type, name)),
jsgraph()->HeapConstant(property_cell), value, effect, control);
break;
}
@@ -215,7 +236,8 @@ Reduction JSGlobalObjectSpecialization::ReduceJSStoreGlobal(Node* node) {
dependencies()->AssumePropertyCell(property_cell);
}
effect = graph()->NewNode(
- simplified()->StoreField(AccessBuilder::ForPropertyCellValue()),
+ simplified()->StoreField(ForPropertyCellValue(
+ MachineRepresentation::kTagged, Type::NonInternal(), name)),
jsgraph()->HeapConstant(property_cell), value, effect, control);
break;
}
« no previous file with comments | « src/compiler/access-builder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698