• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===- BranchIslandFactory.h ----------------------------------------------===//
2 //
3 //                     The MCLinker Project
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 #ifndef MCLD_LD_BRANCH_ISLAND_FACTORY_H
10 #define MCLD_LD_BRANCH_ISLAND_FACTORY_H
11 #ifdef ENABLE_UNITTEST
12 #include <gtest.h>
13 #endif
14 
15 #include <llvm/Support/DataTypes.h>
16 #include <mcld/Support/GCFactory.h>
17 #include <mcld/LD/BranchIsland.h>
18 
19 namespace mcld
20 {
21 
22 class Fragment;
23 
24 /** \class BranchIslandFactory
25  *  \brief
26  *
27  */
28 class BranchIslandFactory : public GCFactory<BranchIsland, 0>
29 {
30 public:
31   /// ctor
32   /// @param pMaxBranchRange - the max branch range of the target backend
33   /// @param pMaxIslandSize - a predifned value (64KB here) to decide the max
34   ///                         size of the island
35   BranchIslandFactory(uint64_t pMaxBranchRange,
36                       uint64_t pMaxIslandSize = 65536U);
37 
38   ~BranchIslandFactory();
39 
40   /// produce - produce a island for the given fragment
41   /// @param pFragment - the fragment needs a branch island
42   BranchIsland* produce(Fragment& pFragment);
43 
44   /// find - find a island for the given fragment
45   /// @param pFragment - the fragment needs a branch isladn
46   BranchIsland* find(const Fragment& pFragment);
47 
48 private:
49   uint64_t m_MaxBranchRange;
50   uint64_t m_MaxIslandSize;
51 };
52 
53 } // namespace of mcld
54 
55 #endif
56 
57