mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-05 17:39:16 +00:00
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:
parent
1a1046b7bc
commit
82c89b9f3a
@ -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><Opts> OptimizationList(<a href="#cl::desc">cl::desc</a>("<i>Available Optimizations:</i>"),
|
||||
<a href="#cl::values">cl::values</a>(
|
||||
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>"),
|
||||
clEnumVal(strip , "<i>Strip Symbols</i>"),
|
||||
0));
|
||||
|
@ -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:
|
||||
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>
|
||||
|
||||
<pre>
|
||||
|
@ -297,7 +297,7 @@
|
||||
|
||||
<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 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
|
||||
others...
|
||||
|
||||
|
@ -173,7 +173,7 @@ struct InstVisitor {
|
||||
RetTy visitShiftInst(ShiftInst &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
|
||||
// of instructions...
|
||||
//
|
||||
|
@ -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();
|
||||
|
||||
@ -152,7 +152,7 @@ Pass *createPromoteMemoryToRegister();
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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)
|
||||
//
|
||||
|
@ -12,13 +12,13 @@
|
||||
class Pass;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Local constant propogation...
|
||||
// Local constant propagation...
|
||||
//
|
||||
|
||||
/// doConstantPropogation - Constant prop a specific instruction. Returns true
|
||||
/// and potentially moves the iterator if constant propogation was performed.
|
||||
/// doConstantPropagation - Constant prop a specific instruction. Returns true
|
||||
/// 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
|
||||
/// constant value, convert it into an unconditional branch to the constant
|
||||
|
@ -142,8 +142,8 @@ bool ExpressionConvertibleToType(Value *V, const Type *Ty,
|
||||
ValueTypeCache::iterator CTMI = CTMap.find(V);
|
||||
if (CTMI != CTMap.end()) return CTMI->second == Ty;
|
||||
|
||||
// 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...
|
||||
// If it's a constant... all constants can be converted to a different type. We
|
||||
// just ask the constant propagator to see if it can convert the value...
|
||||
//
|
||||
if (Constant *CPV = dyn_cast<Constant>(V))
|
||||
return ConstantFoldCastInstruction(CPV, Ty);
|
||||
|
@ -557,7 +557,7 @@ bool RPR::DoRaisePass(Function &F) {
|
||||
for (Function::iterator BB = F.begin(), BBE = F.end(); BB != BBE; ++BB)
|
||||
for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) {
|
||||
DEBUG(cerr << "Processing: " << *BI);
|
||||
if (dceInstruction(BI) || doConstantPropogation(BI)) {
|
||||
if (dceInstruction(BI) || doConstantPropagation(BI)) {
|
||||
Changed = true;
|
||||
++NumDCEorCP;
|
||||
DEBUG(cerr << "***\t\t^^-- Dead code eliminated!\n");
|
||||
|
@ -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:
|
||||
// * Converts instructions like "add int 1, 2" into 3
|
||||
@ -23,7 +23,7 @@
|
||||
namespace {
|
||||
Statistic<> NumInstKilled("constprop", "Number of instructions killed");
|
||||
|
||||
struct ConstantPropogation : public FunctionPass {
|
||||
struct ConstantPropagation : public FunctionPass {
|
||||
bool runOnFunction(Function &F);
|
||||
|
||||
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() {
|
||||
return new ConstantPropogation();
|
||||
Pass *createConstantPropagationPass() {
|
||||
return new ConstantPropagation();
|
||||
}
|
||||
|
||||
|
||||
bool ConstantPropogation::runOnFunction(Function &F) {
|
||||
bool ConstantPropagation::runOnFunction(Function &F) {
|
||||
// Initialize the worklist to all of the instructions ready to process...
|
||||
std::set<Instruction*> WorkList(inst_begin(F), inst_end(F));
|
||||
bool Changed = false;
|
||||
@ -51,7 +51,7 @@ bool ConstantPropogation::runOnFunction(Function &F) {
|
||||
if (!I->use_empty()) // Don't muck with dead instructions...
|
||||
if (Constant *C = ConstantFoldInstruction(I)) {
|
||||
// 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();
|
||||
UI != UE; ++UI)
|
||||
WorkList.insert(cast<Instruction>(*UI));
|
||||
|
@ -300,7 +300,7 @@ bool CEE::runOnFunction(Function &F) {
|
||||
// TransformRegion - Transform the region starting with BB according to the
|
||||
// calculated region information for the block. Transforming the region
|
||||
// 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.
|
||||
//
|
||||
// This method processes the function in depth first order, which guarantees
|
||||
@ -885,7 +885,7 @@ void CEE::PropagateRelation(Instruction::BinaryOps Opcode, Value *Op0,
|
||||
return;
|
||||
|
||||
// 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)) {
|
||||
Op1R.contradicts(Opcode, VI);
|
||||
|
@ -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:
|
||||
// * Assumes values are constant unless proven otherwise
|
||||
@ -75,7 +75,7 @@ public:
|
||||
//===----------------------------------------------------------------------===//
|
||||
// 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 {
|
||||
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
|
||||
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.
|
||||
//
|
||||
bool runOnFunction(Function &F);
|
||||
@ -239,7 +239,7 @@ Pass *createSCCPPass() {
|
||||
// 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.
|
||||
//
|
||||
bool SCCP::runOnFunction(Function &F) {
|
||||
|
@ -10,13 +10,13 @@
|
||||
#include "llvm/ConstantHandling.h"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Local constant propogation...
|
||||
// Local constant propagation...
|
||||
//
|
||||
|
||||
// ConstantFoldInstruction - If an instruction references constants, try to fold
|
||||
// them together...
|
||||
//
|
||||
bool doConstantPropogation(BasicBlock::iterator &II) {
|
||||
bool doConstantPropagation(BasicBlock::iterator &II) {
|
||||
if (Constant *C = ConstantFoldInstruction(II)) {
|
||||
// Replaces all of the uses of a variable with uses of the constant.
|
||||
II->replaceAllUsesWith(C);
|
||||
|
Loading…
x
Reference in New Issue
Block a user