| 4321 | } |
| 4322 | |
| 4323 | BeVTrackingList* BeMCContext::MergeLiveRegs(BeVTrackingList* prevDestEntry, BeVTrackingList* mergeFrom) |
| 4324 | { |
| 4325 | int vregIdx = -1; |
| 4326 | |
| 4327 | SizedArray<int, 16> newNodes; |
| 4328 | SizedArray<int, 16> prevExclusiveNodes; |
| 4329 | |
| 4330 | // Take nodes that were exclusive to the new set and add edges to nodes that were exclusive the old set |
| 4331 | /*while (true) |
| 4332 | { |
| 4333 | vregIdx = mLivenessContext.GetNextDiffSetIdx(prevDestEntry.mBits, mergeFrom, vregIdx); |
| 4334 | if (vregIdx == -1) |
| 4335 | break; |
| 4336 | |
| 4337 | newNodes.push_back(vregIdx); |
| 4338 | |
| 4339 | if (!mColorizer.mNodes.empty()) |
| 4340 | { |
| 4341 | int checkReg = -1; |
| 4342 | while (true) |
| 4343 | { |
| 4344 | checkReg = mLivenessContext.GetNextDiffSetIdx(mergeFrom, prevDestEntry.mBits, checkReg); |
| 4345 | if (checkReg == -1) |
| 4346 | break; |
| 4347 | mColorizer.AddEdge(checkReg, vregIdx); |
| 4348 | } |
| 4349 | } |
| 4350 | }*/ |
| 4351 | |
| 4352 | auto prevItr = prevDestEntry->begin(); |
| 4353 | auto prevEnd = prevDestEntry->end(); |
| 4354 | auto mergeFromItr = mergeFrom->begin(); |
| 4355 | auto mergeFromEnd = mergeFrom->end(); |
| 4356 | while ((prevItr != prevEnd) && (mergeFromItr != mergeFromEnd)) |
| 4357 | { |
| 4358 | int prevIdx = *prevItr; |
| 4359 | int mergeIdx = *mergeFromItr; |
| 4360 | bool done = false; |
| 4361 | |
| 4362 | while (mergeIdx < prevIdx) |
| 4363 | { |
| 4364 | newNodes.push_back(mergeIdx); |
| 4365 | ++mergeFromItr; |
| 4366 | if (mergeFromItr == mergeFromEnd) |
| 4367 | { |
| 4368 | done = true; |
| 4369 | break; |
| 4370 | } |
| 4371 | mergeIdx = *mergeFromItr; |
| 4372 | } |
| 4373 | if (done) |
| 4374 | break; |
| 4375 | |
| 4376 | while (prevIdx < mergeIdx) |
| 4377 | { |
| 4378 | prevExclusiveNodes.push_back(prevIdx); |
| 4379 | ++prevItr; |
| 4380 | if (prevItr == prevEnd) |