Lines Matching refs:node
8 #include "src/compiler/node-properties.h"
16 bool IsMachineLoad(Node* const node) {
17 const IrOpcode::Value opcode = node->opcode();
23 bool IsTaggedMachineLoad(Node* const node) {
24 return IsMachineLoad(node) &&
25 CanBeTaggedPointer(LoadRepresentationOf(node->op()).representation());
28 bool IsHeapConstant(Node* const node) {
29 return node->opcode() == IrOpcode::kHeapConstant;
32 bool IsTaggedPhi(Node* const node) {
33 if (node->opcode() == IrOpcode::kPhi) {
34 return CanBeTaggedPointer(PhiRepresentationOf(node->op()));
39 bool CanBeCompressed(Node* const node) {
40 return IsHeapConstant(node) || IsTaggedMachineLoad(node) || IsTaggedPhi(node);
58 Node* const node = to_visit_.front();
60 MarkNodeInputs(node);
64 void DecompressionOptimizer::MarkNodeInputs(Node* node) {
66 switch (node->opcode()) {
71 DCHECK_EQ(node->op()->ValueInputCount(), 1);
72 MaybeMarkAndQueueForRevisit(node->InputAt(0),
73 states_.Get(node)); // value
76 DCHECK_EQ(node->op()->ValueInputCount(), 1);
77 MaybeMarkAndQueueForRevisit(node->InputAt(0),
88 DCHECK_EQ(node->op()->ValueInputCount(), 2);
89 MaybeMarkAndQueueForRevisit(node->InputAt(0),
91 MaybeMarkAndQueueForRevisit(node->InputAt(1),
99 DCHECK_EQ(node->op()->ValueInputCount(), 3);
100 MaybeMarkAndQueueForRevisit(node->InputAt(0),
102 MaybeMarkAndQueueForRevisit(node->InputAt(1),
108 node->opcode() == IrOpcode::kUnalignedStore
109 ? UnalignedStoreRepresentationOf(node->op())
110 : StoreRepresentationOf(node->op()).representation();
111 MaybeMarkAndQueueForRevisit(node->InputAt(2),
124 for (int i = 0; i < node->op()->ValueInputCount(); ++i) {
125 MaybeMarkAndQueueForRevisit(node->InputAt(i),
131 State curr_state = states_.Get(node);
132 for (int i = 0; i < node->op()->ValueInputCount(); ++i) {
133 MaybeMarkAndQueueForRevisit(node->InputAt(i), curr_state);
140 for (int i = 0; i < node->op()->ValueInputCount(); ++i) {
141 MaybeMarkAndQueueForRevisit(node->InputAt(i),
150 for (int i = node->op()->ValueInputCount(); i < node->InputCount(); ++i) {
151 MaybeMarkAndQueueForRevisit(node->InputAt(i), State::kOnly32BitsObserved);
155 void DecompressionOptimizer::MaybeMarkAndQueueForRevisit(Node* const node,
158 State previous_state = states_.Get(node);
163 states_.Set(node, state);
164 to_visit_.push_back(node);
166 if (state == State::kOnly32BitsObserved && CanBeCompressed(node)) {
167 compressed_candidate_nodes_.push_back(node);
172 void DecompressionOptimizer::ChangeHeapConstant(Node* const node) {
173 DCHECK(IsHeapConstant(node));
175 node, common()->CompressedHeapConstant(HeapConstantOf(node->op())));
178 void DecompressionOptimizer::ChangePhi(Node* const node) {
179 DCHECK(IsTaggedPhi(node));
181 MachineRepresentation mach_rep = PhiRepresentationOf(node->op());
190 node, common()->Phi(mach_rep, node->op()->ValueInputCount()));
193 void DecompressionOptimizer::ChangeLoad(Node* const node) {
194 DCHECK(IsMachineLoad(node));
196 LoadRepresentation load_rep = LoadRepresentationOf(node->op());
206 switch (node->opcode()) {
208 NodeProperties::ChangeOp(node, machine()->Load(compressed_load_rep));
211 NodeProperties::ChangeOp(node,
215 NodeProperties::ChangeOp(node,
219 NodeProperties::ChangeOp(node,
228 for (Node* const node : compressed_candidate_nodes_) {
234 if (IsEverythingObserved(node)) continue;
236 switch (node->opcode()) {
238 ChangeHeapConstant(node);
241 ChangePhi(node);
244 ChangeLoad(node);