7 #include <llvm/ADT/PostOrderIterator.h>
9 #include "core/block.h"
10 #include "core/cast.h"
11 #include "core/clone.h"
12 #include "core/func.h"
43 Block *Map(
Block *block)
override {
return blocks_[block]; }
59 void DuplicateBlocks();
65 const bool isTailCall_;
67 const std::vector<Type> types_;
79 llvm::DenseMap<unsigned, unsigned> frameIndices_;
87 std::vector<Ref<PhiInst>> raisePhis_;
89 std::vector<Ref<PhiInst>> landPhis_;
91 std::vector<Ref<PhiInst>> phis_;
95 llvm::SmallVector<Ref<Inst>, 8> args_;
97 llvm::DenseMap<Block *, Block *> blocks_;
99 std::unordered_map<Ref<Inst>,
Ref<Inst>> insts_;
101 llvm::ReversePostOrderTraversal<Func *> rpot_;