MCPcopy Create free account
hub / github.com/ZDoom/Raze / removeUnreachableCode

Method removeUnreachableCode

libraries/asmjit/asmjit/base/regalloc.cpp:303–348  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

301// ============================================================================
302
303Error RAPass::removeUnreachableCode() {
304 ZoneList<CBNode*>::Link* link = _unreachableList.getFirst();
305 CBNode* stop = getStop();
306
307 while (link) {
308 CBNode* node = link->getValue();
309 if (node && node->getPrev() && node != stop) {
310 // Locate all unreachable nodes.
311 CBNode* first = node;
312 do {
313 if (node->hasPassData()) break;
314 node = node->getNext();
315 } while (node != stop);
316
317 // Remove unreachable nodes that are neither informative nor directives.
318 if (node != first) {
319 CBNode* end = node;
320 node = first;
321
322 // NOTE: The strategy is as follows:
323 // 1. The algorithm removes everything until it finds a first label.
324 // 2. After the first label is found it removes only removable nodes.
325 bool removeEverything = true;
326 do {
327 CBNode* next = node->getNext();
328 bool remove = node->isRemovable();
329
330 if (!remove) {
331 if (node->isLabel())
332 removeEverything = false;
333 remove = removeEverything;
334 }
335
336 if (remove)
337 cc()->removeNode(node);
338
339 node = next;
340 } while (node != end);
341 }
342 }
343
344 link = link->getNext();
345 }
346
347 return kErrorOk;
348}
349
350// ============================================================================
351// [asmjit::RAPass - Liveness Analysis]

Callers

nothing calls this directly

Calls 8

getFirstMethod · 0.80
hasPassDataMethod · 0.80
removeNodeMethod · 0.80
getValueMethod · 0.45
getPrevMethod · 0.45
getNextMethod · 0.45
isRemovableMethod · 0.45
isLabelMethod · 0.45

Tested by

no test coverage detected