diff --git a/include/llvm/Analysis/BlockFrequencyInfo.h b/include/llvm/Analysis/BlockFrequencyInfo.h index 79be0177d6d..3289a2823c0 100644 --- a/include/llvm/Analysis/BlockFrequencyInfo.h +++ b/include/llvm/Analysis/BlockFrequencyInfo.h @@ -21,14 +21,12 @@ namespace llvm { class BranchProbabilityInfo; -template -class BlockFrequencyInfoImpl; +template class BlockFrequencyInfoImpl; /// BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to /// estimate IR basic block frequencies. class BlockFrequencyInfo : public FunctionPass { - typedef BlockFrequencyInfoImpl - ImplType; + typedef BlockFrequencyInfoImpl ImplType; std::unique_ptr BFI; public: diff --git a/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/include/llvm/Analysis/BlockFrequencyInfoImpl.h index fa5e7999426..9edaa986250 100644 --- a/include/llvm/Analysis/BlockFrequencyInfoImpl.h +++ b/include/llvm/Analysis/BlockFrequencyInfoImpl.h @@ -29,16 +29,35 @@ namespace llvm { +class BranchProbabilityInfo; class BlockFrequencyInfo; +class MachineBranchProbabilityInfo; class MachineBlockFrequencyInfo; +namespace bfi_detail { +template struct TypeMap {}; +template <> struct TypeMap { + typedef BasicBlock BlockT; + typedef Function FunctionT; + typedef BranchProbabilityInfo BlockProbInfoT; +}; +template <> struct TypeMap { + typedef MachineBasicBlock BlockT; + typedef MachineFunction FunctionT; + typedef MachineBranchProbabilityInfo BlockProbInfoT; +}; +} + /// BlockFrequencyInfoImpl implements block frequency algorithm for IR and /// Machine Instructions. Algorithm starts with value ENTRY_FREQ /// for the entry block and then propagates frequencies using branch weights /// from (Machine)BranchProbabilityInfo. LoopInfo is not required because /// algorithm can find "backedges" by itself. -template +template class BlockFrequencyInfoImpl { + typedef typename bfi_detail::TypeMap::BlockT BlockT; + typedef typename bfi_detail::TypeMap::FunctionT FunctionT; + typedef typename bfi_detail::TypeMap::BlockProbInfoT BlockProbInfoT; DenseMap Freqs; diff --git a/include/llvm/CodeGen/MachineBlockFrequencyInfo.h b/include/llvm/CodeGen/MachineBlockFrequencyInfo.h index fd8e1494cef..1aef689eb7a 100644 --- a/include/llvm/CodeGen/MachineBlockFrequencyInfo.h +++ b/include/llvm/CodeGen/MachineBlockFrequencyInfo.h @@ -22,14 +22,12 @@ namespace llvm { class MachineBasicBlock; class MachineBranchProbabilityInfo; -template -class BlockFrequencyInfoImpl; +template class BlockFrequencyInfoImpl; /// MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation /// to estimate machine basic block frequencies. class MachineBlockFrequencyInfo : public MachineFunctionPass { - typedef BlockFrequencyInfoImpl ImplType; + typedef BlockFrequencyInfoImpl ImplType; std::unique_ptr MBFI; public: