Hi, all: I am a newbie to V8. When I use the following test-case to study the EscapeAnalysis pass in V8, I found that: ===========================*test case start*=========================== $ cat examp0.js function f(x) { var o = new Object(); if (x < 30) x = x - 5; else x = 23; o.myprop = x; }
for (var i = 0; i < 1000; ++i) { f(i); } ===========================*test case end* =========================== I add a *HIR dump function* like this: ================================================================= + void HEscapeAnalysisPhase::*dumpCurrentGraph() *{ + HGraph *G = graph(); + const ZoneList<HBasicBlock*>* blocks = G->blocks(); + for (int i = 0; i < blocks->length(); i++) { + HBasicBlock* current = blocks->at(i); + std::cout << "B" << current->block_id() << ":\n"; + for (HInstructionIterator it(current); !it.Done(); it.Advance()) { + HInstruction* instruction = it.Current(); + std::cout << " " << NameOf(instruction) << " " << *instruction << "\n"; + } + } + + return; + } + * void HEscapeAnalysisPhase::Run()* { // TODO(mstarzinger): We disable escape analysis with OSR for now, because // spill slots might be uninitialized. Needs investigation. if (graph()->has_osr()) return; + *dumpCurrentGraph()*; int max_fixpoint_iteration_count = FLAG_escape_analysis_iterations; ... ================================================================= *the results and questions:* 1, V8 calls the HEscapeAnalysisPhase::Run() for 4 times. *question?* When does v8 call this function? 2, dumpCurrentGraph() corrupt in the fourth call, the error messages are: ======================================================= $ d8 --use_escape_analysis --trace_escape_analysis examp0.js 1>code.hir # # Fatal error in .././src/isolate.h, line 497 # Check failed: isolate != __null. # ==== C stack trace =============================== 1: V8_Fatal 2: v8::internal::Isolate::Current() 3: v8::internal::HConstant::PrintDataTo(std::ostream&) const 4: v8::internal::HInstruction::PrintTo(std::ostream&) const 5: v8::internal::operator<<(std::ostream&, v8::internal::HValue const&) 6: v8::internal::HEscapeAnalysisPhase::dumpCurrentGraph() 7: v8::internal::HEscapeAnalysisPhase::Run() 8: void v8::internal::HGraph::Run<v8::internal::HEscapeAnalysisPhase>() 9: v8::internal::HGraph::Optimize(v8::internal::BailoutReason*) 10: v8::internal::OptimizedCompileJob::OptimizeGraph() 11: v8::internal::OptimizingCompilerThread::CompileNext(v8::internal::OptimizedCompileJob*) 12: v8::internal::OptimizingCompilerThread::Run() 13: v8::base::Thread::NotifyStartedAndRun() 14: ?? 15: ?? 16: clone Illegal instruction (core dumped) ======================================================= *question? * wha's the reason? Thanks for your help. Thanks. -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.