__ stop("trap_on_deopt", condition);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to handle condition, build frame, or
// restore caller doubles.
__ Bind(&dont_trap);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to build frame, or restore caller doubles.
if (branch_type == always &&
struct DeoptInfo {
DeoptInfo(SourcePosition position, const char* m, DeoptReason d)
- : position(position), mnemonic(m), deopt_reason(d) {}
+ : position(position), mnemonic(m), deopt_reason(d), inlining_id(0) {}
SourcePosition position;
const char* mnemonic;
DeoptReason deopt_reason;
+ int inlining_id;
};
static DeoptInfo GetDeoptInfo(Code* code, byte* from);
FunctionLiteral* function() const { return function_; }
InliningKind inlining_kind() const { return inlining_kind_; }
BailoutId ReturnId() const { return return_id_; }
+ int inlining_id() const { return inlining_id_; }
+ void set_inlining_id(int inlining_id) { inlining_id_ = inlining_id; }
Representation RequiredInputRepresentation(int index) OVERRIDE {
return Representation::None();
arguments_pushed_(false),
function_(function),
inlining_kind_(inlining_kind),
+ inlining_id_(0),
arguments_var_(arguments_var),
arguments_object_(arguments_object),
return_targets_(2, zone) {}
bool arguments_pushed_;
FunctionLiteral* function_;
InliningKind inlining_kind_;
+ int inlining_id_;
Variable* arguments_var_;
HArgumentsObject* arguments_object_;
ZoneList<HBasicBlock*> return_targets_;
Add<HEnterInlined>(return_id, target, context, arguments_count, function,
function_state()->inlining_kind(),
function->scope()->arguments(), arguments_object);
+ if (top_info()->is_tracking_positions()) {
+ enter_inlined->set_inlining_id(inlining_id);
+ }
function_state()->set_entry(enter_inlined);
VisitDeclarations(target_info.scope()->declarations());
__ bind(&done);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
if (cc == no_condition && frame_is_built_) {
DeoptComment(deopt_info);
chunk_->AddStabilityDependency(map);
}
+
+Deoptimizer::DeoptInfo LCodeGenBase::MakeDeoptInfo(
+ LInstruction* instr, Deoptimizer::DeoptReason deopt_reason) {
+ Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
+ instr->Mnemonic(), deopt_reason);
+ HEnterInlined* enter_inlined = instr->environment()->entry();
+ deopt_info.inlining_id = enter_inlined ? enter_inlined->inlining_id() : 0;
+ return deopt_info;
+}
} } // namespace v8::internal
void FPRINTF_CHECKING Comment(const char* format, ...);
void DeoptComment(const Deoptimizer::DeoptInfo& deopt_info);
+ static Deoptimizer::DeoptInfo MakeDeoptInfo(
+ LInstruction* instr, Deoptimizer::DeoptReason deopt_reason);
bool GenerateBody();
virtual void GenerateBodyInstructionPre(LInstruction* instr) {}
__ bind(&skip);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to handle condition, build frame, or
// restore caller doubles.
__ bind(&skip);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to handle condition, build frame, or
// restore caller doubles.
__ stop("trap_on_deopt", cond, kDefaultStopCode, cr);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to handle condition, build frame, or
// restore caller doubles.
__ bind(&done);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
// Go through jump table if we need to handle condition, build frame, or
// restore caller doubles.
__ bind(&done);
}
- Deoptimizer::DeoptInfo deopt_info(instr->hydrogen_value()->position(),
- instr->Mnemonic(), deopt_reason);
+ Deoptimizer::DeoptInfo deopt_info = MakeDeoptInfo(instr, deopt_reason);
+
DCHECK(info()->IsStub() || frame_is_built_);
if (cc == no_condition && frame_is_built_) {
DeoptComment(deopt_info);