Lines Matching defs:loopInfo
369 auto *loopInfo = GetLoopInfoByLoopBody(osrLoopBodyBB);
370 if (loopInfo == nullptr) {
373 loopHeadOfOSR_ = &(bcBuilder_->GetBasicBlockById(loopInfo->loopHeadId));
383 auto *loopInfo = GetLoopInfoByLoopBody(*loopHeadOfOSR_);
384 if (!loopInfo || !loopInfo->loopExits) {
387 for (auto *exit : *loopInfo->loopExits) {
548 auto& loopInfo = GetLoopInfo(bbNext);
549 headerGates[loopInfo.sortIndx] = merge;
888 auto& loopInfo = GetLoopInfo(bbNext);
889 return loopInfo.loopBodys->TestBit(bb.id);
911 auto& loopInfo = loops_[bb.loopIndex - 1];
912 ASSERT(loopInfo.loopBodys->TestBit(bb.id));
913 return &loopInfo;
919 auto& loopInfo = GetLoopInfo(bb);
920 return loopInfo.loopAssignment;
955 auto& loopInfo = frameBuilder_->loops_[i];
956 PrintLoop(loopInfo);
1054 void CountLoopBody(FrameStateBuilder::LoopInfo& loopInfo, size_t bbId)
1056 if (bbId != loopInfo.loopHeadId && !loopInfo.loopBodys->TestBit(bbId)) {
1057 loopInfo.loopBodys->SetBit(bbId);
1061 loopInfo.loopAssignment->Union(liveout->defRegisters_);
1065 void PropagateLoopBody(FrameStateBuilder::LoopInfo& loopInfo)
1072 CountLoopBody(loopInfo, pred->id);
1075 CountLoopBody(loopInfo, pred->id);
1080 void InitLoopInfo(FrameStateBuilder::LoopInfo& loopInfo, BytecodeRegion& loopHeader, size_t backId)
1082 if (loopInfo.loopHeadId == 0) {
1084 loopInfo.loopHeadId = loopHeader.id;
1085 loopInfo.loopIndex = loopHeader.loopNumber;
1086 loopInfo.loopBodys = chunk_->New<BitSet>(chunk_, size);
1087 loopInfo.loopAssignment = chunk_->New<BitSet>(chunk_, frameBuilder_->numVregs_);
1088 loopHeader.loopIndex = loopInfo.loopIndex;
1089 loopInfo.loopBodys->SetBit(loopInfo.loopHeadId);
1090 auto liveout = frameBuilder_->GetOrOCreateBBLiveOut(loopInfo.loopHeadId);
1091 loopInfo.loopAssignment->Union(liveout->defRegisters_);
1092 loopInfo.numLoopBacks = 1;
1093 loopInfo.loopBodys->SetBit(backId);
1095 if (!loopInfo.loopBodys->TestBit(backId)) {
1096 loopInfo.loopBodys->SetBit(backId);
1098 loopInfo.numLoopBacks++;
1107 auto& loopInfo = frameBuilder_->GetLoopInfo(toBlock);
1108 InitLoopInfo(loopInfo, toBlock, info.fromId);
1114 auto& loopInfo = frameBuilder_->GetLoopInfo(toBlock);
1115 CountLoopBody(loopInfo, info.fromId);
1116 PropagateLoopBody(loopInfo);
1128 void InsertEmptyBytecodeRegion(FrameStateBuilder::LoopInfo& loopInfo,
1144 if (!loopInfo.loopBodys->TestBit(bbPred->id)) {
1168 auto& loopInfo = frameBuilder_->loops_[i];
1169 auto& loopHeader = bcBuilder_->GetBasicBlockById(loopInfo.loopHeadId);
1170 ASSERT(loopHeader.numOfStatePreds > loopInfo.numLoopBacks);
1171 size_t numOfEntries = static_cast<size_t>(loopHeader.numOfStatePreds - loopInfo.numLoopBacks);
1173 InsertEmptyBytecodeRegion(loopInfo, loopHeader, numOfEntries);
1176 loopInfo.loopBodys->Reset();
1177 loopInfo.loopBodys->SetBit(loopInfo.loopHeadId);
1186 auto& loopInfo = frameBuilder_->GetLoopInfo(toBlock);
1187 if (loopInfo.loopBodys->ShouldExpand(size)) {
1188 auto tmp = loopInfo.loopBodys;
1189 loopInfo.loopBodys = chunk_->New<BitSet>(chunk_, size);
1190 loopInfo.loopBodys->CopyDataFrom(*tmp);
1195 FrameStateBuilder::LoopInfo* EnterInnerLoop(FrameStateBuilder::LoopInfo* loopInfo, size_t bbId)
1201 innerInfo.parentInfo = loopInfo;
1203 loopInfo = &innerInfo;
1204 } else if (loopInfo != nullptr) {
1205 bb.loopIndex = loopInfo->loopIndex;
1207 return loopInfo;
1212 FrameStateBuilder::LoopInfo* loopInfo = nullptr;
1225 if (loopInfo == nullptr) {
1228 ASSERT(loopInfo->loopHeadId == curState.bbId);
1229 loopInfo = loopInfo->parentInfo;
1238 if (loopInfo != nullptr && !loopInfo->loopBodys->TestBit(bbNext->id)) {
1239 AddLoopExit(bbNext, loopInfo);
1242 loopInfo = EnterInnerLoop(loopInfo, bbNext->id);
1278 void AddLoopExit(BytecodeRegion *bb, FrameStateBuilder::LoopInfo *loopInfo)
1280 if (loopInfo->loopExits == nullptr) {
1281 loopInfo->loopExits = chunk_->New<ChunkVector<BytecodeRegion*>>(chunk_);
1283 loopInfo->loopExits->emplace_back(bb);
1286 void PrintLoop(FrameStateBuilder::LoopInfo& loopInfo)
1290 LOG_COMPILER(INFO) << "LoopHead: " << loopInfo.loopHeadId;
1291 if (loopInfo.parentInfo != nullptr) {
1292 LOG_COMPILER(INFO) << "ParentLoopHead: " << loopInfo.parentInfo->loopHeadId;
1296 if (loopInfo.loopBodys->TestBit(i)) {
1302 if (loopInfo.loopExits != nullptr) {
1303 for (auto bb : *loopInfo.loopExits) {
1311 if (loopInfo.loopAssignment->TestBit(i)) {