#include "llvm/Transforms/Scalar/InstSimplifyPass.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils/Local.h"
usingnamespacellvm;
#define DEBUG_TYPE …
STATISTIC(NumSimplified, "Number of redundant instructions removed");
static bool runImpl(Function &F, const SimplifyQuery &SQ) { … }
namespace {
struct InstSimplifyLegacyPass : public FunctionPass { … };
}
char InstSimplifyLegacyPass::ID = …;
INITIALIZE_PASS_BEGIN(InstSimplifyLegacyPass, "instsimplify",
"Remove redundant instructions", false, false)
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
INITIALIZE_PASS_END(InstSimplifyLegacyPass, "instsimplify",
"Remove redundant instructions", false, false)
FunctionPass *llvm::createInstSimplifyLegacyPass() { … }
PreservedAnalyses InstSimplifyPass::run(Function &F,
FunctionAnalysisManager &AM) { … }