diff options
Diffstat (limited to 'include/llvm/CodeGen')
-rw-r--r-- | include/llvm/CodeGen/BasicTTIImpl.h | 12 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineDominanceFrontier.h | 31 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachineDominators.h | 15 | ||||
-rw-r--r-- | include/llvm/CodeGen/MachinePostDominators.h | 2 |
4 files changed, 35 insertions, 25 deletions
diff --git a/include/llvm/CodeGen/BasicTTIImpl.h b/include/llvm/CodeGen/BasicTTIImpl.h index b59fd60e8aed..633107024792 100644 --- a/include/llvm/CodeGen/BasicTTIImpl.h +++ b/include/llvm/CodeGen/BasicTTIImpl.h @@ -155,6 +155,18 @@ public: return BaseT::getGEPCost(PointeeType, Ptr, Operands); } + int getExtCost(const Instruction *I, const Value *Src) { + if (getTLI()->isExtFree(I)) + return TargetTransformInfo::TCC_Free; + + if (isa<ZExtInst>(I) || isa<SExtInst>(I)) + if (const LoadInst *LI = dyn_cast<LoadInst>(Src)) + if (getTLI()->isExtLoad(LI, I, DL)) + return TargetTransformInfo::TCC_Free; + + return TargetTransformInfo::TCC_Basic; + } + unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy, ArrayRef<const Value *> Arguments) { return BaseT::getIntrinsicCost(IID, RetTy, Arguments); diff --git a/include/llvm/CodeGen/MachineDominanceFrontier.h b/include/llvm/CodeGen/MachineDominanceFrontier.h index 370ffbe4862e..6efeefd9a721 100644 --- a/include/llvm/CodeGen/MachineDominanceFrontier.h +++ b/include/llvm/CodeGen/MachineDominanceFrontier.h @@ -23,27 +23,24 @@ class MachineDominanceFrontier : public MachineFunctionPass { ForwardDominanceFrontierBase<MachineBasicBlock> Base; public: - using DomTreeT = DominatorTreeBase<MachineBasicBlock>; - using DomTreeNodeT = DomTreeNodeBase<MachineBasicBlock>; - using DomSetType = DominanceFrontierBase<MachineBasicBlock>::DomSetType; - using iterator = DominanceFrontierBase<MachineBasicBlock>::iterator; - using const_iterator = - DominanceFrontierBase<MachineBasicBlock>::const_iterator; + using DomTreeT = DomTreeBase<MachineBasicBlock>; + using DomTreeNodeT = DomTreeNodeBase<MachineBasicBlock>; + using DomSetType = DominanceFrontierBase<MachineBasicBlock, false>::DomSetType; + using iterator = DominanceFrontierBase<MachineBasicBlock, false>::iterator; + using const_iterator = + DominanceFrontierBase<MachineBasicBlock, false>::const_iterator; - MachineDominanceFrontier(const MachineDominanceFrontier &) = delete; - MachineDominanceFrontier & - operator=(const MachineDominanceFrontier &) = delete; + MachineDominanceFrontier(const MachineDominanceFrontier &) = delete; + MachineDominanceFrontier &operator=(const MachineDominanceFrontier &) = delete; - static char ID; + static char ID; - MachineDominanceFrontier(); + MachineDominanceFrontier(); - DominanceFrontierBase<MachineBasicBlock> &getBase() { - return Base; - } + DominanceFrontierBase<MachineBasicBlock, false> &getBase() { return Base; } - inline const std::vector<MachineBasicBlock*> &getRoots() const { - return Base.getRoots(); + inline const std::vector<MachineBasicBlock *> &getRoots() const { + return Base.getRoots(); } MachineBasicBlock *getRoot() const { @@ -98,7 +95,7 @@ public: return Base.compareDomSet(DS1, DS2); } - bool compare(DominanceFrontierBase<MachineBasicBlock> &Other) const { + bool compare(DominanceFrontierBase<MachineBasicBlock, false> &Other) const { return Base.compare(Other); } diff --git a/include/llvm/CodeGen/MachineDominators.h b/include/llvm/CodeGen/MachineDominators.h index 74a7c3ea04ae..8bf98f606495 100644 --- a/include/llvm/CodeGen/MachineDominators.h +++ b/include/llvm/CodeGen/MachineDominators.h @@ -28,13 +28,15 @@ namespace llvm { -template<> -inline void DominatorTreeBase<MachineBasicBlock>::addRoot(MachineBasicBlock* MBB) { +template <> +inline void DominatorTreeBase<MachineBasicBlock, false>::addRoot( + MachineBasicBlock *MBB) { this->Roots.push_back(MBB); } extern template class DomTreeNodeBase<MachineBasicBlock>; -extern template class DominatorTreeBase<MachineBasicBlock>; +extern template class DominatorTreeBase<MachineBasicBlock, false>; // DomTree +extern template class DominatorTreeBase<MachineBasicBlock, true>; // PostDomTree using MachineDomTreeNode = DomTreeNodeBase<MachineBasicBlock>; @@ -65,7 +67,7 @@ class MachineDominatorTree : public MachineFunctionPass { mutable SmallSet<MachineBasicBlock *, 32> NewBBs; /// The DominatorTreeBase that is used to compute a normal dominator tree - std::unique_ptr<DominatorTreeBase<MachineBasicBlock>> DT; + std::unique_ptr<DomTreeBase<MachineBasicBlock>> DT; /// \brief Apply all the recorded critical edges to the DT. /// This updates the underlying DT information in a way that uses @@ -79,9 +81,8 @@ public: MachineDominatorTree(); - DominatorTreeBase<MachineBasicBlock> &getBase() { - if (!DT) - DT.reset(new DominatorTreeBase<MachineBasicBlock>(false)); + DomTreeBase<MachineBasicBlock> &getBase() { + if (!DT) DT.reset(new DomTreeBase<MachineBasicBlock>()); applySplitCriticalEdges(); return *DT; } diff --git a/include/llvm/CodeGen/MachinePostDominators.h b/include/llvm/CodeGen/MachinePostDominators.h index 70bdb191ad34..d29d2d85cb0a 100644 --- a/include/llvm/CodeGen/MachinePostDominators.h +++ b/include/llvm/CodeGen/MachinePostDominators.h @@ -26,7 +26,7 @@ namespace llvm { /// struct MachinePostDominatorTree : public MachineFunctionPass { private: - DominatorTreeBase<MachineBasicBlock> *DT; + PostDomTreeBase<MachineBasicBlock> *DT; public: static char ID; |