#include "llvm/Transforms/Utils/Mem2Reg.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/PassManager.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Transforms/Utils.h"
#include "llvm/Transforms/Utils/PromoteMemToReg.h"
#include <vector>
usingnamespacellvm;
#define DEBUG_TYPE …
STATISTIC(NumPromoted, "Number of alloca's promoted");
static bool promoteMemoryToRegister(Function &F, DominatorTree &DT,
AssumptionCache &AC) { … }
PreservedAnalyses PromotePass::run(Function &F, FunctionAnalysisManager &AM) { … }
namespace {
struct PromoteLegacyPass : public FunctionPass { … };
}
char PromoteLegacyPass::ID = …;
INITIALIZE_PASS_BEGIN(PromoteLegacyPass, "mem2reg", "Promote Memory to "
"Register",
false, false)
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
INITIALIZE_PASS_END(PromoteLegacyPass, "mem2reg", "Promote Memory to Register",
false, false)
FunctionPass *llvm::createPromoteMemoryToRegisterPass() { … }