| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 2ce177a71495555b5cab843b3023284123174e07..431242fe15c30252372ceef34ff960dffa405db3 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -8896,10 +8896,14 @@ void HOptimizedGraphBuilder::VisitLogicalExpression(BinaryOperation* expr) {
|
| void HOptimizedGraphBuilder::VisitArithmeticExpression(BinaryOperation* expr) {
|
| CHECK_ALIVE(VisitForValue(expr->left()));
|
| CHECK_ALIVE(VisitForValue(expr->right()));
|
| - if (!FLAG_emit_opt_code_positions) SetSourcePosition(expr->position());
|
| + SetSourcePosition(expr->position());
|
| HValue* right = Pop();
|
| HValue* left = Pop();
|
| HInstruction* instr = BuildBinaryOperation(expr, left, right);
|
| + if (FLAG_emit_opt_code_positions && instr->IsBinaryOperation()) {
|
| + HBinaryOperation::cast(instr)->SetOperandPositions(
|
| + zone(), expr->left()->position(), expr->right()->position());
|
| + }
|
| return ast_context()->ReturnInstruction(instr, expr->id());
|
| }
|
|
|
| @@ -8908,7 +8912,7 @@ void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr,
|
| Expression* sub_expr,
|
| Handle<String> check) {
|
| CHECK_ALIVE(VisitForTypeOf(sub_expr));
|
| - if (!FLAG_emit_opt_code_positions) SetSourcePosition(expr->position());
|
| + SetSourcePosition(expr->position());
|
| HValue* value = Pop();
|
| HTypeofIsAndBranch* instr = New<HTypeofIsAndBranch>(value, check);
|
| return ast_context()->ReturnControl(instr, expr->id());
|
| @@ -8970,6 +8974,8 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| CHECK_ALIVE(VisitForValue(expr->left()));
|
| CHECK_ALIVE(VisitForValue(expr->right()));
|
|
|
| + if (FLAG_emit_opt_code_positions) SetSourcePosition(expr->position());
|
| +
|
| HValue* right = Pop();
|
| HValue* left = Pop();
|
| Token::Value op = expr->op();
|
| @@ -9048,6 +9054,10 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| AddCheckMap(right, map);
|
| HCompareObjectEqAndBranch* result =
|
| New<HCompareObjectEqAndBranch>(left, right);
|
| + if (FLAG_emit_opt_code_positions) {
|
| + result->set_operand_position(zone(), 0, expr->left()->position());
|
| + result->set_operand_position(zone(), 1, expr->right()->position());
|
| + }
|
| return ast_context()->ReturnControl(result, expr->id());
|
| } else {
|
| BuildCheckHeapObject(left);
|
| @@ -9089,6 +9099,11 @@ void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
|
| HCompareNumericAndBranch* result =
|
| New<HCompareNumericAndBranch>(left, right, op);
|
| result->set_observed_input_representation(left_rep, right_rep);
|
| + if (FLAG_emit_opt_code_positions) {
|
| + result->SetOperandPositions(zone(),
|
| + expr->left()->position(),
|
| + expr->right()->position());
|
| + }
|
| return ast_context()->ReturnControl(result, expr->id());
|
| }
|
| }
|
| @@ -10405,7 +10420,8 @@ void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) {
|
| Tag HIR_tag(this, "HIR");
|
| for (HInstructionIterator it(current); !it.Done(); it.Advance()) {
|
| HInstruction* instruction = it.Current();
|
| - int bci = 0;
|
| + int bci = FLAG_emit_opt_code_positions && instruction->has_position() ?
|
| + instruction->position() : 0;
|
| int uses = instruction->UseCount();
|
| PrintIndent();
|
| trace_.Add("%d %d ", bci, uses);
|
| @@ -10430,6 +10446,9 @@ void HTracer::Trace(const char* name, HGraph* graph, LChunk* chunk) {
|
| trace_.Add("%d ",
|
| LifetimePosition::FromInstructionIndex(i).Value());
|
| linstr->PrintTo(&trace_);
|
| + trace_.Add(" [hir:");
|
| + linstr->hydrogen_value()->PrintNameTo(&trace_);
|
| + trace_.Add("]");
|
| trace_.Add(" <|@\n");
|
| }
|
| }
|
|
|