blockfreq: Remove unnecessary template parameters
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 11 Apr 2014 23:21:02 +0000 (23:21 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 11 Apr 2014 23:21:02 +0000 (23:21 +0000)
Moves redundant template parameters into an implementation detail of
BlockFrequencyInfoImpl.

No functionality change.

<rdar://problem/14292693>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206084 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/BlockFrequencyInfo.h
include/llvm/Analysis/BlockFrequencyInfoImpl.h
include/llvm/CodeGen/MachineBlockFrequencyInfo.h

index 79be0177d6d4f3e75d2b36e0459addd84d7eeb26..3289a2823c0c13c35e33200460b3d76e791bcb46 100644 (file)
 namespace llvm {
 
 class BranchProbabilityInfo;
-template <class BlockT, class FunctionT, class BranchProbInfoT>
-class BlockFrequencyInfoImpl;
+template <class BlockT> class BlockFrequencyInfoImpl;
 
 /// BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to
 /// estimate IR basic block frequencies.
 class BlockFrequencyInfo : public FunctionPass {
-  typedef BlockFrequencyInfoImpl<BasicBlock, Function, BranchProbabilityInfo>
-  ImplType;
+  typedef BlockFrequencyInfoImpl<BasicBlock> ImplType;
   std::unique_ptr<ImplType> BFI;
 
 public:
index fa5e79994268bcf1413bddd0dbc70d30d06f843a..9edaa986250f876e440d9a3cbd02a36366e7c1b9 100644 (file)
 namespace llvm {
 
 
+class BranchProbabilityInfo;
 class BlockFrequencyInfo;
+class MachineBranchProbabilityInfo;
 class MachineBlockFrequencyInfo;
 
+namespace bfi_detail {
+template <class BlockT> struct TypeMap {};
+template <> struct TypeMap<BasicBlock> {
+  typedef BasicBlock BlockT;
+  typedef Function FunctionT;
+  typedef BranchProbabilityInfo BlockProbInfoT;
+};
+template <> struct TypeMap<MachineBasicBlock> {
+  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<class BlockT, class FunctionT, class BlockProbInfoT>
+template <class BT>
 class BlockFrequencyInfoImpl {
+  typedef typename bfi_detail::TypeMap<BT>::BlockT BlockT;
+  typedef typename bfi_detail::TypeMap<BT>::FunctionT FunctionT;
+  typedef typename bfi_detail::TypeMap<BT>::BlockProbInfoT BlockProbInfoT;
 
   DenseMap<const BlockT *, BlockFrequency> Freqs;
 
index fd8e1494cef3bfc9f39c61d2a96a20477b40e9dc..1aef689eb7a44b7712644e41c2d383c410bebe16 100644 (file)
@@ -22,14 +22,12 @@ namespace llvm {
 
 class MachineBasicBlock;
 class MachineBranchProbabilityInfo;
-template <class BlockT, class FunctionT, class BranchProbInfoT>
-class BlockFrequencyInfoImpl;
+template <class BlockT> class BlockFrequencyInfoImpl;
 
 /// MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation
 /// to estimate machine basic block frequencies.
 class MachineBlockFrequencyInfo : public MachineFunctionPass {
-  typedef BlockFrequencyInfoImpl<MachineBasicBlock, MachineFunction,
-                                 MachineBranchProbabilityInfo> ImplType;
+  typedef BlockFrequencyInfoImpl<MachineBasicBlock> ImplType;
   std::unique_ptr<ImplType> MBFI;
 
 public: