#include "llvm/Transforms/Utils/SplitModule.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/EquivalenceClasses.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/IR/Comdat.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalObject.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MD5.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <algorithm>
#include <cassert>
#include <iterator>
#include <memory>
#include <queue>
#include <utility>
#include <vector>
usingnamespacellvm;
#define DEBUG_TYPE …
namespace {
ClusterMapType;
ComdatMembersType;
ClusterIDMapType;
bool compareClusters(const std::pair<unsigned, unsigned> &A,
const std::pair<unsigned, unsigned> &B) { … }
BalancingQueueType;
}
static void addNonConstUser(ClusterMapType &GVtoClusterMap,
const GlobalValue *GV, const User *U) { … }
static void addAllGlobalValueUsers(ClusterMapType &GVtoClusterMap,
const GlobalValue *GV, const Value *V) { … }
static const GlobalObject *getGVPartitioningRoot(const GlobalValue *GV) { … }
static void findPartitions(Module &M, ClusterIDMapType &ClusterIDMap,
unsigned N) { … }
static void externalize(GlobalValue *GV) { … }
static bool isInPartition(const GlobalValue *GV, unsigned I, unsigned N) { … }
void llvm::SplitModule(
Module &M, unsigned N,
function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback,
bool PreserveLocals, bool RoundRobin) { … }