OpenASIP  2.0
DataDependenceGraphBuilder.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2011 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file DataDependenceGraphBuilder.hh
26  *
27  * Declaration of data dependence graph builder class
28  *
29  * @author Heikki Kultala 2006-2009 (heikki.kultala-no.spam-tut.fi)
30  * @author Pekka Jääskeläinen 2011
31  * @note rating: red
32  */
33 
34 #ifndef TTA_DDG_BUILDER_HH
35 #define TTA_DDG_BUILDER_HH
36 
37 #include "DataDependenceGraph.hh"
38 #include "ControlFlowGraph.hh"
39 #include "MemoryAliasAnalyzer.hh"
40 #include "TCEString.hh"
41 #include "MoveNodeUse.hh"
42 #include "LiveRangeData.hh"
43 
44 namespace llvm {
45  class AAResults;
46  typedef AAResults AliasAnalysis;
47 }
48 
49 namespace TTAProgram {
50  class Program;
51  class TerminalRegister;
52  class CodeSnippet;
53  class Instruction;
54  class Move;
55  class BasicBlock;
56 }
57 
58 namespace TTAMachine {
59  class Machine;
60 }
61 
62 class UniversalMachine;
63 class InterPassData;
64 
65 
66 /**
67  * DataDependenceGraphBuilder class is responsible for building data
68  * dependence graphs.
69  */
71 public:
74 
76 
77  void addAliasAnalyzer(MemoryAliasAnalyzer* analyzer);
78 
79  virtual DataDependenceGraph* build(
80  ControlFlowGraph& cGraph,
81  DataDependenceGraph::AntidependenceLevel antidependenceLevel,
82  const TTAMachine::Machine& mach,
83  const UniversalMachine* um = NULL,
84  bool createMemAndFUDeps = true,
85  bool createDeathInformation = true,
86  llvm::AliasAnalysis* AA = NULL);
87  virtual DataDependenceGraph* build(
89  DataDependenceGraph::AntidependenceLevel antidependenceLevel,
90  const TTAMachine::Machine& mach,
91  const TCEString& ddgname = "small bb",
92  const UniversalMachine* um = NULL,
93  bool createMemAndFUDeps = true,
94  llvm::AliasAnalysis* AA = NULL);
95 
96 protected:
97 
98  bool isTriggering(const MoveNode& mn);
99 
100  std::set<TCEString> allParamRegs_;
101 
104 
110 
111  typedef std::map<int, TCEString> SpecialRegisters;
112  typedef std::vector<MemoryAliasAnalyzer*> AliasAnalyzerVector;
113 
114  enum BBState {
115  BB_UNREACHED = 0, /// Basic block we have not yet encountered.
116  BB_QUEUED, /// BB which is queued to be processed
117  BB_READY, ///BB which is already processed and is not queued.
119 
123  /**
124  * This class stores all the basic-block related information needed by
125  * the data dependency graph creator.
126  */
127  struct BBData {
128 
129  BBData(BasicBlockNode& bb);
130  virtual ~BBData();
131  /// ProgramOperations lacking operands
133  /// ProgramOperations lacking result read
136  /// State of the BB.
138  /// Whether the BB has been constructed or not.
141  };
142 
143  typedef std::map <BasicBlockNode*, BBData*> BBDataMap;
144  typedef std::list<BBData*> BBDataList;
145 
147  BBData& bbd,
148  bool firstTime);
149 
151 
153 
154  bool updateMemAndFuAliveAfter(BBData& bbd);
156  void createRegisterDeps();
157  void initializeBBStates();
159 
163  bool aliveInformationNeeded = true);
164 
165  void iterateBBs(
166  ConstructionPhase phase);
167  void searchRegisterDeaths();
168  void iterateRegisterDeaths();
169 
171  BBData& bbd,
172  bool queueAll,
173  ConstructionPhase phase);
174  bool appendUseMapSets(
175  const MoveNodeUseMapSet& srcMap,
176  MoveNodeUseMapSet& dstMap,
177  bool addLoopProperty);
179  TTAProgram::BasicBlock& processedBB,
180  BasicBlockNode& successor,
181  bool queueAll,
182  bool loop,
183  ConstructionPhase phase);
184  void updateBB(
185  BBData& bbd,
186  ConstructionPhase phase);
187 
191  void constructBB(BasicBlockNodeSet& inputBlocks);
192 
194  void processGuard(MoveNode& moveNode);
195  void processSource(MoveNode& moveNode);
196  void processResultRead(MoveNode& moveNode);
197  void processCall(MoveNode& mn);
198  void processReturn(MoveNode& moveNode);
199  void processEntryNode(MoveNode& mn);
200  void processDestination(
201  class MoveNode& moveNode,
202  ConstructionPhase phase);
203  void processRegUse(
204  MoveNodeUse mn,
205  const TCEString& reg);
206 
207  void updateMemUse(
208  MoveNodeUse mnd,
209  const TCEString& category);
210 
211  void processRegWrite(
212  MoveNodeUse mn,
213  const TCEString& reg);
214  void updateMemWrite(
215  MoveNodeUse mnd,
216  const TCEString& category);
217 
218  void processTriggerPO(class MoveNode& moveNode, Operation& dop);
220  MoveNode& moveNode,
221  Operation &dop);
223  MoveNode& moveNode,
224  Operation &dop);
226  class MoveNode& moveNode,
227  class Operation& dop);
228 
229  void createSideEffectEdges(
230  MoveNodeUseSet& prevMoves,
231  const MoveNode& mn,
232  Operation& dop);
233 
234  void processMemWrite(MoveNodeUse mnd);
235  void processMemUse(MoveNodeUse mnd);
236 
237  void processOperand(
238  class MoveNode& moveNode,
239  Operation &dop);
240 
242  const ProgramOperation& pop1,
243  const ProgramOperation& pop2,
244  MoveNodeUse::BBRelation bbInfo);
245 
246  bool isAddressTraceable(const ProgramOperation& pop);
248 
250  MoveNodeUse prev,
251  MoveNodeUse mnd,
254  MoveNodeUse& mnd,
255  std::set<MoveNodeUse>& prevNodes,
257  bool traceable);
259  MoveNodeUse& mnd,
260  std::set<MoveNodeUse>& defines);
261 
262  std::set<MoveNodeUse> earlierWritesWithSameGuard(
263  MoveNodeUse& mnd, std::set<MoveNodeUse>& defines);
264 
266  MoveNodeUse& mnd, std::set<MoveNodeUse>& defines);
267 
269  const TCEString& reg,
270  MoveNodeUse& mnd,
271  MoveNodeUseSet& predecessorNodes,
273  bool guardedKillFound);
274 
275  // functions related to iterating over basic blocks
276 
277  void changeState(
278  BBData& bbd,
279  BBState newState,
280  bool priorize = false);
281 
282  bool isAlwaysDifferentFU(const MoveNode* srcMN, const MoveNode* dstMN);
283 
284  // related to mem operation addresses
285 // MoveNode* addressMove(const MoveNode&mn);
286 
287  /// find special register data from old frontend code
288  void findStaticRegisters(
290  std::map<int,TCEString>& registers);
291 
292  void findStaticRegisters(
293  ControlFlowGraph& cfg,
294  std::map<int,TCEString>& registers);
295 
296  void findStaticRegisters(
298  std::map<int,TCEString>& registers);
299 
300  void findStaticRegisters(
301  const UniversalMachine& um,
302  std::map<int,TCEString>& registers);
303 
304  void appendMoveNodeUse(
307  bool setLoopProperty);
308 
310 
316  /// contains stack pointer, RV and parameter registers.
318  static const TCEString RA_NAME;
323 };
324 
325 #endif
DataDependenceGraphBuilder::mach_
const TTAMachine::Machine * mach_
Definition: DataDependenceGraphBuilder.hh:322
DataDependenceGraphBuilder::BBData::state_
BBState state_
State of the BB.
Definition: DataDependenceGraphBuilder.hh:137
DataDependenceGraphBuilder::BBData::poReadsHandled_
int poReadsHandled_
Definition: DataDependenceGraphBuilder.hh:135
DataDependenceGraphBuilder::BBData::bblock_
BasicBlockNode * bblock_
Definition: DataDependenceGraphBuilder.hh:140
DataDependenceGraphBuilder::isTriggering
bool isTriggering(const MoveNode &mn)
Definition: DataDependenceGraphBuilder.cc:810
TTAProgram
Definition: Estimator.hh:65
DataDependenceGraphBuilder::MoveNodeUseMapSet
LiveRangeData::MoveNodeUseMapSet MoveNodeUseMapSet
Definition: DataDependenceGraphBuilder.hh:106
DataDependenceGraphBuilder::SpecialRegisters
std::map< int, TCEString > SpecialRegisters
Definition: DataDependenceGraphBuilder.hh:111
llvm
Definition: InlineAsmParser.hh:49
DataDependenceGraphBuilder::BB_STATES
@ BB_STATES
BB which is already processed and is not queued.
Definition: DataDependenceGraphBuilder.hh:118
DataDependenceGraphBuilder::clearUnneededBookkeeping
void clearUnneededBookkeeping()
Definition: DataDependenceGraphBuilder.cc:2251
MoveNodeUse::BBRelation
BBRelation
Definition: MoveNodeUse.hh:23
DataDependenceGraphBuilder::blocksByState_
BBDataList blocksByState_[BB_STATES]
Definition: DataDependenceGraphBuilder.hh:309
DataDependenceGraphBuilder::createMemAndFUstateDeps
void createMemAndFUstateDeps()
Definition: DataDependenceGraphBuilder.cc:2312
DataDependenceGraphBuilder::BBData::constructed_
bool constructed_
Whether the BB has been constructed or not.
Definition: DataDependenceGraphBuilder.hh:139
DataDependenceGraphBuilder::constructIndividualFromInlineAsmBB
void constructIndividualFromInlineAsmBB(ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:669
DataDependenceGraphBuilder::processResultRead
void processResultRead(MoveNode &moveNode)
Definition: DataDependenceGraphBuilder.cc:1104
DataDependenceGraphBuilder::findStaticRegisters
void findStaticRegisters(TTAProgram::CodeSnippet &cs, std::map< int, TCEString > &registers)
find special register data from old frontend code
Definition: DataDependenceGraphBuilder.cc:306
LiveRangeData::MoveNodeUseSet
std::set< MoveNodeUse > MoveNodeUseSet
Definition: LiveRangeData.hh:51
DataDependenceGraphBuilder::MoveNodeUsePair
LiveRangeData::MoveNodeUsePair MoveNodeUsePair
Definition: DataDependenceGraphBuilder.hh:109
DataDependenceGraphBuilder::processCall
void processCall(MoveNode &mn)
Definition: DataDependenceGraphBuilder.cc:1532
DataDependenceGraphBuilder::DataDependenceGraphBuilder
DataDependenceGraphBuilder()
Definition: DataDependenceGraphBuilder.cc:118
DataDependenceGraphBuilder::processTriggerRegistersAndOperations
void processTriggerRegistersAndOperations(MoveNode &moveNode, Operation &dop)
Definition: DataDependenceGraphBuilder.cc:1018
BoostGraph< BasicBlockNode, ControlFlowEdge >::NodeSet
std::set< BasicBlockNode *, typename BasicBlockNode ::Comparator > NodeSet
Definition: BoostGraph.hh:86
TTAProgram::Instruction
Definition: Instruction.hh:57
DataDependenceGraphBuilder::initializeBBStates
void initializeBBStates()
Definition: DataDependenceGraphBuilder.cc:2191
DataDependenceGraphBuilder::processEntryNode
void processEntryNode(MoveNode &mn)
Definition: DataDependenceGraphBuilder.cc:2694
MoveNodeUse
Definition: MoveNodeUse.hh:20
DataDependenceGraphBuilder::processMemUse
void processMemUse(MoveNodeUse mnd)
Definition: DataDependenceGraphBuilder.cc:1800
DataDependenceGraphBuilder::appendUseMapSets
bool appendUseMapSets(const MoveNodeUseMapSet &srcMap, MoveNodeUseMapSet &dstMap, bool addLoopProperty)
DataDependenceGraphBuilder::updateMemUse
void updateMemUse(MoveNodeUse mnd, const TCEString &category)
Definition: DataDependenceGraphBuilder.cc:2859
DataDependenceGraphBuilder::ConstructionPhase
ConstructionPhase
Definition: DataDependenceGraphBuilder.hh:120
DataDependenceGraphBuilder::aliasAnalyzers_
AliasAnalyzerVector aliasAnalyzers_
Definition: DataDependenceGraphBuilder.hh:315
DataDependenceGraph.hh
ProgramOperation
Definition: ProgramOperation.hh:70
DataDependenceGraphBuilder::createSideEffectEdges
void createSideEffectEdges(MoveNodeUseSet &prevMoves, const MoveNode &mn, Operation &dop)
Definition: DataDependenceGraphBuilder.cc:1646
MoveNode
Definition: MoveNode.hh:65
DataDependenceGraphBuilder::processMemWrite
void processMemWrite(MoveNodeUse mnd)
Definition: DataDependenceGraphBuilder.cc:1744
DataDependenceGraphBuilder::MoveNodeUseMap
LiveRangeData::MoveNodeUseMap MoveNodeUseMap
Definition: DataDependenceGraphBuilder.hh:107
DataDependenceGraphBuilder::earlierWritesWithSameGuard
std::set< MoveNodeUse > earlierWritesWithSameGuard(MoveNodeUse &mnd, std::set< MoveNodeUse > &defines)
Definition: DataDependenceGraphBuilder.cc:1200
DataDependenceGraphBuilder::BB_UNREACHED
@ BB_UNREACHED
Definition: DataDependenceGraphBuilder.hh:115
DataDependenceGraphBuilder::currentBB_
BasicBlockNode * currentBB_
Definition: DataDependenceGraphBuilder.hh:312
DataDependenceGraphBuilder::BBData::~BBData
virtual ~BBData()
Definition: DataDependenceGraphBuilder.cc:3042
DataDependenceGraphBuilder::processGuard
void processGuard(MoveNode &moveNode)
Definition: DataDependenceGraphBuilder.cc:760
DataDependenceEdge::DependenceType
DependenceType
Definition: DataDependenceEdge.hh:45
LiveRangeData::MoveNodeUseMapSet
std::map< TCEString, MoveNodeUseSet > MoveNodeUseMapSet
Definition: LiveRangeData.hh:52
DataDependenceGraphBuilder::queueFirstBB
BasicBlockNode * queueFirstBB()
Definition: DataDependenceGraphBuilder.cc:2238
DataDependenceGraphBuilder::constructBB
void constructBB(BasicBlockNodeSet &inputBlocks)
DataDependenceGraphBuilder::REGISTERS_AND_PROGRAM_OPERATIONS
@ REGISTERS_AND_PROGRAM_OPERATIONS
Definition: DataDependenceGraphBuilder.hh:121
DataDependenceGraphBuilder::updateRegistersUsedInOrAfter
bool updateRegistersUsedInOrAfter(BBData &bbd)
Definition: DataDependenceGraphBuilder.cc:2955
DataDependenceGraphBuilder::appendMoveNodeUse
void appendMoveNodeUse(const LiveRangeData::MoveNodeUseSet &src, LiveRangeData::MoveNodeUseSet &dst, bool setLoopProperty)
DataDependenceGraphBuilder::memoryCategory
TCEString memoryCategory(const MoveNodeUse &mnd)
Definition: DataDependenceGraphBuilder.cc:1999
DataDependenceGraphBuilder::cfg_
ControlFlowGraph * cfg_
Definition: DataDependenceGraphBuilder.hh:320
ProgramOperationPtr
std::shared_ptr< ProgramOperation > ProgramOperationPtr
Definition: MoveNode.hh:52
DataDependenceGraphBuilder::iterateBBs
void iterateBBs(ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:2345
DataDependenceGraphBuilder::MoveNodeUseSetPair
LiveRangeData::MoveNodeUseSetPair MoveNodeUseSetPair
Definition: DataDependenceGraphBuilder.hh:108
TCEString.hh
DataDependenceGraphBuilder::BBData::destPending_
ProgramOperationPtr destPending_
ProgramOperations lacking operands.
Definition: DataDependenceGraphBuilder.hh:132
DataDependenceGraphBuilder::BBData::readPending_
ProgramOperationPtr readPending_
ProgramOperations lacking result read.
Definition: DataDependenceGraphBuilder.hh:134
DataDependenceGraphBuilder::processDestination
void processDestination(class MoveNode &moveNode, ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:844
MemoryAliasAnalyzer::AliasingResult
AliasingResult
Definition: MemoryAliasAnalyzer.hh:50
DataDependenceGraphBuilder::BasicBlockNodeSet
ControlFlowGraph::NodeSet BasicBlockNodeSet
Definition: DataDependenceGraphBuilder.hh:102
DataDependenceGraphBuilder::BB_READY
@ BB_READY
BB which is queued to be processed.
Definition: DataDependenceGraphBuilder.hh:117
ControlFlowGraph.hh
UniversalMachine
Definition: UniversalMachine.hh:56
DataDependenceGraphBuilder::BB_QUEUED
@ BB_QUEUED
Basic block we have not yet encountered.
Definition: DataDependenceGraphBuilder.hh:116
DataDependenceGraphBuilder::~DataDependenceGraphBuilder
virtual ~DataDependenceGraphBuilder()
Definition: DataDependenceGraphBuilder.cc:283
DataDependenceGraphBuilder::createTriggerDependencies
void createTriggerDependencies(class MoveNode &moveNode, class Operation &dop)
Definition: DataDependenceGraphBuilder.cc:1596
DataDependenceGraphBuilder::updateBB
void updateBB(BBData &bbd, ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:2743
DataDependenceGraphBuilder::addAliasAnalyzer
void addAliasAnalyzer(MemoryAliasAnalyzer *analyzer)
Definition: DataDependenceGraphBuilder.cc:293
DataDependenceGraphBuilder::checkAndCreateMemDep
bool checkAndCreateMemDep(MoveNodeUse prev, MoveNodeUse mnd, DataDependenceEdge::DependenceType depType)
Definition: DataDependenceGraphBuilder.cc:1841
DataDependenceGraphBuilder::processTriggerPO
void processTriggerPO(class MoveNode &moveNode, Operation &dop)
Definition: DataDependenceGraphBuilder.cc:948
DataDependenceGraphBuilder::rvIsParamReg_
bool rvIsParamReg_
Definition: DataDependenceGraphBuilder.hh:321
DataDependenceGraphBuilder::MNodeSet
DataDependenceGraph::NodeSet MNodeSet
Definition: DataDependenceGraphBuilder.hh:103
DataDependenceGraphBuilder::searchRegisterDeaths
void searchRegisterDeaths()
Definition: DataDependenceGraphBuilder.cc:2882
DataDependenceGraphBuilder::currentData_
BBData * currentData_
Definition: DataDependenceGraphBuilder.hh:313
DataDependenceGraphBuilder::changeState
void changeState(BBData &bbd, BBState newState, bool priorize=false)
Definition: DataDependenceGraphBuilder.cc:2217
DataDependenceGraphBuilder::checkAndCreateMemAntideps
void checkAndCreateMemAntideps(MoveNodeUse &mnd, std::set< MoveNodeUse > &prevNodes, DataDependenceEdge::DependenceType depType, bool traceable)
Definition: DataDependenceGraphBuilder.cc:1718
DataDependenceGraphBuilder::updateRegistersAliveAfter
bool updateRegistersAliveAfter(BBData &bbd)
Definition: DataDependenceGraphBuilder.cc:2519
BasicBlockNode
Definition: BasicBlockNode.hh:64
MemoryAliasAnalyzer
Definition: MemoryAliasAnalyzer.hh:47
DataDependenceGraphBuilder::BBData::BBData
BBData(BasicBlockNode &bb)
Definition: DataDependenceGraphBuilder.cc:3034
DataDependenceGraphBuilder::createRegisterAntideps
void createRegisterAntideps(const TCEString &reg, MoveNodeUse &mnd, MoveNodeUseSet &predecessorNodes, DataDependenceEdge::DependenceType depType, bool guardedKillFound)
Definition: DataDependenceGraphBuilder.cc:1303
DataDependenceGraphBuilder::createRegisterDeps
void createRegisterDeps()
Definition: DataDependenceGraphBuilder.cc:2268
InterPassData
Definition: InterPassData.hh:48
DataDependenceGraphBuilder::isAlwaysDifferentFU
bool isAlwaysDifferentFU(const MoveNode *srcMN, const MoveNode *dstMN)
Definition: DataDependenceGraphBuilder.cc:2994
DataDependenceGraphBuilder::isAddressTraceable
bool isAddressTraceable(const ProgramOperation &pop)
Definition: DataDependenceGraphBuilder.cc:1974
DataDependenceGraphBuilder::iterateRegisterDeaths
void iterateRegisterDeaths()
Definition: DataDependenceGraphBuilder.cc:2924
DataDependenceGraphBuilder::createOperationEdges
void createOperationEdges(ProgramOperationPtr po)
Definition: DataDependenceGraphBuilder.cc:1141
DataDependenceGraphBuilder::updatePreceedingRegistersUsedAfter
void updatePreceedingRegistersUsedAfter(BBData &bbd, bool firstTime)
Definition: DataDependenceGraphBuilder.cc:2390
DataDependenceGraphBuilder::AliasAnalyzerVector
std::vector< MemoryAliasAnalyzer * > AliasAnalyzerVector
Definition: DataDependenceGraphBuilder.hh:112
Operation
Definition: Operation.hh:59
DataDependenceGraphBuilder::processRegWrite
void processRegWrite(MoveNodeUse mn, const TCEString &reg)
Definition: DataDependenceGraphBuilder.cc:1369
LiveRangeData::MoveNodeUseMap
std::map< TCEString, MoveNodeUse > MoveNodeUseMap
Definition: LiveRangeData.hh:53
DataDependenceGraphBuilder::BBDataList
std::list< BBData * > BBDataList
Definition: DataDependenceGraphBuilder.hh:144
TTAProgram::CodeSnippet
Definition: CodeSnippet.hh:59
DataDependenceGraphBuilder::bbData_
BBDataMap bbData_
Definition: DataDependenceGraphBuilder.hh:311
DataDependenceGraphBuilder::RA_NAME
static const TCEString RA_NAME
Definition: DataDependenceGraphBuilder.hh:318
DataDependenceGraphBuilder::processSource
void processSource(MoveNode &moveNode)
Definition: DataDependenceGraphBuilder.cc:785
TTAProgram::BasicBlock
Definition: BasicBlock.hh:85
DataDependenceGraphBuilder::updateMemAndFuAliveAfter
bool updateMemAndFuAliveAfter(BBData &bbd)
Definition: DataDependenceGraphBuilder.cc:2592
LiveRangeData::MoveNodeUseSetPair
std::pair< TCEString, MoveNodeUseSet > MoveNodeUseSetPair
Definition: LiveRangeData.hh:57
LiveRangeData.hh
DataDependenceGraphBuilder::currentDDG_
DataDependenceGraph * currentDDG_
Definition: DataDependenceGraphBuilder.hh:314
MoveNodeUse.hh
DataDependenceGraphBuilder::updateMemWrite
void updateMemWrite(MoveNodeUse mnd, const TCEString &category)
Definition: DataDependenceGraphBuilder.cc:2833
DataDependenceGraphBuilder
Definition: DataDependenceGraphBuilder.hh:70
DataDependenceGraphBuilder::setSucceedingPredepsForBB
void setSucceedingPredepsForBB(TTAProgram::BasicBlock &processedBB, BasicBlockNode &successor, bool queueAll, bool loop, ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:2460
DataDependenceGraphBuilder::allParamRegs_
std::set< TCEString > allParamRegs_
Definition: DataDependenceGraphBuilder.hh:100
DataDependenceGraphBuilder::BBState
BBState
Definition: DataDependenceGraphBuilder.hh:114
TCEString
Definition: TCEString.hh:53
DataDependenceGraphBuilder::processOperand
void processOperand(class MoveNode &moveNode, Operation &dop)
Definition: DataDependenceGraphBuilder.cc:1062
DataDependenceGraph
Definition: DataDependenceGraph.hh:67
DataDependenceGraphBuilder::build
virtual DataDependenceGraph * build(ControlFlowGraph &cGraph, DataDependenceGraph::AntidependenceLevel antidependenceLevel, const TTAMachine::Machine &mach, const UniversalMachine *um=NULL, bool createMemAndFUDeps=true, bool createDeathInformation=true, llvm::AliasAnalysis *AA=NULL)
Definition: DataDependenceGraphBuilder.cc:2120
DataDependenceGraphBuilder::setSucceedingPredeps
void setSucceedingPredeps(BBData &bbd, bool queueAll, ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:2424
DataDependenceGraphBuilder::processReturn
void processReturn(MoveNode &moveNode)
Definition: DataDependenceGraphBuilder.cc:1486
MemoryAliasAnalyzer.hh
DataDependenceGraphBuilder::interPassData_
InterPassData * interPassData_
Definition: DataDependenceGraphBuilder.hh:319
DataDependenceGraph::AntidependenceLevel
AntidependenceLevel
Definition: DataDependenceGraph.hh:78
DataDependenceGraphBuilder::hasEarlierMemWriteToSameAddressWithSameGuard
bool hasEarlierMemWriteToSameAddressWithSameGuard(MoveNodeUse &mnd, std::set< MoveNodeUse > &defines)
Definition: DataDependenceGraphBuilder.cc:1688
DataDependenceGraphBuilder::processRegUse
void processRegUse(MoveNodeUse mn, const TCEString &reg)
Definition: DataDependenceGraphBuilder.cc:1229
DataDependenceGraphBuilder::hasEarlierWriteWithSameGuard
bool hasEarlierWriteWithSameGuard(MoveNodeUse &mnd, std::set< MoveNodeUse > &defines)
Definition: DataDependenceGraphBuilder.cc:1183
DataDependenceGraphBuilder::MEMORY_AND_SIDE_EFFECTS
@ MEMORY_AND_SIDE_EFFECTS
Definition: DataDependenceGraphBuilder.hh:122
DataDependenceGraphBuilder::constructIndividualBB
void constructIndividualBB(ConstructionPhase phase)
Definition: DataDependenceGraphBuilder.cc:560
TTAMachine
Definition: Assembler.hh:48
DataDependenceGraphBuilder::analyzeMemoryAlias
MemoryAliasAnalyzer::AliasingResult analyzeMemoryAlias(const ProgramOperation &pop1, const ProgramOperation &pop2, MoveNodeUse::BBRelation bbInfo)
Definition: DataDependenceGraphBuilder.cc:1951
DataDependenceGraphBuilder::BBData
Definition: DataDependenceGraphBuilder.hh:127
llvm::AliasAnalysis
AAResults AliasAnalysis
Definition: DataDependenceGraphBuilder.hh:45
DataDependenceGraphBuilder::processTriggerMemoryAndFUStates
void processTriggerMemoryAndFUStates(MoveNode &moveNode, Operation &dop)
Definition: DataDependenceGraphBuilder.cc:1040
DataDependenceGraphBuilder::MoveNodeUseSet
LiveRangeData::MoveNodeUseSet MoveNodeUseSet
Definition: DataDependenceGraphBuilder.hh:105
DataDependenceGraphBuilder::specialRegisters_
SpecialRegisters specialRegisters_
contains stack pointer, RV and parameter registers.
Definition: DataDependenceGraphBuilder.hh:317
ControlFlowGraph
Definition: ControlFlowGraph.hh:100
TTAMachine::Machine
Definition: Machine.hh:73
LiveRangeData::MoveNodeUsePair
std::pair< TCEString, MoveNodeUse > MoveNodeUsePair
Definition: LiveRangeData.hh:58
DataDependenceGraphBuilder::BBDataMap
std::map< BasicBlockNode *, BBData * > BBDataMap
Definition: DataDependenceGraphBuilder.hh:143