5 #include "src/compiler/js-heap-copy-reducer.h" 7 #include "src/compiler/common-operator.h" 8 #include "src/compiler/js-heap-broker.h" 9 #include "src/compiler/js-operator.h" 10 #include "src/compiler/node-properties.h" 11 #include "src/compiler/simplified-operator.h" 12 #include "src/heap/factory-inl.h" 13 #include "src/objects/map.h" 14 #include "src/objects/scope-info.h" 23 JSHeapCopyReducer::JSHeapCopyReducer(JSHeapBroker* broker) : broker_(broker) {}
25 JSHeapBroker* JSHeapCopyReducer::broker() {
return broker_; }
27 Reduction JSHeapCopyReducer::Reduce(Node* node) {
28 switch (node->opcode()) {
29 case IrOpcode::kHeapConstant: {
30 ObjectRef object(broker(), HeapConstantOf(node->op()));
31 if (
object.IsJSFunction())
object.AsJSFunction().Serialize();
32 if (
object.IsJSObject())
object.AsJSObject().SerializeObjectCreateMap();
33 if (
object.IsModule())
object.AsModule().Serialize();
34 if (
object.IsContext())
object.AsContext().Serialize();
37 case IrOpcode::kJSCreateArray: {
38 CreateArrayParameters
const& p = CreateArrayParametersOf(node->op());
39 Handle<AllocationSite> site;
40 if (p.site().ToHandle(&site)) AllocationSiteRef(broker(), site);
43 case IrOpcode::kJSCreateArguments: {
44 Node*
const frame_state = NodeProperties::GetFrameStateInput(node);
45 FrameStateInfo state_info = FrameStateInfoOf(frame_state->op());
46 SharedFunctionInfoRef shared(broker(),
47 state_info.shared_info().ToHandleChecked());
50 case IrOpcode::kJSCreateBlockContext: {
51 ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
54 case IrOpcode::kJSCreateBoundFunction: {
55 CreateBoundFunctionParameters
const& p =
56 CreateBoundFunctionParametersOf(node->op());
57 MapRef(broker(), p.map());
60 case IrOpcode::kJSCreateCatchContext: {
61 ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
64 case IrOpcode::kJSCreateClosure: {
65 CreateClosureParameters
const& p = CreateClosureParametersOf(node->op());
66 SharedFunctionInfoRef(broker(), p.shared_info());
67 HeapObjectRef(broker(), p.feedback_cell());
68 HeapObjectRef(broker(), p.code());
71 case IrOpcode::kJSCreateEmptyLiteralArray: {
72 FeedbackParameter
const& p = FeedbackParameterOf(node->op());
73 FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
76 case IrOpcode::kJSCreateFunctionContext: {
77 CreateFunctionContextParameters
const& p =
78 CreateFunctionContextParametersOf(node->op());
79 ScopeInfoRef(broker(), p.scope_info());
82 case IrOpcode::kJSCreateLiteralArray:
83 case IrOpcode::kJSCreateLiteralObject: {
84 CreateLiteralParameters
const& p = CreateLiteralParametersOf(node->op());
85 FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
88 case IrOpcode::kJSCreateLiteralRegExp: {
89 CreateLiteralParameters
const& p = CreateLiteralParametersOf(node->op());
90 FeedbackVectorRef(broker(), p.feedback().vector()).SerializeSlots();
93 case IrOpcode::kJSCreateWithContext: {
94 ScopeInfoRef(broker(), ScopeInfoOf(node->op()));
97 case IrOpcode::kJSLoadNamed:
98 case IrOpcode::kJSStoreNamed: {
99 NamedAccess
const& p = NamedAccessOf(node->op());
100 NameRef(broker(), p.name());
103 case IrOpcode::kStoreField:
104 case IrOpcode::kLoadField: {
105 FieldAccess access = FieldAccessOf(node->op());
106 Handle<Map> map_handle;
107 if (access.map.ToHandle(&map_handle)) {
108 MapRef(broker(), map_handle);
110 Handle<Name> name_handle;
111 if (access.name.ToHandle(&name_handle)) {
112 NameRef(broker(), name_handle);
116 case IrOpcode::kMapGuard: {
117 ZoneHandleSet<Map>
const maps = MapGuardMapsOf(node->op()).maps();
118 for (Handle<Map> map : maps) {
119 MapRef(broker(), map);
123 case IrOpcode::kCheckMaps: {
124 ZoneHandleSet<Map>
const maps = CheckMapsParametersOf(node->op()).maps();
125 for (Handle<Map> map : maps) {
126 MapRef(broker(), map);
130 case IrOpcode::kCompareMaps: {
131 ZoneHandleSet<Map>
const maps =
132 CompareMapsParametersOf(node->op()).maps();
133 for (Handle<Map> map : maps) {
134 MapRef(broker(), map);