Index: src/compiler/simplified-lowering.cc |
diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc |
index de33f9611ee25831b5669c8439f6446de46e4713..fc3b0091b956d473b494325a5a8ceceab387c261 100644 |
--- a/src/compiler/simplified-lowering.cc |
+++ b/src/compiler/simplified-lowering.cc |
@@ -17,6 +17,7 @@ |
#include "src/compiler/representation-change.h" |
#include "src/compiler/simplified-lowering.h" |
#include "src/compiler/simplified-operator.h" |
+#include "src/compiler/source-position.h" |
#include "src/objects.h" |
namespace v8 { |
@@ -65,7 +66,8 @@ class RepresentationSelector { |
}; |
RepresentationSelector(JSGraph* jsgraph, Zone* zone, |
- RepresentationChanger* changer) |
+ RepresentationChanger* changer, |
+ SourcePositionTable* source_positions) |
: jsgraph_(jsgraph), |
count_(jsgraph->graph()->NodeCount()), |
info_(zone->NewArray<NodeInfo>(count_)), |
@@ -73,7 +75,8 @@ class RepresentationSelector { |
replacements_(zone), |
phase_(PROPAGATE), |
changer_(changer), |
- queue_(zone) { |
+ queue_(zone), |
+ source_positions_(source_positions) { |
memset(info_, 0, sizeof(NodeInfo) * count_); |
safe_int_additive_range_ = |
@@ -106,7 +109,13 @@ class RepresentationSelector { |
Node* node = *i; |
TRACE((" visit #%d: %s\n", node->id(), node->op()->mnemonic())); |
// Reuse {VisitNode()} so the representation rules are in one place. |
- VisitNode(node, GetUseInfo(node), lowering); |
+ if (FLAG_turbo_source_positions) { |
+ SourcePositionTable::Scope scope( |
+ source_positions_, source_positions_->GetSourcePosition(node)); |
+ VisitNode(node, GetUseInfo(node), lowering); |
+ } else { |
+ VisitNode(node, GetUseInfo(node), lowering); |
+ } |
} |
// Perform the final replacements. |
@@ -1071,6 +1080,12 @@ class RepresentationSelector { |
Phase phase_; // current phase of algorithm |
RepresentationChanger* changer_; // for inserting representation changes |
ZoneQueue<Node*> queue_; // queue for traversing the graph |
+ // TODO(danno): RepresentationSelector shouldn't know anything about the |
+ // source positions table, but must for now since there currently is no other |
+ // way to pass down source position information to nodes created during |
+ // lowering. Once this phase becomes a vanilla reducer, it should get source |
+ // position information via the SourcePositionWrapper like all other reducers. |
+ SourcePositionTable* source_positions_; |
Type* safe_int_additive_range_; |
NodeInfo* GetInfo(Node* node) { |
@@ -1094,7 +1109,8 @@ Node* SimplifiedLowering::IsTagged(Node* node) { |
void SimplifiedLowering::LowerAllNodes() { |
SimplifiedOperatorBuilder simplified(graph()->zone()); |
RepresentationChanger changer(jsgraph(), &simplified, jsgraph()->isolate()); |
- RepresentationSelector selector(jsgraph(), zone_, &changer); |
+ RepresentationSelector selector(jsgraph(), zone_, &changer, |
+ source_positions_); |
selector.Run(this); |
} |