//===- BranchIslandFactory.h ----------------------------------------------===//
//
// The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef MCLD_LD_BRANCH_ISLAND_FACTORY_H
#define MCLD_LD_BRANCH_ISLAND_FACTORY_H
#ifdef ENABLE_UNITTEST
#include <gtest.h>
#endif
#include <llvm/Support/DataTypes.h>
#include <mcld/Support/GCFactory.h>
#include <mcld/LD/BranchIsland.h>
namespace mcld
{
class Fragment;
/** \class BranchIslandFactory
* \brief
*
*/
class BranchIslandFactory : public GCFactory<BranchIsland, 0>
{
public:
/// ctor
/// @param pMaxBranchRange - the max branch range of the target backend
/// @param pMaxIslandSize - a predifned value (64KB here) to decide the max
/// size of the island
BranchIslandFactory(uint64_t pMaxBranchRange,
uint64_t pMaxIslandSize = 65536U);
~BranchIslandFactory();
/// produce - produce a island for the given fragment
/// @param pFragment - the fragment needs a branch island
BranchIsland* produce(Fragment& pFragment);
/// find - find a island for the given fragment
/// @param pFragment - the fragment needs a branch isladn
BranchIsland* find(const Fragment& pFragment);
private:
uint64_t m_MaxBranchRange;
uint64_t m_MaxIslandSize;
};
} // namespace of mcld
#endif