예제 #1
0
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;
}