9 #include <unordered_set>
11 #include "core/inst_visitor.h"
12 #include "core/target.h"
13 #include "passes/tags/tagged_type.h"
19 class RegisterAnalysis;
20 struct DominatorCache;
56 const std::vector<std::pair<TaggedType, Block *>> &branches
76 void VisitMemoryLoadInst(MemoryLoadInst &i)
override;
77 void VisitMemoryStoreInst(MemoryStoreInst &i)
override;
78 void VisitSelectInst(SelectInst &i)
override;
79 void VisitSubInst(SubInst &i)
override;
80 void VisitAddInst(AddInst &i)
override;
81 void VisitAndInst(AndInst &i)
override;
82 void VisitOrInst(OrInst &i)
override;
83 void VisitXorInst(XorInst &i)
override;
84 void VisitCmpInst(CmpInst &i)
override;
85 void VisitMovInst(
MovInst &i)
override;
86 void VisitPhiInst(
PhiInst &phi)
override;
87 void VisitArgInst(ArgInst &arg)
override;
88 void VisitCallSite(CallSite &site)
override;
89 void VisitJumpCondInst(JumpCondInst &site)
override;
90 void VisitInst(
Inst &i)
override {}
102 void RefineInequality(
114 std::pair<std::set<Block *>, std::set<Block *>>
117 const llvm::SmallPtrSetImpl<const Block *> &defs
123 const std::unordered_map<const Block *, TaggedType> &splits
132 bool banPolymorphism_;
136 std::queue<Inst *> queue_;
138 std::unordered_set<Inst *> inQueue_;