 Chromium Code Reviews
 Chromium Code Reviews Issue 2488623002:
  [turbofan] Introduce TypedObjectState common operator.  (Closed)
    
  
    Issue 2488623002:
  [turbofan] Introduce TypedObjectState common operator.  (Closed) 
  | Index: src/compiler/common-operator.cc | 
| diff --git a/src/compiler/common-operator.cc b/src/compiler/common-operator.cc | 
| index 12a06530e39fdc8a46b5fdbbe3f1659532e6c385..736a961e40336c477e7b1d33aac3bee27023281b 100644 | 
| --- a/src/compiler/common-operator.cc | 
| +++ b/src/compiler/common-operator.cc | 
| @@ -235,6 +235,12 @@ OsrGuardType OsrGuardTypeOf(Operator const* op) { | 
| return OpParameter<OsrGuardType>(op); | 
| } | 
| +ZoneVector<MachineType> const* MachineTypesOf(Operator const* op) { | 
| + DCHECK(op->opcode() == IrOpcode::kTypedObjectState || | 
| + op->opcode() == IrOpcode::kTypedStateValues); | 
| + return OpParameter<const ZoneVector<MachineType>*>(op); | 
| +} | 
| + | 
| #define CACHED_OP_LIST(V) \ | 
| V(Dead, Operator::kFoldable, 0, 0, 0, 1, 1, 1) \ | 
| V(IfTrue, Operator::kKontrol, 0, 0, 1, 0, 0, 1) \ | 
| @@ -1004,24 +1010,32 @@ const Operator* CommonOperatorBuilder::StateValues(int arguments) { | 
| arguments, 0, 0, 1, 0, 0); // counts | 
| } | 
| +const Operator* CommonOperatorBuilder::TypedStateValues( | 
| + const ZoneVector<MachineType>* types) { | 
| + return new (zone()) Operator1<const ZoneVector<MachineType>*>( // -- | 
| + IrOpcode::kTypedStateValues, Operator::kPure, // opcode | 
| + "TypedStateValues", // name | 
| + static_cast<int>(types->size()), 0, 0, 1, 0, 0, // counts | 
| + types); // parameter | 
| +} | 
| -const Operator* CommonOperatorBuilder::ObjectState(int pointer_slots, int id) { | 
| +const Operator* CommonOperatorBuilder::ObjectState(int pointer_slots) { | 
| return new (zone()) Operator1<int>( // -- | 
| IrOpcode::kObjectState, Operator::kPure, // opcode | 
| "ObjectState", // name | 
| - pointer_slots, 0, 0, 1, 0, 0, id); // counts | 
| + pointer_slots, 0, 0, 1, 0, 0, // counts | 
| + pointer_slots); // parameter | 
| 
Tobias Tebbi
2016/11/08 13:41:40
Why put pointer_slots in this apparently unused pa
 
Benedikt Meurer
2016/11/08 13:42:43
We need to distinguish the operators for hashing a
 | 
| } | 
| - | 
| -const Operator* CommonOperatorBuilder::TypedStateValues( | 
| +const Operator* CommonOperatorBuilder::TypedObjectState( | 
| const ZoneVector<MachineType>* types) { | 
| return new (zone()) Operator1<const ZoneVector<MachineType>*>( // -- | 
| - IrOpcode::kTypedStateValues, Operator::kPure, // opcode | 
| - "TypedStateValues", // name | 
| - static_cast<int>(types->size()), 0, 0, 1, 0, 0, types); // counts | 
| + IrOpcode::kTypedObjectState, Operator::kPure, // opcode | 
| + "TypedObjectState", // name | 
| + static_cast<int>(types->size()), 0, 0, 1, 0, 0, // counts | 
| + types); // parameter | 
| } | 
| - | 
| const Operator* CommonOperatorBuilder::FrameState( | 
| BailoutId bailout_id, OutputFrameStateCombine state_combine, | 
| const FrameStateFunctionInfo* function_info) { |