OpenASIP 2.2
Loading...
Searching...
No Matches
SimpleIfConverter.hh
Go to the documentation of this file.
1/**
2 * @file SimpleIfConverter.hh
3 *
4 * Declaration of simple if converter optimizer class
5 *
6 * @author Heikki Kultala 2008 (heikki.kultala@tut.fi)
7 * @note rating: red
8 */
9
10#ifndef TTA_SIMPLE_IF_CONVERTER_HH
11#define TTA_SIMPLE_IF_CONVERTER_HH
12
14#include "ProcedurePass.hh"
15#include "ProgramPass.hh"
16#include "ProgramOperation.hh"
17
19class BasicBlockNode;
20class BasicBlock;
21class ControlFlowEdge;
23class MoveNode;
24
25namespace TTAMachine {
26 class RegisterFile;
27}
28
29namespace TTAProgram {
30 class Instruction;
31 class MoveGuard;
32 class Move;
33 class InstructionReferenceManager;
34 class CodeGenerator;
35 class CodeSnippet;
36 class BasicBlock;
37 class TerminalFUPort;
38}
39
42
43public:
45 InterPassData& data, const TTAMachine::Machine& targetMachine);
46
47 virtual void handleControlFlowGraph(
48 ControlFlowGraph& cfg, const TTAMachine::Machine& targetMachine);
49
50 virtual void handleProcedure(
51 TTAProgram::Procedure& procedure,
52 const TTAMachine::Machine& targetMachine);
53
54 virtual void handleProgram(
55 TTAProgram::Program& program, const TTAMachine::Machine& targetMachine);
56
57 virtual std::string shortDescription() const;
58
59 static bool removeJump(TTAProgram::BasicBlock& bb);
62 std::map<ProgramOperationPtr,ProgramOperationPtr>& poMapping);
63
64private:
65
66 /**
67 * This struct holds data about one area being if-converted,
68 * all the nodes and their order and the form of the area.
69 */
104
106 BasicBlockNode& bbn, BasicBlockNode& fallThruNode,
107 BasicBlockNode& jumpDestNode, ControlFlowGraph& cfg);
108
110 BasicBlockNode& bbn, BasicBlockNode& fallThruNode,
111 BasicBlockNode& jumpDestNode, ControlFlowGraph& cfg);
112
114 BasicBlockNode& bbn, BasicBlockNode& fallThruNode,
115 BasicBlockNode& jumpDestNode, ControlFlowGraph& cfg);
116
117 std::pair<BasicBlockNode*,BasicBlockNode*> successors(
118 BasicBlockNode& node, ControlFlowGraph& cfg);
119
121
123
124 void appendBB(
126 TTAProgram::MoveGuard* mg, bool removeJumps);
127
128 bool writesRegister(
129 const TTAProgram::BasicBlock& bb,
130 int index,
131 const TTAMachine::RegisterFile& rf,
132 bool ignoreLastInstruction);
133
135
136 bool canConvert(
137 CandidateBlocks* candidates,
138 ControlFlowGraph& cfg);
139
140 void combineBlocks(CandidateBlocks& bblocks);
141
142 void convert(CandidateBlocks& bblocks, ControlFlowGraph& cfg);
143
144 void updateCfg(CandidateBlocks& bblocks, ControlFlowGraph& cfg);
145
148
153
161
165};
166
167#endif
find Finds info of the inner loops in the program
std::shared_ptr< ProgramOperation > ProgramOperationPtr
Definition MoveNode.hh:53
static ProgramOperationPtr fixTerminalPO(TTAProgram::TerminalFUPort &terminal, std::map< ProgramOperationPtr, ProgramOperationPtr > &poMapping)
std::pair< BasicBlockNode *, BasicBlockNode * > successors(BasicBlockNode &node, ControlFlowGraph &cfg)
bool writesRegister(const TTAProgram::BasicBlock &bb, int index, const TTAMachine::RegisterFile &rf, bool ignoreLastInstruction)
CandidateBlocks * detectTriangleViaFt(BasicBlockNode &bbn, BasicBlockNode &fallThruNode, BasicBlockNode &jumpDestNode, ControlFlowGraph &cfg)
bool canConvert(CandidateBlocks *candidates, ControlFlowGraph &cfg)
bool hasConditionals(TTAProgram::BasicBlock &bb)
CandidateBlocks * detectDiamond(BasicBlockNode &bbn, BasicBlockNode &fallThruNode, BasicBlockNode &jumpDestNode, ControlFlowGraph &cfg)
virtual std::string shortDescription() const
CandidateBlocks * detectTriangleViaJump(BasicBlockNode &bbn, BasicBlockNode &fallThruNode, BasicBlockNode &jumpDestNode, ControlFlowGraph &cfg)
void convert(CandidateBlocks &bblocks, ControlFlowGraph &cfg)
virtual void handleProcedure(TTAProgram::Procedure &procedure, const TTAMachine::Machine &targetMachine)
CandidateBlocks * searchCandidate(ControlFlowGraph &cfg)
void appendBB(const TTAProgram::BasicBlock &src, TTAProgram::BasicBlock &dest, TTAProgram::MoveGuard *mg, bool removeJumps)
virtual void handleProgram(TTAProgram::Program &program, const TTAMachine::Machine &targetMachine)
void addJump(TTAProgram::BasicBlock &bb, BasicBlockNode &bbn)
TTAProgram::InstructionReferenceManager * irm_
void updateCfg(CandidateBlocks &bblocks, ControlFlowGraph &cfg)
void combineBlocks(CandidateBlocks &bblocks)
static bool removeJump(TTAProgram::BasicBlock &bb)
TTAProgram::CodeGenerator * codeGenerator_
virtual void handleControlFlowGraph(ControlFlowGraph &cfg, const TTAMachine::Machine &targetMachine)
TTAProgram::BasicBlock & fallThruBB_
const TTAMachine::RegisterFile * grFile_
TTAProgram::BasicBlock & jumpDestBB_