Lines Matching refs:node
8 #include "src/compiler/node-properties.h"
26 Reduction BranchElimination::Reduce(Node* node) {
27 switch (node->opcode()) {
32 return ReduceDeoptimizeConditional(node);
34 return ReduceMerge(node);
36 return ReduceLoop(node);
38 return ReduceBranch(node);
40 return ReduceIf(node, false);
42 return ReduceIf(node, true);
44 return ReduceStart(node);
46 if (node->op()->ControlOutputCount() > 0) {
47 return ReduceOtherControl(node);
55 Reduction BranchElimination::ReduceBranch(Node* node) {
56 Node* condition = node->InputAt(0);
57 Node* control_input = NodeProperties::GetControlInput(node, 0);
64 for (Node* const use : node->uses()) {
79 return TakeConditionsFromFirstControl(node);
82 Reduction BranchElimination::ReduceDeoptimizeConditional(Node* node) {
83 DCHECK(node->opcode() == IrOpcode::kDeoptimizeIf ||
84 node->opcode() == IrOpcode::kDeoptimizeUnless);
85 bool condition_is_true = node->opcode() == IrOpcode::kDeoptimizeUnless;
86 Node* condition = NodeProperties::GetValueInput(node, 0);
87 Node* frame_state = NodeProperties::GetValueInput(node, 1);
88 Node* effect = NodeProperties::GetEffectInput(node);
89 Node* control = NodeProperties::GetControlInput(node);
95 DCHECK_NULL(node_conditions_.Get(node));
102 // We don't update the conditions here, because we're replacing {node}
103 // with the {control} node that already contains the right information.
104 ReplaceWithValue(node, dead(), effect, control);
115 node, conditions->AddCondition(zone_, condition, condition_is_true));
118 Reduction BranchElimination::ReduceIf(Node* node, bool is_true_branch) {
120 Node* branch = NodeProperties::GetControlInput(node, 0);
126 DCHECK(node_conditions_.Get(node) == nullptr);
129 Node* condition = branch->InputAt(0);
131 node, from_branch->AddCondition(zone_, condition, is_true_branch));
135 Reduction BranchElimination::ReduceLoop(Node* node) {
139 return TakeConditionsFromFirstControl(node);
143 Reduction BranchElimination::ReduceMerge(Node* node) {
146 for (int i = 0; i < node->InputCount(); i++) {
147 if (node_conditions_.Get(node->InputAt(i)) == nullptr) {
148 DCHECK(node_conditions_.Get(node) == nullptr);
153 const ControlPathConditions* first = node_conditions_.Get(node->InputAt(0));
159 for (int i = 1; i < node->InputCount(); i++) {
160 conditions->Merge(*(node_conditions_.Get(node->InputAt(i))));
163 return UpdateConditions(node, conditions);
167 Reduction BranchElimination::ReduceStart(Node* node) {
168 return UpdateConditions(node, ControlPathConditions::Empty(zone_));
173 BranchElimination::PathConditionsForControlNodes::Get(Node* node) {
174 if (static_cast<size_t>(node->id()) < info_for_node_.size()) {
175 return info_for_node_[node->id()];
182 Node* node, const ControlPathConditions* conditions) {
183 size_t index = static_cast<size_t>(node->id());
191 Reduction BranchElimination::ReduceOtherControl(Node* node) {
192 DCHECK_EQ(1, node->op()->ControlInputCount());
193 return TakeConditionsFromFirstControl(node);
197 Reduction BranchElimination::TakeConditionsFromFirstControl(Node* node) {
201 node_conditions_.Get(NodeProperties::GetControlInput(node, 0));
202 return UpdateConditions(node, from_input);
207 Node* node, const ControlPathConditions* conditions) {
208 const ControlPathConditions* original = node_conditions_.Get(node);
209 // Only signal that the node has Changed if the condition information has
213 node_conditions_.Set(node, conditions);
214 return Changed(node);
261 Node* condition,
276 Node* condition) const {