BlockStates DataFlowPass::runOnBlocks(const BlockVector& blocks) { BlockStates states; // First pass: precompute generate and kill sets. initStates(blocks, states); // iterate for a forwards pass if (_direction == FORWARDS) { const BasicBlock* start = blocks.front(); traverseForwards(start, states); } // iterate for a backwards pass else if (_direction == BACKWARDS) { const BasicBlock* start = blocks.back(); traverseBackwards(start, states); } return states; }