12#ifndef TTA_PEEL_2_BB_LOOPS_HH
13#define TTA_PEEL_2_BB_LOOPS_HH
33 return "optimizes two-BB inner loops into single-bb inner loops";
38 assert(!ok &&
"only call this on fail to allow return false"); }
48 operator bool()
const {
return preLoop != NULL; }
#define assert(condition)
std::shared_ptr< ProgramOperation > ProgramOperationPtr
TTAProgram::CodeGenerator * codeGenerator_
TTAProgram::InstructionReferenceManager * irm_
bool negateOp(ProgramOperationPtr po)
BBNodes testIf2BBLoop(ControlFlowGraph &cfg, BasicBlockNode &bbn)
void appendBB(const TTAProgram::BasicBlock &src, TTAProgram::BasicBlock &dest, BasicBlockNode *newJumpDest)
virtual std::string shortDescription() const override
void handleControlFlowGraph(ControlFlowGraph &cfg, const TTAMachine::Machine &targetMachine) override
void performCodeMotion(BBNodes &bbns)
const TTAMachine::Machine & mach_
void peel2BBLoop(ControlFlowGraph &cfg, BBNodes &bbns)
void updateCFG(ControlFlowGraph &cfg, BBNodes &bbns)
BasicBlockNode * postLoop
BasicBlockNode * beginLoop
BBNodes(BasicBlockNode *prel, BasicBlockNode *bl, BasicBlockNode *el, BasicBlockNode *pol)