Go to the documentation of this file.
30 #ifndef DecoupledAnalysis_H
31 #define DecoupledAnalysis_H
33 #include "llvm/IR/PassManager.h"
34 #include "llvm/Analysis/LoopInfo.h"
35 #include "llvm/Analysis/LoopAnalysisManager.h"
36 #include "llvm/ADT/iterator_range.h"
37 #include "llvm/ADT/SmallVector.h"
38 #include "llvm/ADT/DenseMap.h"
85 void print(raw_ostream &OS)
const {
89 OS <<
"Error " << err_cause;
99 explicit operator bool() {
105 return mem_load.begin();
108 return mem_load.end();
110 inline iterator_range<load_iterator>
loads() {
111 return make_range(load_begin(), load_end());
115 return mem_store.begin();
118 return mem_store.end();
120 inline iterator_range<store_iterator>
stores() {
121 return make_range(store_begin(), store_end());
130 inline iterator_range<comp_iterator>
comps() {
131 return make_range(comp_begin(), comp_end());
135 return loop_invariant.begin();
138 return loop_invariant.end();
140 inline iterator_range<invar_iterator>
invars() {
141 return make_range(invars_begin(), invars_end());
157 return loop_invariant;
167 invar_skip_seq[node] = seq;
178 if (invar_skip_seq.find(node) != invar_skip_seq.end()) {
179 return &(invar_skip_seq[node]);
204 public AnalysisInfoMixin<DecoupledAnalysisPass> {
207 Result run(Loop &L, LoopAnalysisManager &AM,
208 LoopStandardAnalysisResults &AR);
210 friend AnalysisInfoMixin<DecoupledAnalysisPass>;
213 void traversal(SmallVector<LoadInst*> &LL, SmallVector<StoreInst*> &SL);
222 bool isPointerValue(LoadInst *I);
238 #endif //DecoupledAnalysis_H
~DecoupledAnalysis()
Definition: DecoupledAnalysis.hpp:52
Definition: OptionPlugin.cpp:128
MemStoreList::iterator store_iterator
Definition: DecoupledAnalysis.hpp:61
void setError(StringRef cause)
Definition: DecoupledAnalysis.hpp:80
iterator_range< load_iterator > loads()
Definition: DecoupledAnalysis.hpp:110
MemStoreList mem_store
Definition: DecoupledAnalysis.hpp:188
InvarList & get_invars()
Definition: DecoupledAnalysis.hpp:156
MemLoadList::iterator load_iterator
Definition: DecoupledAnalysis.hpp:60
CompList comp
Definition: DecoupledAnalysis.hpp:189
MemStoreList & get_stores()
Definition: DecoupledAnalysis.hpp:148
DecoupledAnalysis()
Definition: DecoupledAnalysis.hpp:51
invar_iterator invars_end()
Definition: DecoupledAnalysis.hpp:137
SmallVector< Value * > InvarList
Definition: DecoupledAnalysis.hpp:58
void setInvarSkipSequence(Value *node, SmallVector< Value * > seq)
Set the node traversal skip sequence for loop invariant nodes.
Definition: DecoupledAnalysis.hpp:166
StringRef err_cause
Definition: DecoupledAnalysis.hpp:191
MemLoadList & get_loads()
Definition: DecoupledAnalysis.hpp:144
Definition: AGVerifyPass.hpp:50
static AnalysisKey Key
Definition: DecoupledAnalysis.hpp:211
DenseMap< Value *, SmallVector< Value * > > invar_skip_seq
Definition: DecoupledAnalysis.hpp:193
MemLoadList mem_load
Definition: DecoupledAnalysis.hpp:187
SmallVector< LoadInst * > MemLoadList
Definition: DecoupledAnalysis.hpp:55
SmallVector< User * > CompList
Definition: DecoupledAnalysis.hpp:57
comp_iterator comp_end()
Definition: DecoupledAnalysis.hpp:127
A loop pass to analyze memory access for decoupling.
Definition: DecoupledAnalysis.hpp:203
An analysis result of memory access decoupling for loop kernel.
Definition: DecoupledAnalysis.hpp:49
comp_iterator comp_begin()
Definition: DecoupledAnalysis.hpp:124
SmallVector< StoreInst * > MemStoreList
Definition: DecoupledAnalysis.hpp:56
void setComp(CompList &&l)
Definition: DecoupledAnalysis.hpp:73
load_iterator load_end()
Definition: DecoupledAnalysis.hpp:107
iterator_range< comp_iterator > comps()
Definition: DecoupledAnalysis.hpp:130
invar_iterator invars_begin()
Definition: DecoupledAnalysis.hpp:134
InvarList::iterator invar_iterator
Definition: DecoupledAnalysis.hpp:63
CompList & get_comps()
Definition: DecoupledAnalysis.hpp:152
load_iterator load_begin()
Definition: DecoupledAnalysis.hpp:104
CompList::iterator comp_iterator
Definition: DecoupledAnalysis.hpp:62
store_iterator store_begin()
Definition: DecoupledAnalysis.hpp:114
iterator_range< invar_iterator > invars()
Definition: DecoupledAnalysis.hpp:140
store_iterator store_end()
Definition: DecoupledAnalysis.hpp:117
void setInvars(InvarList &&l)
Definition: DecoupledAnalysis.hpp:76
void setMemLoad(MemLoadList &&l)
Definition: DecoupledAnalysis.hpp:66
void setMemStore(MemStoreList &&l)
Definition: DecoupledAnalysis.hpp:70
void print(raw_ostream &OS) const
Definition: DecoupledAnalysis.hpp:85
iterator_range< store_iterator > stores()
Definition: DecoupledAnalysis.hpp:120
InvarList loop_invariant
Definition: DecoupledAnalysis.hpp:190
SmallVector< Value * > * getSkipSequence(Value *node)
get the node traversal skip sequence
Definition: DecoupledAnalysis.hpp:177