Lines Matching refs:Node
8 #include "src/compiler/node-marker.h"
9 #include "src/compiler/node-properties.h"
10 #include "src/compiler/node.h"
105 // Maps a node to its index in the {pairs} vector.
113 Node* map(Node* node) {
114 if (node_map.Get(node) == 0) return node;
115 return pairs->at(node_map.Get(node));
118 void Insert(Node* original, Node* copy) {
124 void CopyNodes(Graph* graph, Zone* tmp_zone, Node* dead, NodeRange nodes) {
127 for (Node* node : nodes) {
129 for (Node* input : node->inputs()) {
132 Node* copy = graph->NewNode(node->op(), node->InputCount(), &inputs[0]);
133 if (NodeProperties::IsTyped(node)) {
134 NodeProperties::SetType(copy, NodeProperties::GetType(node));
136 Insert(node, copy);
140 for (Node* original : nodes) {
141 Node* copy = pairs->at(node_map.Get(original));
148 bool Marked(Node* node) { return node_map.Get(node) > 0; }
159 Node* PeeledIteration::map(Node* node) {
164 if (impl->node_pairs_[i] == node) return impl->node_pairs_[i + 1];
166 return node;
172 Node* loop_node = loop_tree->GetLoopControl(loop);
173 for (Node* node : loop_tree->LoopNodes(loop)) {
174 for (Node* use : node->uses()) {
177 switch (node->opcode()) {
179 unmarked_exit = (node->InputAt(1) != loop_node);
183 unmarked_exit = (node->InputAt(1)->InputAt(1) != loop_node);
190 Node* loop_node = loop_tree->GetLoopControl(loop);
192 "Cannot peel loop %i. Loop exit without explicit mark: Node %i "
195 loop_node->id(), node->id(), node->op()->mnemonic(), use->id(),
219 Node* dead = graph->NewNode(common->Dead());
222 for (Node* node : loop_tree->HeaderNodes(loop)) {
223 peeling.Insert(node, node->InputAt(kAssumedLoopEntryIndex));
232 Node* loop_node = loop_tree->GetLoopControl(loop);
233 Node* new_entry;
242 Node* merge =
246 for (Node* node : loop_tree->HeaderNodes(loop)) {
247 if (node->opcode() == IrOpcode::kLoop) continue; // already done.
250 inputs.push_back(peeling.map(node->InputAt(1 + i)));
252 for (Node* input : inputs) {
255 const Operator* op = common->ResizeMergeOrPhi(node->op(), backedges);
256 Node* phi = graph->NewNode(op, backedges + 1, &inputs[0]);
257 node->ReplaceInput(0, phi);
266 for (Node* node : loop_tree->HeaderNodes(loop)) {
267 node->ReplaceInput(0, peeling.map(node->InputAt(1)));
276 for (Node* exit : loop_tree->ExitNodes(loop)) {
279 // Change the loop exit node to a merge node.
317 for (Node* node : loop_tree->HeaderNodes(loop)) {
318 PrintF("%i ", node->id());
326 void EliminateLoopExit(Node* node) {
327 DCHECK_EQ(IrOpcode::kLoopExit, node->opcode());
330 for (Edge edge : node->use_edges()) {
332 Node* marker = edge.from();
343 NodeProperties::ReplaceUses(node, nullptr, nullptr,
344 NodeProperties::GetControlInput(node, 0));
345 node->Kill();
363 ZoneQueue<Node*> queue(temp_zone);
367 Node* node = queue.front();
370 if (node->opcode() == IrOpcode::kLoopExit) {
371 Node* control = NodeProperties::GetControlInput(node);
372 EliminateLoopExit(node);
378 for (int i = 0; i < node->op()->ControlInputCount(); i++) {
379 Node* control = NodeProperties::GetControlInput(node, i);