mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
* Convert getelementptr/store pairs into a single store
* Convert getelementptr/load pairs into a single load git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1075 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d32a96121b
commit
8d38e54c2f
@ -438,7 +438,7 @@ static bool PeepholeMallocInst(BasicBlock *BB, BasicBlock::iterator &BI) {
|
|||||||
|
|
||||||
static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
||||||
Instruction *I = *BI;
|
Instruction *I = *BI;
|
||||||
if (I->use_size() == 0) return false;
|
if (I->use_size() == 0 && I->getType() != Type::VoidTy) return false;
|
||||||
|
|
||||||
if (CastInst *CI = dyn_cast<CastInst>(I)) {
|
if (CastInst *CI = dyn_cast<CastInst>(I)) {
|
||||||
Value *Src = CI->getOperand(0);
|
Value *Src = CI->getOperand(0);
|
||||||
@ -484,6 +484,31 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
|
|||||||
|
|
||||||
} else if (MallocInst *MI = dyn_cast<MallocInst>(I)) {
|
} else if (MallocInst *MI = dyn_cast<MallocInst>(I)) {
|
||||||
if (PeepholeMallocInst(BB, BI)) return true;
|
if (PeepholeMallocInst(BB, BI)) return true;
|
||||||
|
|
||||||
|
} else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
|
||||||
|
Value *Val = SI->getOperand(0);
|
||||||
|
Value *Pointer = SI->getPtrOperand();
|
||||||
|
|
||||||
|
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Pointer)) {
|
||||||
|
PRINT_PEEPHOLE2("gep-store:in", GEP, SI);
|
||||||
|
ReplaceInstWithInst(BB->getInstList(), BI,
|
||||||
|
SI = new StoreInst(Val, GEP->getPtrOperand(),
|
||||||
|
GEP->getIndexVec()));
|
||||||
|
PRINT_PEEPHOLE1("gep-store:out", SI);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
|
||||||
|
Value *Pointer = LI->getPtrOperand();
|
||||||
|
|
||||||
|
if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Pointer)) {
|
||||||
|
PRINT_PEEPHOLE2("gep-load:in", GEP, LI);
|
||||||
|
ReplaceInstWithInst(BB->getInstList(), BI,
|
||||||
|
LI = new LoadInst(GEP->getPtrOperand(),
|
||||||
|
GEP->getIndexVec()));
|
||||||
|
PRINT_PEEPHOLE1("gep-load:out", LI);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
} else if (I->getOpcode() == Instruction::Add &&
|
} else if (I->getOpcode() == Instruction::Add &&
|
||||||
isa<CastInst>(I->getOperand(1))) {
|
isa<CastInst>(I->getOperand(1))) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user