llir-opt
0.0.1
Low-Level Post-Link Optimiser for OCaml and C
|
8 #include <unordered_set>
9 #include <unordered_map>
10 #include <llvm/Support/raw_ostream.h>
12 #include "core/inst_visitor.h"
13 #include "core/target.h"
14 #include "core/analysis/dominator.h"
15 #include "passes/tags/tagged_type.h"
42 , banPolymorphism_(banPolymorphism)
50 void dump(llvm::raw_ostream &os = llvm::errs());
55 auto it = types_.find(ref);
56 return it == types_.end() ? TaggedType::Unknown() : it->second;
81 bool Define(
Ref<Inst> inst,
const TaggedType &type);
83 bool Refine(
Ref<Inst> inst,
const TaggedType &type);
85 bool Refine(
Inst &inst,
const TaggedType &type)
92 return defs_.count(inst) != 0;
101 static bool IsPolymorphic(
const Inst &inst);
105 DominatorCache &GetDoms(
Func &func)
107 auto it = doms_.emplace(&func,
nullptr);
109 it.first->second.reset(
new DominatorCache(func));
111 return *it.first->second;
114 DominatorCache &RebuildDoms(
Func &func)
116 auto it = doms_.emplace(&func,
nullptr);
117 it.first->second.reset(
new DominatorCache(func));
118 return *it.first->second;
127 bool banPolymorphism_;
129 std::queue<Inst *> forwardQueue_;
131 std::queue<PhiInst *> forwardPhiQueue_;
133 std::unordered_set<Inst *> inForwardQueue_;
135 std::queue<Func *> backwardQueue_;
137 std::unordered_set<Func *> inBackwardQueue_;
139 std::queue<Inst *> refineQueue_;
141 std::unordered_set<Inst *> inRefineQueue_;
143 std::unordered_map<ConstRef<Inst>, TaggedType> types_;
146 < std::pair<const Func *, unsigned>
147 , std::vector<ArgInst *>
150 std::unordered_map<const Func *, std::vector<TaggedType>> rets_;
152 std::unordered_map<Func *, std::unique_ptr<DominatorCache>> doms_;
154 std::unordered_set<Ref<Inst>> defs_;
Definition: dominator.h:55
Ref< Inst > GetSubValue(unsigned i)
Returns the ith sub-value.
Definition: inst.h:138
Definition: dominator.h:98
Definition: dominator.h:89
Definition: dominator.h:22