mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-28 06:00:30 +00:00
Move stuff out of the Optimizations directories into the appropriate Transforms
directories. Eliminate the opt namespace. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1520 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ae96151970
commit
59b6b8e0b3
@ -11,8 +11,6 @@
|
|||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
class CallInst;
|
class CallInst;
|
||||||
|
|
||||||
namespace opt {
|
|
||||||
|
|
||||||
struct MethodInlining : public MethodPass {
|
struct MethodInlining : public MethodPass {
|
||||||
// DoMethodInlining - Use a heuristic based approach to inline methods that
|
// DoMethodInlining - Use a heuristic based approach to inline methods that
|
||||||
// seem to look good.
|
// seem to look good.
|
||||||
@ -37,6 +35,4 @@ struct MethodInlining : public MethodPass {
|
|||||||
bool InlineMethod(CallInst *C);
|
bool InlineMethod(CallInst *C);
|
||||||
bool InlineMethod(BasicBlock::iterator CI); // *CI must be CallInst
|
bool InlineMethod(BasicBlock::iterator CI); // *CI must be CallInst
|
||||||
|
|
||||||
} // end namespace opt
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
class TerminatorInst;
|
class TerminatorInst;
|
||||||
|
|
||||||
namespace opt {
|
|
||||||
|
|
||||||
struct ConstantPropogation : public MethodPass {
|
struct ConstantPropogation : public MethodPass {
|
||||||
// doConstantPropogation - Do trivial constant propogation and expression
|
// doConstantPropogation - Do trivial constant propogation and expression
|
||||||
// folding
|
// folding
|
||||||
@ -47,6 +45,4 @@ struct SCCPPass : public MethodPass {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End Namespace opt
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
|
|
||||||
namespace opt {
|
|
||||||
|
|
||||||
struct DeadCodeElimination : public MethodPass {
|
struct DeadCodeElimination : public MethodPass {
|
||||||
// External Interface:
|
// External Interface:
|
||||||
//
|
//
|
||||||
@ -66,6 +64,4 @@ struct AgressiveDCE : public MethodPass {
|
|||||||
//
|
//
|
||||||
bool SimplifyCFG(Method::iterator &BBIt);
|
bool SimplifyCFG(Method::iterator &BBIt);
|
||||||
|
|
||||||
} // End namespace opt
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
|
|
||||||
namespace opt {
|
|
||||||
|
|
||||||
struct SymbolStripping : public MethodPass {
|
struct SymbolStripping : public MethodPass {
|
||||||
// doSymbolStripping - Remove all symbolic information from a method
|
// doSymbolStripping - Remove all symbolic information from a method
|
||||||
//
|
//
|
||||||
@ -38,5 +36,4 @@ struct FullSymbolStripping : public MethodPass {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // End namespace opt
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,12 +8,11 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Analysis/Expressions.h"
|
#include "llvm/Analysis/Expressions.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace opt; // Get all the constant handling stuff
|
|
||||||
using namespace analysis;
|
using namespace analysis;
|
||||||
|
|
||||||
ExprType::ExprType(Value *Val) {
|
ExprType::ExprType(Value *Val) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
LEVEL = ..
|
LEVEL = ..
|
||||||
DIRS = VMCore Analysis Transforms Assembly Bytecode Optimizations Support CodeGen Target
|
DIRS = VMCore Analysis Transforms Assembly Bytecode Support CodeGen Target
|
||||||
|
|
||||||
include $(LEVEL)/Makefile.common
|
include $(LEVEL)/Makefile.common
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@
|
|||||||
#include "llvm/iPHINode.h"
|
#include "llvm/iPHINode.h"
|
||||||
#include "llvm/iMemory.h"
|
#include "llvm/iMemory.h"
|
||||||
#include "llvm/ConstantVals.h"
|
#include "llvm/ConstantVals.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Optimizations/DCE.h"
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
#include "llvm/Analysis/Expressions.h"
|
#include "llvm/Analysis/Expressions.h"
|
||||||
#include "Support/STLExtras.h"
|
#include "Support/STLExtras.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
@ -190,7 +190,7 @@ bool ExpressionConvertableToType(Value *V, const Type *Ty,
|
|||||||
// it can convert the value...
|
// it can convert the value...
|
||||||
//
|
//
|
||||||
if (Constant *CPV = dyn_cast<Constant>(V))
|
if (Constant *CPV = dyn_cast<Constant>(V))
|
||||||
if (opt::ConstantFoldCastInstruction(CPV, Ty))
|
if (ConstantFoldCastInstruction(CPV, Ty))
|
||||||
return true; // Don't worry about deallocating, it's a constant.
|
return true; // Don't worry about deallocating, it's a constant.
|
||||||
|
|
||||||
return false; // Otherwise, we can't convert!
|
return false; // Otherwise, we can't convert!
|
||||||
@ -369,7 +369,7 @@ Value *ConvertExpressionToType(Value *V, const Type *Ty, ValueMapCache &VMC) {
|
|||||||
if (Constant *CPV = cast<Constant>(V)) {
|
if (Constant *CPV = cast<Constant>(V)) {
|
||||||
// Constants are converted by constant folding the cast that is required.
|
// Constants are converted by constant folding the cast that is required.
|
||||||
// We assume here that all casts are implemented for constant prop.
|
// We assume here that all casts are implemented for constant prop.
|
||||||
Value *Result = opt::ConstantFoldCastInstruction(CPV, Ty);
|
Value *Result = ConstantFoldCastInstruction(CPV, Ty);
|
||||||
assert(Result && "ConstantFoldCastInstruction Failed!!!");
|
assert(Result && "ConstantFoldCastInstruction Failed!!!");
|
||||||
assert(Result->getType() == Ty && "Const prop of cast failed!");
|
assert(Result->getType() == Ty && "Const prop of cast failed!");
|
||||||
|
|
||||||
|
@ -9,17 +9,16 @@
|
|||||||
// . Has a smart heuristic for when to inline a method
|
// . Has a smart heuristic for when to inline a method
|
||||||
//
|
//
|
||||||
// Notice that:
|
// Notice that:
|
||||||
// * This pass has a habit of introducing duplicated constant pool entries,
|
// * This pass opens up a lot of opportunities for constant propogation. It
|
||||||
// and also opens up a lot of opportunities for constant propogation. It is
|
// is a good idea to to run a constant propogation pass, then a DCE pass
|
||||||
// a good idea to to run a constant propogation pass, then a DCE pass
|
|
||||||
// sometime after running this pass.
|
// sometime after running this pass.
|
||||||
//
|
//
|
||||||
// TODO: Currently this throws away all of the symbol names in the method being
|
// TODO: Currently this throws away all of the symbol names in the method being
|
||||||
// inlined to try to avoid name clashes. Use a name if it's not taken
|
// inlined. This shouldn't happen.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/MethodInlining.h"
|
#include "llvm/Transforms/MethodInlining.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/iTerminators.h"
|
#include "llvm/iTerminators.h"
|
||||||
@ -32,8 +31,6 @@ using std::cerr;
|
|||||||
|
|
||||||
#include "llvm/Assembly/Writer.h"
|
#include "llvm/Assembly/Writer.h"
|
||||||
|
|
||||||
using namespace opt;
|
|
||||||
|
|
||||||
// RemapInstruction - Convert the instruction operands from referencing the
|
// RemapInstruction - Convert the instruction operands from referencing the
|
||||||
// current values into those specified by ValueMap.
|
// current values into those specified by ValueMap.
|
||||||
//
|
//
|
||||||
@ -65,7 +62,7 @@ static inline void RemapInstruction(Instruction *I,
|
|||||||
// exists in the instruction stream. Similiarly this will inline a recursive
|
// exists in the instruction stream. Similiarly this will inline a recursive
|
||||||
// method by one level.
|
// method by one level.
|
||||||
//
|
//
|
||||||
bool opt::InlineMethod(BasicBlock::iterator CIIt) {
|
bool InlineMethod(BasicBlock::iterator CIIt) {
|
||||||
assert(isa<CallInst>(*CIIt) && "InlineMethod only works on CallInst nodes!");
|
assert(isa<CallInst>(*CIIt) && "InlineMethod only works on CallInst nodes!");
|
||||||
assert((*CIIt)->getParent() && "Instruction not embedded in basic block!");
|
assert((*CIIt)->getParent() && "Instruction not embedded in basic block!");
|
||||||
assert((*CIIt)->getParent()->getParent() && "Instruction not in method!");
|
assert((*CIIt)->getParent()->getParent() && "Instruction not in method!");
|
||||||
@ -207,7 +204,7 @@ bool opt::InlineMethod(BasicBlock::iterator CIIt) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool opt::InlineMethod(CallInst *CI) {
|
bool InlineMethod(CallInst *CI) {
|
||||||
assert(CI->getParent() && "CallInst not embeded in BasicBlock!");
|
assert(CI->getParent() && "CallInst not embeded in BasicBlock!");
|
||||||
BasicBlock *PBB = CI->getParent();
|
BasicBlock *PBB = CI->getParent();
|
||||||
|
|
||||||
@ -248,7 +245,7 @@ static inline bool DoMethodInlining(BasicBlock *BB) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool opt::MethodInlining::doMethodInlining(Method *M) {
|
bool MethodInlining::doMethodInlining(Method *M) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
|
||||||
// Loop through now and inline instructions a basic block at a time...
|
// Loop through now and inline instructions a basic block at a time...
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
#include "llvm/iOther.h"
|
#include "llvm/iOther.h"
|
||||||
#include "llvm/iMemory.h"
|
#include "llvm/iMemory.h"
|
||||||
#include "llvm/ConstantVals.h"
|
#include "llvm/ConstantVals.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
#include "llvm/Optimizations/DCE.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Optimizations/ConstantProp.h"
|
#include "llvm/Transforms/Scalar/ConstantProp.h"
|
||||||
#include "llvm/Analysis/Expressions.h"
|
#include "llvm/Analysis/Expressions.h"
|
||||||
#include "Support/STLExtras.h"
|
#include "Support/STLExtras.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -413,8 +413,8 @@ static bool DoRaisePass(Method *M) {
|
|||||||
#if DEBUG_PEEPHOLE_INSTS
|
#if DEBUG_PEEPHOLE_INSTS
|
||||||
cerr << "Processing: " << *BI;
|
cerr << "Processing: " << *BI;
|
||||||
#endif
|
#endif
|
||||||
if (opt::DeadCodeElimination::dceInstruction(BIL, BI) ||
|
if (DeadCodeElimination::dceInstruction(BIL, BI) ||
|
||||||
opt::ConstantPropogation::doConstantPropogation(BB, BI)) {
|
ConstantPropogation::doConstantPropogation(BB, BI)) {
|
||||||
Changed = true;
|
Changed = true;
|
||||||
#ifdef DEBUG_PEEPHOLE_INSTS
|
#ifdef DEBUG_PEEPHOLE_INSTS
|
||||||
cerr << "DeadCode Elinated!\n";
|
cerr << "DeadCode Elinated!\n";
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/DCE.h"
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
#include "llvm/Instruction.h"
|
#include "llvm/Instruction.h"
|
||||||
#include "llvm/Type.h"
|
#include "llvm/Type.h"
|
||||||
#include "llvm/Analysis/Dominators.h"
|
#include "llvm/Analysis/Dominators.h"
|
||||||
@ -297,7 +297,7 @@ BasicBlock *ADCE::fixupCFG(BasicBlock *BB, std::set<BasicBlock*> &VisitedBlocks,
|
|||||||
|
|
||||||
// doADCE - Execute the Agressive Dead Code Elimination Algorithm
|
// doADCE - Execute the Agressive Dead Code Elimination Algorithm
|
||||||
//
|
//
|
||||||
bool opt::AgressiveDCE::doADCE(Method *M) {
|
bool AgressiveDCE::doADCE(Method *M) {
|
||||||
if (M->isExternal()) return false;
|
if (M->isExternal()) return false;
|
||||||
ADCE DCE(M);
|
ADCE DCE(M);
|
||||||
return DCE.doADCE();
|
return DCE.doADCE();
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/ConstantProp.h"
|
#include "llvm/Transforms/Scalar/ConstantProp.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
@ -34,8 +34,7 @@
|
|||||||
inline static bool
|
inline static bool
|
||||||
ConstantFoldUnaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
ConstantFoldUnaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
||||||
UnaryOperator *Op, Constant *D) {
|
UnaryOperator *Op, Constant *D) {
|
||||||
Constant *ReplaceWith =
|
Constant *ReplaceWith = ConstantFoldUnaryInstruction(Op->getOpcode(), D);
|
||||||
opt::ConstantFoldUnaryInstruction(Op->getOpcode(), D);
|
|
||||||
|
|
||||||
if (!ReplaceWith) return false; // Nothing new to change...
|
if (!ReplaceWith) return false; // Nothing new to change...
|
||||||
|
|
||||||
@ -57,8 +56,7 @@ ConstantFoldUnaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
|||||||
inline static bool
|
inline static bool
|
||||||
ConstantFoldCast(BasicBlock *BB, BasicBlock::iterator &II,
|
ConstantFoldCast(BasicBlock *BB, BasicBlock::iterator &II,
|
||||||
CastInst *CI, Constant *D) {
|
CastInst *CI, Constant *D) {
|
||||||
Constant *ReplaceWith =
|
Constant *ReplaceWith = ConstantFoldCastInstruction(D, CI->getType());
|
||||||
opt::ConstantFoldCastInstruction(D, CI->getType());
|
|
||||||
|
|
||||||
if (!ReplaceWith) return false; // Nothing new to change...
|
if (!ReplaceWith) return false; // Nothing new to change...
|
||||||
|
|
||||||
@ -81,8 +79,7 @@ inline static bool
|
|||||||
ConstantFoldBinaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
ConstantFoldBinaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
||||||
BinaryOperator *Op,
|
BinaryOperator *Op,
|
||||||
Constant *D1, Constant *D2) {
|
Constant *D1, Constant *D2) {
|
||||||
Constant *ReplaceWith =
|
Constant *ReplaceWith = ConstantFoldBinaryInstruction(Op->getOpcode(), D1,D2);
|
||||||
opt::ConstantFoldBinaryInstruction(Op->getOpcode(), D1, D2);
|
|
||||||
if (!ReplaceWith) return false; // Nothing new to change...
|
if (!ReplaceWith) return false; // Nothing new to change...
|
||||||
|
|
||||||
// Replaces all of the uses of a variable with uses of the constant.
|
// Replaces all of the uses of a variable with uses of the constant.
|
||||||
@ -104,7 +101,7 @@ ConstantFoldBinaryInst(BasicBlock *BB, BasicBlock::iterator &II,
|
|||||||
// constant value, convert it into an unconditional branch to the constant
|
// constant value, convert it into an unconditional branch to the constant
|
||||||
// destination.
|
// destination.
|
||||||
//
|
//
|
||||||
bool opt::ConstantFoldTerminator(TerminatorInst *T) {
|
bool ConstantFoldTerminator(TerminatorInst *T) {
|
||||||
// Branch - See if we are conditional jumping on constant
|
// Branch - See if we are conditional jumping on constant
|
||||||
if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
|
if (BranchInst *BI = dyn_cast<BranchInst>(T)) {
|
||||||
if (BI->isUnconditional()) return false; // Can't optimize uncond branch
|
if (BI->isUnconditional()) return false; // Can't optimize uncond branch
|
||||||
@ -156,8 +153,8 @@ bool opt::ConstantFoldTerminator(TerminatorInst *T) {
|
|||||||
// ConstantFoldInstruction - If an instruction references constants, try to fold
|
// ConstantFoldInstruction - If an instruction references constants, try to fold
|
||||||
// them together...
|
// them together...
|
||||||
//
|
//
|
||||||
bool opt::ConstantPropogation::doConstantPropogation(BasicBlock *BB,
|
bool ConstantPropogation::doConstantPropogation(BasicBlock *BB,
|
||||||
BasicBlock::iterator &II) {
|
BasicBlock::iterator &II) {
|
||||||
Instruction *Inst = *II;
|
Instruction *Inst = *II;
|
||||||
if (isa<BinaryOperator>(Inst)) {
|
if (isa<BinaryOperator>(Inst)) {
|
||||||
Constant *D1 = dyn_cast<Constant>(Inst->getOperand(0));
|
Constant *D1 = dyn_cast<Constant>(Inst->getOperand(0));
|
||||||
@ -174,7 +171,7 @@ bool opt::ConstantPropogation::doConstantPropogation(BasicBlock *BB,
|
|||||||
Constant *D = dyn_cast<Constant>(UInst->getOperand(0));
|
Constant *D = dyn_cast<Constant>(UInst->getOperand(0));
|
||||||
if (D) return ConstantFoldUnaryInst(BB, II, UInst, D);
|
if (D) return ConstantFoldUnaryInst(BB, II, UInst, D);
|
||||||
} else if (TerminatorInst *TInst = dyn_cast<TerminatorInst>(Inst)) {
|
} else if (TerminatorInst *TInst = dyn_cast<TerminatorInst>(Inst)) {
|
||||||
return opt::ConstantFoldTerminator(TInst);
|
return ConstantFoldTerminator(TInst);
|
||||||
|
|
||||||
} else if (PHINode *PN = dyn_cast<PHINode>(Inst)) {
|
} else if (PHINode *PN = dyn_cast<PHINode>(Inst)) {
|
||||||
// If it's a PHI node and only has one operand
|
// If it's a PHI node and only has one operand
|
||||||
@ -203,7 +200,7 @@ static bool DoConstPropPass(Method *M) {
|
|||||||
for (Method::iterator BBI = M->begin(); BBI != M->end(); ++BBI) {
|
for (Method::iterator BBI = M->begin(); BBI != M->end(); ++BBI) {
|
||||||
BasicBlock *BB = *BBI;
|
BasicBlock *BB = *BBI;
|
||||||
for (BasicBlock::iterator I = BB->begin(); I != BB->end(); )
|
for (BasicBlock::iterator I = BB->begin(); I != BB->end(); )
|
||||||
if (opt::ConstantPropogation::doConstantPropogation(BB, I))
|
if (ConstantPropogation::doConstantPropogation(BB, I))
|
||||||
SomethingChanged = true;
|
SomethingChanged = true;
|
||||||
else
|
else
|
||||||
++I;
|
++I;
|
||||||
@ -214,7 +211,7 @@ static bool DoConstPropPass(Method *M) {
|
|||||||
|
|
||||||
// returns whether or not the underlying method was modified
|
// returns whether or not the underlying method was modified
|
||||||
//
|
//
|
||||||
bool opt::ConstantPropogation::doConstantPropogation(Method *M) {
|
bool ConstantPropogation::doConstantPropogation(Method *M) {
|
||||||
bool Modified = false;
|
bool Modified = false;
|
||||||
|
|
||||||
// Fold constants until we make no progress...
|
// Fold constants until we make no progress...
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/DCE.h"
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/GlobalVariable.h"
|
#include "llvm/GlobalVariable.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
@ -39,8 +39,8 @@
|
|||||||
// to point to the instruction that immediately succeeded the original
|
// to point to the instruction that immediately succeeded the original
|
||||||
// instruction.
|
// instruction.
|
||||||
//
|
//
|
||||||
bool opt::DeadCodeElimination::dceInstruction(BasicBlock::InstListType &BBIL,
|
bool DeadCodeElimination::dceInstruction(BasicBlock::InstListType &BBIL,
|
||||||
BasicBlock::iterator &BBI) {
|
BasicBlock::iterator &BBI) {
|
||||||
// Look for un"used" definitions...
|
// Look for un"used" definitions...
|
||||||
if ((*BBI)->use_empty() && !(*BBI)->hasSideEffects() &&
|
if ((*BBI)->use_empty() && !(*BBI)->hasSideEffects() &&
|
||||||
!isa<TerminatorInst>(*BBI)) {
|
!isa<TerminatorInst>(*BBI)) {
|
||||||
@ -54,7 +54,7 @@ static inline bool RemoveUnusedDefs(BasicBlock::InstListType &Vals) {
|
|||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
for (BasicBlock::InstListType::iterator DI = Vals.begin();
|
for (BasicBlock::InstListType::iterator DI = Vals.begin();
|
||||||
DI != Vals.end(); )
|
DI != Vals.end(); )
|
||||||
if (opt::DeadCodeElimination::dceInstruction(Vals, DI))
|
if (DeadCodeElimination::dceInstruction(Vals, DI))
|
||||||
Changed = true;
|
Changed = true;
|
||||||
else
|
else
|
||||||
++DI;
|
++DI;
|
||||||
@ -155,7 +155,7 @@ static bool PropogatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {
|
|||||||
//
|
//
|
||||||
// WARNING: The entry node of a method may not be simplified.
|
// WARNING: The entry node of a method may not be simplified.
|
||||||
//
|
//
|
||||||
bool opt::SimplifyCFG(Method::iterator &BBIt) {
|
bool SimplifyCFG(Method::iterator &BBIt) {
|
||||||
BasicBlock *BB = *BBIt;
|
BasicBlock *BB = *BBIt;
|
||||||
Method *M = BB->getParent();
|
Method *M = BB->getParent();
|
||||||
|
|
||||||
@ -282,7 +282,7 @@ static bool DoDCEPass(Method *M) {
|
|||||||
// if they are unneeded...
|
// if they are unneeded...
|
||||||
//
|
//
|
||||||
for (BBIt = M->begin(), ++BBIt; BBIt != M->end(); ) {
|
for (BBIt = M->begin(), ++BBIt; BBIt != M->end(); ) {
|
||||||
if (opt::SimplifyCFG(BBIt)) {
|
if (SimplifyCFG(BBIt)) {
|
||||||
Changed = true;
|
Changed = true;
|
||||||
} else {
|
} else {
|
||||||
++BBIt;
|
++BBIt;
|
||||||
@ -296,13 +296,13 @@ static bool DoDCEPass(Method *M) {
|
|||||||
// It is possible that we may require multiple passes over the code to fully
|
// It is possible that we may require multiple passes over the code to fully
|
||||||
// eliminate dead code. Iterate until we are done.
|
// eliminate dead code. Iterate until we are done.
|
||||||
//
|
//
|
||||||
bool opt::DeadCodeElimination::doDCE(Method *M) {
|
bool DeadCodeElimination::doDCE(Method *M) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
while (DoDCEPass(M)) Changed = true;
|
while (DoDCEPass(M)) Changed = true;
|
||||||
return Changed;
|
return Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool opt::DeadCodeElimination::RemoveUnusedGlobalValues(Module *Mod) {
|
bool DeadCodeElimination::RemoveUnusedGlobalValues(Module *Mod) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
|
||||||
for (Module::iterator MI = Mod->begin(); MI != Mod->end(); ) {
|
for (Module::iterator MI = Mod->begin(); MI != Mod->end(); ) {
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/InductionVars.h"
|
#include "llvm/Transforms/Scalar/InductionVars.h"
|
||||||
#include "llvm/ConstantVals.h"
|
#include "llvm/ConstantVals.h"
|
||||||
#include "llvm/Analysis/IntervalPartition.h"
|
#include "llvm/Analysis/IntervalPartition.h"
|
||||||
#include "llvm/Assembly/Writer.h"
|
#include "llvm/Assembly/Writer.h"
|
||||||
|
@ -15,12 +15,10 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
||||||
#include "../TransformInternals.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/iMemory.h"
|
#include "llvm/iMemory.h"
|
||||||
|
#include "../TransformInternals.h"
|
||||||
using namespace opt;
|
|
||||||
|
|
||||||
static Instruction *CombineBinOp(BinaryOperator *I) {
|
static Instruction *CombineBinOp(BinaryOperator *I) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/ConstantProp.h"
|
#include "llvm/Transforms/Scalar/ConstantProp.h"
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/BasicBlock.h"
|
#include "llvm/BasicBlock.h"
|
||||||
#include "llvm/ConstantVals.h"
|
#include "llvm/ConstantVals.h"
|
||||||
@ -273,7 +273,7 @@ bool SCCP::doSCCP() {
|
|||||||
MadeChanges = true;
|
MadeChanges = true;
|
||||||
continue; // Skip the ++II at the end of the loop here...
|
continue; // Skip the ++II at the end of the loop here...
|
||||||
} else if (Inst->isTerminator()) {
|
} else if (Inst->isTerminator()) {
|
||||||
MadeChanges |= opt::ConstantFoldTerminator(cast<TerminatorInst>(Inst));
|
MadeChanges |= ConstantFoldTerminator(cast<TerminatorInst>(Inst));
|
||||||
}
|
}
|
||||||
|
|
||||||
++II;
|
++II;
|
||||||
@ -446,9 +446,8 @@ void SCCP::UpdateInstruction(Instruction *I) {
|
|||||||
markOverdefined(I);
|
markOverdefined(I);
|
||||||
} else if (VState.isConstant()) { // Propogate constant value
|
} else if (VState.isConstant()) { // Propogate constant value
|
||||||
Constant *Result = isa<CastInst>(I)
|
Constant *Result = isa<CastInst>(I)
|
||||||
? opt::ConstantFoldCastInstruction(VState.getConstant(), I->getType())
|
? ConstantFoldCastInstruction(VState.getConstant(), I->getType())
|
||||||
: opt::ConstantFoldUnaryInstruction(I->getOpcode(),
|
: ConstantFoldUnaryInstruction(I->getOpcode(), VState.getConstant());
|
||||||
VState.getConstant());
|
|
||||||
|
|
||||||
if (Result) {
|
if (Result) {
|
||||||
// This instruction constant folds!
|
// This instruction constant folds!
|
||||||
@ -473,9 +472,9 @@ void SCCP::UpdateInstruction(Instruction *I) {
|
|||||||
markOverdefined(I);
|
markOverdefined(I);
|
||||||
} else if (V1State.isConstant() && V2State.isConstant()) {
|
} else if (V1State.isConstant() && V2State.isConstant()) {
|
||||||
Constant *Result =
|
Constant *Result =
|
||||||
opt::ConstantFoldBinaryInstruction(I->getOpcode(),
|
ConstantFoldBinaryInstruction(I->getOpcode(),
|
||||||
V1State.getConstant(),
|
V1State.getConstant(),
|
||||||
V2State.getConstant());
|
V2State.getConstant());
|
||||||
if (Result) {
|
if (Result) {
|
||||||
// This instruction constant folds!
|
// This instruction constant folds!
|
||||||
markConstant(I, Result);
|
markConstant(I, Result);
|
||||||
@ -511,7 +510,7 @@ void SCCP::OperandChangedState(User *U) {
|
|||||||
// DoSparseConditionalConstantProp - Use Sparse Conditional Constant Propogation
|
// DoSparseConditionalConstantProp - Use Sparse Conditional Constant Propogation
|
||||||
// to prove whether a value is constant and whether blocks are used.
|
// to prove whether a value is constant and whether blocks are used.
|
||||||
//
|
//
|
||||||
bool opt::SCCPPass::doSCCP(Method *M) {
|
bool SCCPPass::doSCCP(Method *M) {
|
||||||
if (M->isExternal()) return false;
|
if (M->isExternal()) return false;
|
||||||
SCCP S(M);
|
SCCP S(M);
|
||||||
return S.doSCCP();
|
return S.doSCCP();
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/AllOpts.h"
|
#include "llvm/Transforms/SymbolStripping.h"
|
||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/Method.h"
|
#include "llvm/Method.h"
|
||||||
#include "llvm/SymbolTable.h"
|
#include "llvm/SymbolTable.h"
|
||||||
@ -44,14 +44,14 @@ static bool StripSymbolTable(SymbolTable *SymTab) {
|
|||||||
|
|
||||||
// DoSymbolStripping - Remove all symbolic information from a method
|
// DoSymbolStripping - Remove all symbolic information from a method
|
||||||
//
|
//
|
||||||
bool opt::SymbolStripping::doSymbolStripping(Method *M) {
|
bool SymbolStripping::doSymbolStripping(Method *M) {
|
||||||
return StripSymbolTable(M->getSymbolTable());
|
return StripSymbolTable(M->getSymbolTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
// doStripGlobalSymbols - Remove all symbolic information from all methods
|
// doStripGlobalSymbols - Remove all symbolic information from all methods
|
||||||
// in a module, and all module level symbols. (method names, etc...)
|
// in a module, and all module level symbols. (method names, etc...)
|
||||||
//
|
//
|
||||||
bool opt::FullSymbolStripping::doStripGlobalSymbols(Module *M) {
|
bool FullSymbolStripping::doStripGlobalSymbols(Module *M) {
|
||||||
// Remove all symbols from methods in this module... and then strip all of the
|
// Remove all symbols from methods in this module... and then strip all of the
|
||||||
// symbols in this module...
|
// symbols in this module...
|
||||||
//
|
//
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "llvm/Optimizations/ConstantHandling.h"
|
#include "llvm/Transforms/Scalar/ConstantHandling.h"
|
||||||
|
|
||||||
AnnotationID ConstRules::AID(AnnotationManager::getID("opt::ConstRules",
|
AnnotationID ConstRules::AID(AnnotationManager::getID("opt::ConstRules",
|
||||||
&ConstRules::find));
|
&ConstRules::find));
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
#include "llvm/Assembly/Parser.h"
|
#include "llvm/Assembly/Parser.h"
|
||||||
#include "llvm/Transforms/CleanupGCCOutput.h"
|
#include "llvm/Transforms/CleanupGCCOutput.h"
|
||||||
#include "llvm/Transforms/LevelChange.h"
|
#include "llvm/Transforms/LevelChange.h"
|
||||||
#include "llvm/Optimizations/DCE.h"
|
|
||||||
#include "llvm/Transforms/ConstantMerge.h"
|
#include "llvm/Transforms/ConstantMerge.h"
|
||||||
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
#include "llvm/Transforms/Scalar/IndVarSimplify.h"
|
#include "llvm/Transforms/Scalar/IndVarSimplify.h"
|
||||||
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
||||||
#include "llvm/Bytecode/Writer.h"
|
#include "llvm/Bytecode/Writer.h"
|
||||||
@ -64,13 +64,13 @@ int main(int argc, char **argv) {
|
|||||||
// a little bit. Do this now.
|
// a little bit. Do this now.
|
||||||
//
|
//
|
||||||
PassManager Passes;
|
PassManager Passes;
|
||||||
Passes.add(new opt::DeadCodeElimination()); // Remove Dead code/vars
|
Passes.add(new DeadCodeElimination()); // Remove Dead code/vars
|
||||||
Passes.add(new CleanupGCCOutput()); // Fix gccisms
|
Passes.add(new CleanupGCCOutput()); // Fix gccisms
|
||||||
Passes.add(new InductionVariableSimplify()); // Simplify indvars
|
Passes.add(new InductionVariableSimplify()); // Simplify indvars
|
||||||
Passes.add(new RaisePointerReferences()); // Eliminate casts
|
Passes.add(new RaisePointerReferences()); // Eliminate casts
|
||||||
Passes.add(new ConstantMerge()); // Merge dup global consts
|
Passes.add(new ConstantMerge()); // Merge dup global consts
|
||||||
Passes.add(new InstructionCombining()); // Combine silly seq's
|
Passes.add(new InstructionCombining()); // Combine silly seq's
|
||||||
Passes.add(new opt::DeadCodeElimination()); // Remove Dead code/vars
|
Passes.add(new DeadCodeElimination()); // Remove Dead code/vars
|
||||||
|
|
||||||
// Run our queue of passes all at once now, efficiently. This form of
|
// Run our queue of passes all at once now, efficiently. This form of
|
||||||
// runAllPasses frees the Pass objects after runAllPasses completes.
|
// runAllPasses frees the Pass objects after runAllPasses completes.
|
||||||
|
@ -9,20 +9,26 @@
|
|||||||
#include "llvm/Module.h"
|
#include "llvm/Module.h"
|
||||||
#include "llvm/Bytecode/Reader.h"
|
#include "llvm/Bytecode/Reader.h"
|
||||||
#include "llvm/Bytecode/Writer.h"
|
#include "llvm/Bytecode/Writer.h"
|
||||||
#include "llvm/Optimizations/AllOpts.h"
|
|
||||||
#include "llvm/Transforms/Instrumentation/TraceValues.h"
|
|
||||||
#include "llvm/Assembly/PrintModulePass.h"
|
#include "llvm/Assembly/PrintModulePass.h"
|
||||||
#include "llvm/Transforms/ConstantMerge.h"
|
#include "llvm/Transforms/ConstantMerge.h"
|
||||||
#include "llvm/Transforms/CleanupGCCOutput.h"
|
#include "llvm/Transforms/CleanupGCCOutput.h"
|
||||||
#include "llvm/Transforms/LevelChange.h"
|
#include "llvm/Transforms/LevelChange.h"
|
||||||
|
#include "llvm/Transforms/MethodInlining.h"
|
||||||
|
#include "llvm/Transforms/SymbolStripping.h"
|
||||||
#include "llvm/Transforms/IPO/SimpleStructMutation.h"
|
#include "llvm/Transforms/IPO/SimpleStructMutation.h"
|
||||||
#include "llvm/Transforms/IPO/GlobalDCE.h"
|
#include "llvm/Transforms/IPO/GlobalDCE.h"
|
||||||
|
#include "llvm/Transforms/Scalar/DCE.h"
|
||||||
|
#include "llvm/Transforms/Scalar/ConstantProp.h"
|
||||||
|
#include "llvm/Transforms/Scalar/InductionVars.h"
|
||||||
#include "llvm/Transforms/Scalar/IndVarSimplify.h"
|
#include "llvm/Transforms/Scalar/IndVarSimplify.h"
|
||||||
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
#include "llvm/Transforms/Scalar/InstructionCombining.h"
|
||||||
|
#include "llvm/Transforms/Instrumentation/TraceValues.h"
|
||||||
#include "Support/CommandLine.h"
|
#include "Support/CommandLine.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum Opts {
|
enum Opts {
|
||||||
// Basic optimizations
|
// Basic optimizations
|
||||||
dce, constprop, inlining, constmerge, strip, mstrip,
|
dce, constprop, inlining, constmerge, strip, mstrip,
|
||||||
@ -41,16 +47,16 @@ struct {
|
|||||||
enum Opts OptID;
|
enum Opts OptID;
|
||||||
Pass *ThePass;
|
Pass *ThePass;
|
||||||
} OptTable[] = {
|
} OptTable[] = {
|
||||||
{ dce , new opt::DeadCodeElimination() },
|
{ dce , new DeadCodeElimination() },
|
||||||
{ constprop , new opt::ConstantPropogation() },
|
{ constprop , new ConstantPropogation() },
|
||||||
{ inlining , new opt::MethodInlining() },
|
{ inlining , new MethodInlining() },
|
||||||
{ constmerge , new ConstantMerge() },
|
{ constmerge , new ConstantMerge() },
|
||||||
{ strip , new opt::SymbolStripping() },
|
{ strip , new SymbolStripping() },
|
||||||
{ mstrip , new opt::FullSymbolStripping() },
|
{ mstrip , new FullSymbolStripping() },
|
||||||
{ indvars , new InductionVariableSimplify() },
|
{ indvars , new InductionVariableSimplify() },
|
||||||
{ instcombine, new InstructionCombining() },
|
{ instcombine, new InstructionCombining() },
|
||||||
{ sccp , new opt::SCCPPass() },
|
{ sccp , new SCCPPass() },
|
||||||
{ adce , new opt::AgressiveDCE() },
|
{ adce , new AgressiveDCE() },
|
||||||
{ raise , new RaisePointerReferences() },
|
{ raise , new RaisePointerReferences() },
|
||||||
{ trace , new InsertTraceCode(true, true) },
|
{ trace , new InsertTraceCode(true, true) },
|
||||||
{ tracem , new InsertTraceCode(false, true) },
|
{ tracem , new InsertTraceCode(false, true) },
|
||||||
|
Loading…
Reference in New Issue
Block a user