// // find def sites (blocks) of var operand // void SSABuilder::findDefSites(DefSites& allDefSites) { const Nodes& nodes = fg->getNodes(); Nodes::const_iterator niter; for(niter = nodes.begin(); niter != nodes.end(); ++niter) { Node* node = *niter; if (!node->isBlockNode()) continue; // go over each instruction to find var definition Inst* first = (Inst*)node->getFirstInst(); for (Inst* inst = first->getNextInst(); inst != NULL; inst = inst->getNextInst()) { // look for var definitions if (!inst->isStVar()) continue; assert(inst->isVarAccess()); // if inst->getVar() return NULL, then inst is accessing SSAOpnd. // Hence, there is no need to do SSA transformation (addVarDefSite() // immediately returns. allDefSites.addVarDefSite(((VarAccessInst*)inst)->getVar(),node); } } }