1234567891011121314151617181920212223242526272829303132333435363738 |
- #include "BasicBlock.h"
- #include "Procedure.h"
- #include "dcc.h"
- BB *BB::Create(void *ctx, const std::string &s, Function *parent, BB *insertBefore)
- {
- return new BB;
- }
- BB *BB::Create(Int start, Int ip, byte nodeType, Int numOutEdges, Function *parent)
- {
- parent->cfg;
- BB* pnewBB;
- pnewBB = new BB;
- pnewBB->nodeType = nodeType; /* Initialise */
- pnewBB->start = start;
- pnewBB->length = ip - start + 1;
- pnewBB->numOutEdges = (byte)numOutEdges;
- pnewBB->immedDom = NO_DOM;
- pnewBB->loopHead = pnewBB->caseHead = pnewBB->caseTail =
- pnewBB->latchNode= pnewBB->loopFollow = NO_NODE;
- if (numOutEdges)
- pnewBB->edges.resize(numOutEdges);
- /* Mark the basic block to which the icodes belong to, but only for
- * real code basic blocks (ie. not interval bbs) */
- if(parent)
- {
- if (start >= 0)
- parent->Icode.SetInBB(start, ip, pnewBB);
- parent->heldBBs.push_back(pnewBB);
- parent->cfg.push_back(pnewBB);
- }
- if (start != -1) /* Only for code BB's */
- stats.numBBbef++;
- return pnewBB;
- }
|