forked from OSchip/llvm-project
sketch out a new early cse pass. No functionality yet.
llvm-svn: 122713
This commit is contained in:
parent
9c69406f2b
commit
704541bb23
|
@ -92,6 +92,7 @@ void initializeDomViewerPass(PassRegistry&);
|
|||
void initializeDominanceFrontierPass(PassRegistry&);
|
||||
void initializeDominatorTreePass(PassRegistry&);
|
||||
void initializeEdgeProfilerPass(PassRegistry&);
|
||||
void initializeEarlyCSEPass(PassRegistry&);
|
||||
void initializeExpandISelPseudosPass(PassRegistry&);
|
||||
void initializeFindUsedTypesPass(PassRegistry&);
|
||||
void initializeFunctionAttrsPass(PassRegistry&);
|
||||
|
|
|
@ -128,6 +128,7 @@ namespace {
|
|||
(void) llvm::createUnifyFunctionExitNodesPass();
|
||||
(void) llvm::createInstCountPass();
|
||||
(void) llvm::createCodeGenPreparePass();
|
||||
(void) llvm::createEarlyCSEPass();
|
||||
(void) llvm::createGVNPass();
|
||||
(void) llvm::createMemCpyOptPass();
|
||||
(void) llvm::createLoopDeletionPass();
|
||||
|
|
|
@ -258,6 +258,13 @@ FunctionPass *createBlockPlacementPass();
|
|||
Pass *createLCSSAPass();
|
||||
extern char &LCSSAID;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// EarlyCSE - This pass performs a simple and fast CSE pass over the dominator
|
||||
// tree.
|
||||
//
|
||||
FunctionPass *createEarlyCSEPass();
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// GVN - This pass performs global value numbering and redundant load
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
//===- EarlyCSE.cpp - Simple and fast CSE pass ----------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This pass performs a simple dominator tree walk that eliminates trivially
|
||||
// redundant instructions.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define DEBUG_TYPE "early-cse"
|
||||
#include "llvm/Transforms/Scalar.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Pass.h"
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
/// EarlyCSE - This pass does a simple depth-first walk over the dominator
|
||||
/// tree, eliminating trivially redundant instructions and using instsimplify
|
||||
/// to canonicalize things as it goes. It is intended to be fast and catch
|
||||
/// obvious cases so that instcombine and other passes are more effective. It
|
||||
/// is expected that a later pass of GVN will catch the interesting/hard
|
||||
/// cases.
|
||||
class EarlyCSE : public FunctionPass {
|
||||
public:
|
||||
static char ID;
|
||||
explicit EarlyCSE()
|
||||
: FunctionPass(ID) {
|
||||
initializeEarlyCSEPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
bool runOnFunction(Function &F);
|
||||
|
||||
private:
|
||||
// This transformation requires dominator postdominator info
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<DominatorTree>();
|
||||
AU.setPreservesCFG();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
char EarlyCSE::ID = 0;
|
||||
|
||||
// createEarlyCSEPass - The public interface to this file.
|
||||
FunctionPass *llvm::createEarlyCSEPass() {
|
||||
return new EarlyCSE();
|
||||
}
|
||||
|
||||
INITIALIZE_PASS_BEGIN(EarlyCSE, "early-cse", "Early CSE", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(EarlyCSE, "early-cse", "Early CSE", false, false)
|
||||
|
||||
bool EarlyCSE::runOnFunction(Function &F) {
|
||||
DominatorTree &DT = getAnalysis<DominatorTree>();
|
||||
(void)DT;
|
||||
return false;
|
||||
}
|
|
@ -36,6 +36,7 @@ void llvm::initializeScalarOpts(PassRegistry &Registry) {
|
|||
initializeDSEPass(Registry);
|
||||
initializeGEPSplitterPass(Registry);
|
||||
initializeGVNPass(Registry);
|
||||
initializeEarlyCSEPass(Registry);
|
||||
initializeIndVarSimplifyPass(Registry);
|
||||
initializeJumpThreadingPass(Registry);
|
||||
initializeLICMPass(Registry);
|
||||
|
|
Loading…
Reference in New Issue