Lines Matching refs:bb
218 auto &bb = RegionAt(i); in BuildCatchBlocks() local
219 auto startIndex = bb.start; in BuildCatchBlocks()
231 bb.catches.insert(bb.catches.cbegin(), &catchBB); in BuildCatchBlocks()
232 bb.succs.emplace_back(&catchBB); in BuildCatchBlocks()
233 catchBB.preds.emplace_back(&bb); in BuildCatchBlocks()
240 bb.SortCatches(); in BuildCatchBlocks()
247 auto &bb = RegionAt(i); in CollectTryPredsInfo() local
248 if (bb.catches.empty()) { in CollectTryPredsInfo()
250 } else if (bb.catches.size() > 1) { // 1: cache size in CollectTryPredsInfo()
251 for (auto it = bb.catches.begin() + 1; it != bb.catches.end();) { // 1: invalid catch bb in CollectTryPredsInfo()
252 bb.EraseThisBlock((*it)->trys); in CollectTryPredsInfo()
253 it = bb.catches.erase(it); in CollectTryPredsInfo()
257 EnumerateBlock(bb, [&bb](const BytecodeInfo &bytecodeInfo) -> bool { in CollectTryPredsInfo()
261 ASSERT(bb.catches.size() == 1); // 1: cache size in CollectTryPredsInfo()
263 bb.catches.at(0)->numOfStatePreds++; in CollectTryPredsInfo()
271 void BytecodeCircuitBuilder::RemoveUnusedPredsInfo(BytecodeRegion& bb) in RemoveUnusedPredsInfo() argument
273 EnumerateBlock(bb, [&bb](const BytecodeInfo &bytecodeInfo) -> bool { in RemoveUnusedPredsInfo()
275 ASSERT(bb.catches.size() == 1); // 1: cache size in RemoveUnusedPredsInfo()
277 bb.catches.at(0)->numOfStatePreds--; in RemoveUnusedPredsInfo()
286 auto bb = pendingList.back(); in ClearUnreachableRegion() local
288 for (auto it = bb->preds.begin(); it != bb->preds.end(); it++) { in ClearUnreachableRegion()
290 bb->EraseThisBlock((*it)->succs); in ClearUnreachableRegion()
293 for (auto it = bb->succs.begin(); it != bb->succs.end(); it++) { in ClearUnreachableRegion()
296 bb->EraseThisBlock(bbNext->preds); in ClearUnreachableRegion()
303 for (auto it = bb->trys.begin(); it != bb->trys.end(); it++) { in ClearUnreachableRegion()
305 bb->EraseThisBlock((*it)->catches); in ClearUnreachableRegion()
308 for (auto it = bb->catches.begin(); it != bb->catches.end(); it++) { in ClearUnreachableRegion()
311 RemoveUnusedPredsInfo(*bb); in ClearUnreachableRegion()
312 bb->EraseThisBlock(bbNext->trys); in ClearUnreachableRegion()
318 bb->preds.clear(); in ClearUnreachableRegion()
319 bb->succs.clear(); in ClearUnreachableRegion()
320 bb->trys.clear(); in ClearUnreachableRegion()
321 bb->catches.clear(); in ClearUnreachableRegion()
330 auto &bb = RegionAt(i); in RemoveUnreachableRegion() local
331 if (bb.numOfStatePreds == 0) { in RemoveUnreachableRegion()
332 pendingList.emplace_back(&bb); in RemoveUnreachableRegion()
344 auto &bb = RegionAt(i); in UpdateCFG() local
345 bb.preds.clear(); in UpdateCFG()
346 bb.trys.clear(); in UpdateCFG()
348 for (const auto &succ: bb.succs) { in UpdateCFG()
349 if (std::count(bb.catches.cbegin(), bb.catches.cend(), succ)) { in UpdateCFG()
354 bb.succs.clear(); in UpdateCFG()
355 bb.succs.insert(bb.succs.end(), newSuccs.begin(), newSuccs.end()); in UpdateCFG()
358 auto &bb = RegionAt(i); in UpdateCFG() local
359 for (auto &succ: bb.succs) { in UpdateCFG()
360 succ->preds.emplace_back(&bb); in UpdateCFG()
363 for (auto &catchBlock: bb.catches) { in UpdateCFG()
364 catchBlock->trys.emplace_back(&bb); in UpdateCFG()
513 void BytecodeCircuitBuilder::MergeThrowGate(BytecodeRegion &bb, uint32_t bcIndex) in MergeThrowGate() argument
517 if (!bb.catches.empty()) { in MergeThrowGate()
521 ASSERT(bb.catches.size() == 1); // 1: one catch in MergeThrowGate()
522 auto bbNext = bb.catches.at(0); in MergeThrowGate()
523 frameStateBuilder_.MergeIntoSuccessor(bb, *bbNext); in MergeThrowGate()
524 bbNext->expandedPreds.push_back({bb.id, bcIndex, true}); in MergeThrowGate()
534 void BytecodeCircuitBuilder::MergeExceptionGete(BytecodeRegion &bb, in MergeExceptionGete() argument
540 ASSERT(bb.catches.size() == 1); // 1: one catch in MergeExceptionGete()
541 auto bbNext = bb.catches.at(0); in MergeExceptionGete()
544 frameStateBuilder_.MergeIntoSuccessor(bb, *bbNext); in MergeExceptionGete()
546 bbNext->expandedPreds.push_back({bb.id, bcIndex + 1, true}); // 1: next pc in MergeExceptionGete()
548 bbNext->expandedPreds.push_back({bb.id, bcIndex, true}); in MergeExceptionGete()
553 void BytecodeCircuitBuilder::NewJSGate(BytecodeRegion &bb) in NewJSGate() argument
555 auto &iterator = bb.GetBytecodeIterator(); in NewJSGate()
582 MergeThrowGate(bb, iterator.Index()); in NewJSGate()
586 if (!bb.catches.empty() && !bytecodeInfo.NoThrow()) { in NewJSGate()
587 MergeExceptionGete(bb, bytecodeInfo, iterator.Index()); in NewJSGate()
594 void BytecodeCircuitBuilder::NewJump(BytecodeRegion &bb) in NewJump() argument
596 auto &iterator = bb.GetBytecodeIterator(); in NewJump()
601 if (bytecodeInfo.IsCondJump() && bb.succs.size() == 2) { // 2: two succ in NewJump()
617 for (auto &bbNext: bb.succs) { in NewJump()
620 frameStateBuilder_.MergeIntoSuccessor(bb, *bbNext); in NewJump()
621 bbNext->expandedPreds.push_back({bb.id, iterator.Index(), false}); in NewJump()
624 frameStateBuilder_.MergeIntoSuccessor(bb, *bbNext); in NewJump()
625 bbNext->expandedPreds.push_back({bb.id, iterator.Index(), false}); in NewJump()
631 ASSERT(bb.succs.size() == 1); in NewJump()
632 auto &bbNext = bb.succs.at(0); in NewJump()
633 frameStateBuilder_.MergeIntoSuccessor(bb, *bbNext); in NewJump()
634 bbNext->expandedPreds.push_back({bb.id, iterator.Index(), false}); in NewJump()
638 GateRef BytecodeCircuitBuilder::NewReturn(BytecodeRegion &bb) in NewReturn() argument
640 ASSERT(bb.succs.empty()); in NewReturn()
641 auto &iterator = bb.GetBytecodeIterator(); in NewReturn()
665 void BytecodeCircuitBuilder::NewByteCode(BytecodeRegion &bb) in NewByteCode() argument
667 auto &iterator = bb.GetBytecodeIterator(); in NewByteCode()
674 liveout = frameStateBuilder_.GetOrOCreateBBLiveOut(bb.id); in NewByteCode()
685 NewJSGate(bb); in NewByteCode()
688 NewJump(bb); in NewByteCode()
691 gate = NewReturn(bb); in NewByteCode()
709 auto &bb = RegionAt(bbId); in BuildSubCircuit() local
710 frameStateBuilder_.AdvanceToNextBB(bb); in BuildSubCircuit()
711 if (IsEntryBlock(bb.id)) { in BuildSubCircuit()
716 bb.dependCache = stackCheck; in BuildSubCircuit()
719 auto &bbNext = RegionAt(bb.id + 1); in BuildSubCircuit()
720 frameStateBuilder_.MergeIntoSuccessor(bb, bbNext); in BuildSubCircuit()
721 bbNext.expandedPreds.push_back({bb.id, bb.end, false}); in BuildSubCircuit()
724 if (!bb.trys.empty()) { in BuildSubCircuit()
732 EnumerateBlock(bb, [this, &bb] in BuildSubCircuit()
734 NewByteCode(bb); in BuildSubCircuit()
741 if (!bb.IsEmptryBlock()) { in BuildSubCircuit()
742 const BytecodeInfo& bytecodeInfo = GetBytecodeInfo(bb.end); in BuildSubCircuit()
747 ASSERT(bb.succs.size() == 1); // 1: fall through in BuildSubCircuit()
748 auto &bbNext = RegionAt(bb.succs[0]->id); in BuildSubCircuit()
749 frameStateBuilder_.MergeIntoSuccessor(bb, bbNext); in BuildSubCircuit()
750 bbNext.expandedPreds.push_back({bb.id, bb.end, false}); in BuildSubCircuit()
777 BytecodeRegion& bb = RegionAt(i); in PrintGraph() local
778 if (!IsEntryBlock(bb.id) && bb.numOfStatePreds == 0) { in PrintGraph()
779 … LOG_COMPILER(INFO) << "B" << bb.id << ": ;preds= invalid BB"; in PrintGraph()
780 LOG_COMPILER(INFO) << "\tBytecodePC: [" << std::to_string(bb.start) << ", " in PrintGraph()
781 << std::to_string(bb.end) << ")"; in PrintGraph()
784 std::string log("B" + std::to_string(bb.id) + ": ;preds= "); in PrintGraph()
785 for (size_t k = 0; k < bb.preds.size(); ++k) { in PrintGraph()
786 log += std::to_string(bb.preds[k]->id) + ", "; in PrintGraph()
789 if (IsEntryBlock(bb.id)) { in PrintGraph()
792 LOG_COMPILER(INFO) << "\tBytecodePC: [" << std::to_string(bb.start) << ", " in PrintGraph()
793 << std::to_string(bb.end) << ")"; in PrintGraph()
797 for (size_t j = 0; j < bb.succs.size(); j++) { in PrintGraph()
798 log1 += std::to_string(bb.succs[j]->id) + ", "; in PrintGraph()
802 for (size_t j = 0; j < bb.catches.size(); j++) { in PrintGraph()
803 LOG_COMPILER(INFO) << "\tcatch [: " << std::to_string(bb.catches[j]->start) << ", " in PrintGraph()
804 << std::to_string(bb.catches[j]->end) << ")"; in PrintGraph()
808 for (auto tryBlock: bb.trys) { in PrintGraph()
813 PrintBytecodeInfo(bb); in PrintGraph()
818 void BytecodeCircuitBuilder::PrintBytecodeInfo(BytecodeRegion& bb) in PrintBytecodeInfo() argument
820 if (IsEntryBlock(bb.id)) { in PrintBytecodeInfo()
825 EnumerateBlock(bb, [&](const BytecodeInfo &bytecodeInfo) -> bool { in PrintBytecodeInfo()
826 auto &iterator = bb.GetBytecodeIterator(); in PrintBytecodeInfo()