Hopefully, the final fix for `[Pp]ropogate'.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6251 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Misha Brukman
2003-05-20 21:01:22 +00:00
parent 1a1046b7bc
commit 82c89b9f3a
12 changed files with 32 additions and 32 deletions

View File

@ -607,7 +607,7 @@ Then define your "<tt><a href="#cl::list">cl::list</a></tt>" variable:<p>
<a href="#cl::list">cl::list</a>&lt;Opts&gt; OptimizationList(<a href="#cl::desc">cl::desc</a>("<i>Available Optimizations:</i>"), <a href="#cl::list">cl::list</a>&lt;Opts&gt; OptimizationList(<a href="#cl::desc">cl::desc</a>("<i>Available Optimizations:</i>"),
<a href="#cl::values">cl::values</a>( <a href="#cl::values">cl::values</a>(
clEnumVal(dce , "<i>Dead Code Elimination</i>"), clEnumVal(dce , "<i>Dead Code Elimination</i>"),
clEnumVal(constprop , "<i>Constant Propogation</i>"), clEnumVal(constprop , "<i>Constant Propagation</i>"),
clEnumValN(inlining, "<i>inline</i>", "<i>Procedure Integration</i>"), clEnumValN(inlining, "<i>inline</i>", "<i>Procedure Integration</i>"),
clEnumVal(strip , "<i>Strip Symbols</i>"), clEnumVal(strip , "<i>Strip Symbols</i>"),
0)); 0));

View File

@ -600,7 +600,7 @@ ackermann.llvm.lib <b>0.00</b> 0.0000 0.0000 0.0002 0.0004 |
Same as the <a href="#20021108">previous run</a>, but with a huge bug fix: Same as the <a href="#20021108">previous run</a>, but with a huge bug fix:
before, all of the call nodes (from the local pass) were being passed up in the before, all of the call nodes (from the local pass) were being passed up in the
BU pass, causing graph exposions. Now these call sites are not propogated. The BU pass, causing graph exposions. Now these call sites are not propagated. The
times and sized of graphs are all much smaller now.<p> times and sized of graphs are all much smaller now.<p>
<pre> <pre>

View File

@ -297,7 +297,7 @@
<dt><tt>llvm/lib/Transforms/</tt><dd> This directory contains the source <dt><tt>llvm/lib/Transforms/</tt><dd> This directory contains the source
code for the LLVM to LLVM program transformations, such as Aggressive Dead code for the LLVM to LLVM program transformations, such as Aggressive Dead
Code Elimination, Sparse Conditional Constant Propogation, Inlining, Loop Code Elimination, Sparse Conditional Constant Propagation, Inlining, Loop
Invarient Code Motion, Dead Global Elimination, Pool Allocation, and many Invarient Code Motion, Dead Global Elimination, Pool Allocation, and many
others... others...

View File

@ -173,7 +173,7 @@ struct InstVisitor {
RetTy visitShiftInst(ShiftInst &I) { DELEGATE(Instruction); } RetTy visitShiftInst(ShiftInst &I) { DELEGATE(Instruction); }
RetTy visitVarArgInst(VarArgInst &I) { DELEGATE(Instruction); } RetTy visitVarArgInst(VarArgInst &I) { DELEGATE(Instruction); }
// Next level propogators... if the user does not overload a specific // Next level propagators... if the user does not overload a specific
// instruction type, they can overload one of these to get the whole class // instruction type, they can overload one of these to get the whole class
// of instructions... // of instructions...
// //

View File

@ -15,14 +15,14 @@ class TerminatorInst;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// Constant Propogation Pass - A worklist driven constant propogation pass // Constant Propagation Pass - A worklist driven constant propagation pass
// //
Pass *createConstantPropogationPass(); Pass *createConstantPropagationPass();
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// Sparse Conditional Constant Propogation Pass // Sparse Conditional Constant Propagation Pass
// //
Pass *createSCCPPass(); Pass *createSCCPPass();
@ -152,7 +152,7 @@ Pass *createPromoteMemoryToRegister();
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// //
// This pass reassociates commutative expressions in an order that is designed // This pass reassociates commutative expressions in an order that is designed
// to promote better constant propogation, GCSE, LICM, PRE... // to promote better constant propagation, GCSE, LICM, PRE...
// //
// For example: 4 + (x + 5) -> x + (4 + 5) // For example: 4 + (x + 5) -> x + (4 + 5)
// //

View File

@ -12,13 +12,13 @@
class Pass; class Pass;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Local constant propogation... // Local constant propagation...
// //
/// doConstantPropogation - Constant prop a specific instruction. Returns true /// doConstantPropagation - Constant prop a specific instruction. Returns true
/// and potentially moves the iterator if constant propogation was performed. /// and potentially moves the iterator if constant propagation was performed.
/// ///
bool doConstantPropogation(BasicBlock::iterator &I); bool doConstantPropagation(BasicBlock::iterator &I);
/// ConstantFoldTerminator - If a terminator instruction is predicated on a /// ConstantFoldTerminator - If a terminator instruction is predicated on a
/// constant value, convert it into an unconditional branch to the constant /// constant value, convert it into an unconditional branch to the constant

View File

@ -142,8 +142,8 @@ bool ExpressionConvertibleToType(Value *V, const Type *Ty,
ValueTypeCache::iterator CTMI = CTMap.find(V); ValueTypeCache::iterator CTMI = CTMap.find(V);
if (CTMI != CTMap.end()) return CTMI->second == Ty; if (CTMI != CTMap.end()) return CTMI->second == Ty;
// If it's a constant... all constants can be converted to a different type We // If it's a constant... all constants can be converted to a different type. We
// just ask the constant propogator to see if it can convert the value... // just ask the constant propagator to see if it can convert the value...
// //
if (Constant *CPV = dyn_cast<Constant>(V)) if (Constant *CPV = dyn_cast<Constant>(V))
return ConstantFoldCastInstruction(CPV, Ty); return ConstantFoldCastInstruction(CPV, Ty);

View File

@ -557,7 +557,7 @@ bool RPR::DoRaisePass(Function &F) {
for (Function::iterator BB = F.begin(), BBE = F.end(); BB != BBE; ++BB) for (Function::iterator BB = F.begin(), BBE = F.end(); BB != BBE; ++BB)
for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) { for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) {
DEBUG(cerr << "Processing: " << *BI); DEBUG(cerr << "Processing: " << *BI);
if (dceInstruction(BI) || doConstantPropogation(BI)) { if (dceInstruction(BI) || doConstantPropagation(BI)) {
Changed = true; Changed = true;
++NumDCEorCP; ++NumDCEorCP;
DEBUG(cerr << "***\t\t^^-- Dead code eliminated!\n"); DEBUG(cerr << "***\t\t^^-- Dead code eliminated!\n");

View File

@ -1,6 +1,6 @@
//===- ConstantProp.cpp - Code to perform Simple Constant Propogation -----===// //===- ConstantProp.cpp - Code to perform Simple Constant Propagation -----===//
// //
// This file implements constant propogation and merging: // This file implements constant propagation and merging:
// //
// Specifically, this: // Specifically, this:
// * Converts instructions like "add int 1, 2" into 3 // * Converts instructions like "add int 1, 2" into 3
@ -23,7 +23,7 @@
namespace { namespace {
Statistic<> NumInstKilled("constprop", "Number of instructions killed"); Statistic<> NumInstKilled("constprop", "Number of instructions killed");
struct ConstantPropogation : public FunctionPass { struct ConstantPropagation : public FunctionPass {
bool runOnFunction(Function &F); bool runOnFunction(Function &F);
virtual void getAnalysisUsage(AnalysisUsage &AU) const { virtual void getAnalysisUsage(AnalysisUsage &AU) const {
@ -31,15 +31,15 @@ namespace {
} }
}; };
RegisterOpt<ConstantPropogation> X("constprop","Simple constant propogation"); RegisterOpt<ConstantPropagation> X("constprop","Simple constant propagation");
} }
Pass *createConstantPropogationPass() { Pass *createConstantPropagationPass() {
return new ConstantPropogation(); return new ConstantPropagation();
} }
bool ConstantPropogation::runOnFunction(Function &F) { bool ConstantPropagation::runOnFunction(Function &F) {
// Initialize the worklist to all of the instructions ready to process... // Initialize the worklist to all of the instructions ready to process...
std::set<Instruction*> WorkList(inst_begin(F), inst_end(F)); std::set<Instruction*> WorkList(inst_begin(F), inst_end(F));
bool Changed = false; bool Changed = false;
@ -51,7 +51,7 @@ bool ConstantPropogation::runOnFunction(Function &F) {
if (!I->use_empty()) // Don't muck with dead instructions... if (!I->use_empty()) // Don't muck with dead instructions...
if (Constant *C = ConstantFoldInstruction(I)) { if (Constant *C = ConstantFoldInstruction(I)) {
// Add all of the users of this instruction to the worklist, they might // Add all of the users of this instruction to the worklist, they might
// be constant propogatable now... // be constant propagatable now...
for (Value::use_iterator UI = I->use_begin(), UE = I->use_end(); for (Value::use_iterator UI = I->use_begin(), UE = I->use_end();
UI != UE; ++UI) UI != UE; ++UI)
WorkList.insert(cast<Instruction>(*UI)); WorkList.insert(cast<Instruction>(*UI));

View File

@ -300,7 +300,7 @@ bool CEE::runOnFunction(Function &F) {
// TransformRegion - Transform the region starting with BB according to the // TransformRegion - Transform the region starting with BB according to the
// calculated region information for the block. Transforming the region // calculated region information for the block. Transforming the region
// involves analyzing any information this block provides to successors, // involves analyzing any information this block provides to successors,
// propogating the information to successors, and finally transforming // propagating the information to successors, and finally transforming
// successors. // successors.
// //
// This method processes the function in depth first order, which guarantees // This method processes the function in depth first order, which guarantees
@ -885,7 +885,7 @@ void CEE::PropagateRelation(Instruction::BinaryOps Opcode, Value *Op0,
return; return;
// If we already have information that contradicts the current information we // If we already have information that contradicts the current information we
// are propogating, ignore this info. Something bad must have happened! // are propagating, ignore this info. Something bad must have happened!
// //
if (Op1R.contradicts(Opcode, VI)) { if (Op1R.contradicts(Opcode, VI)) {
Op1R.contradicts(Opcode, VI); Op1R.contradicts(Opcode, VI);

View File

@ -1,6 +1,6 @@
//===- SCCP.cpp - Sparse Conditional Constant Propogation -----------------===// //===- SCCP.cpp - Sparse Conditional Constant Propagation -----------------===//
// //
// This file implements sparse conditional constant propogation and merging: // This file implements sparse conditional constant propagation and merging:
// //
// Specifically, this: // Specifically, this:
// * Assumes values are constant unless proven otherwise // * Assumes values are constant unless proven otherwise
@ -75,7 +75,7 @@ public:
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// SCCP Class // SCCP Class
// //
// This class does all of the work of Sparse Conditional Constant Propogation. // This class does all of the work of Sparse Conditional Constant Propagation.
// //
namespace { namespace {
class SCCP : public FunctionPass, public InstVisitor<SCCP> { class SCCP : public FunctionPass, public InstVisitor<SCCP> {
@ -86,7 +86,7 @@ class SCCP : public FunctionPass, public InstVisitor<SCCP> {
std::vector<BasicBlock*> BBWorkList; // The BasicBlock work list std::vector<BasicBlock*> BBWorkList; // The BasicBlock work list
public: public:
// runOnFunction - Run the Sparse Conditional Constant Propogation algorithm, // runOnFunction - Run the Sparse Conditional Constant Propagation algorithm,
// and return true if the function was modified. // and return true if the function was modified.
// //
bool runOnFunction(Function &F); bool runOnFunction(Function &F);
@ -239,7 +239,7 @@ Pass *createSCCPPass() {
// SCCP Class Implementation // SCCP Class Implementation
// runOnFunction() - Run the Sparse Conditional Constant Propogation algorithm, // runOnFunction() - Run the Sparse Conditional Constant Propagation algorithm,
// and return true if the function was modified. // and return true if the function was modified.
// //
bool SCCP::runOnFunction(Function &F) { bool SCCP::runOnFunction(Function &F) {

View File

@ -10,13 +10,13 @@
#include "llvm/ConstantHandling.h" #include "llvm/ConstantHandling.h"
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Local constant propogation... // Local constant propagation...
// //
// ConstantFoldInstruction - If an instruction references constants, try to fold // ConstantFoldInstruction - If an instruction references constants, try to fold
// them together... // them together...
// //
bool doConstantPropogation(BasicBlock::iterator &II) { bool doConstantPropagation(BasicBlock::iterator &II) {
if (Constant *C = ConstantFoldInstruction(II)) { if (Constant *C = ConstantFoldInstruction(II)) {
// 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.
II->replaceAllUsesWith(C); II->replaceAllUsesWith(C);