mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 05:35:11 +00:00
* Add support for the -stats command line option to report how much is changed
* Make cast-of-self-ty DCE the dead cast instruction immediately instead of waiting for it to be DCE'd by another sweep over the function. This speeds this up noticably. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2597 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c79260af6e
commit
3c0193742a
@ -16,8 +16,16 @@
|
||||
#include "llvm/Analysis/Expressions.h"
|
||||
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
|
||||
#include "Support/STLExtras.h"
|
||||
#include "Support/StatisticReporter.h"
|
||||
#include <algorithm>
|
||||
|
||||
static Statistic<> NumLoadStorePeepholes("raise\t\t- Number of load/store peepholes");
|
||||
static Statistic<> NumGEPInstFormed("raise\t\t- Number of other getelementptr's formed");
|
||||
static Statistic<> NumExprTreesConv("raise\t\t- Number of expression trees converted");
|
||||
static Statistic<> NumCastOfCast("raise\t\t- Number of cast-of-self removed");
|
||||
static Statistic<> NumDCEorCP("raise\t\t- Number of insts DCE'd or constprop'd");
|
||||
|
||||
|
||||
//#define DEBUG_PEEPHOLE_INSTS 1
|
||||
|
||||
#ifdef DEBUG_PEEPHOLE_INSTS
|
||||
@ -187,6 +195,13 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
CI->setName("");
|
||||
Src->setName(Name, BB->getParent()->getSymbolTable());
|
||||
}
|
||||
|
||||
// DCE the instruction now, to avoid having the iterative version of DCE
|
||||
// have to worry about it.
|
||||
//
|
||||
delete BB->getInstList().remove(BI);
|
||||
|
||||
++NumCastOfCast;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -215,6 +230,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
#ifdef DEBUG_PEEPHOLE_INSTS
|
||||
cerr << "DONE CONVERTING SRC EXPR TYPE: \n" << BB->getParent();
|
||||
#endif
|
||||
++NumExprTreesConv;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -236,6 +252,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
#ifdef DEBUG_PEEPHOLE_INSTS
|
||||
cerr << "DONE CONVERTING EXPR TYPE: \n\n" << BB->getParent();
|
||||
#endif
|
||||
++NumExprTreesConv;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -247,6 +264,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
if (const PointerType *DestPTy = dyn_cast<PointerType>(DestTy)) {
|
||||
if (HandleCastToPointer(BI, DestPTy)) {
|
||||
BI = BB->begin(); // Rescan basic block. BI might be invalidated.
|
||||
++NumGEPInstFormed;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -331,6 +349,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
CI->setOperand(0, GEP);
|
||||
|
||||
PRINT_PEEPHOLE2("cast-for-first:out", GEP, CI);
|
||||
++NumGEPInstFormed;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -373,6 +392,7 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
ReplaceInstWithInst(BB->getInstList(), BI,
|
||||
SI = new StoreInst(NCI, CastSrc));
|
||||
PRINT_PEEPHOLE3("st-src-cast:out", NCI, CastSrc, SI);
|
||||
++NumLoadStorePeepholes;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -380,9 +400,10 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||
isa<CastInst>(I->getOperand(1))) {
|
||||
|
||||
if (PeepholeOptimizeAddCast(BB, BI, I->getOperand(0),
|
||||
cast<CastInst>(I->getOperand(1))))
|
||||
cast<CastInst>(I->getOperand(1)))) {
|
||||
++NumGEPInstFormed;
|
||||
return true;
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -404,6 +425,7 @@ static bool DoRaisePass(Function *F) {
|
||||
#endif
|
||||
if (dceInstruction(BIL, BI) || doConstantPropogation(BB, BI)) {
|
||||
Changed = true;
|
||||
++NumDCEorCP;
|
||||
#ifdef DEBUG_PEEPHOLE_INSTS
|
||||
cerr << "***\t\t^^-- DeadCode Elinated!\n";
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user