mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-15 19:24:33 +00:00
Clean up code due to auto-insert constructors
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3665 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -108,7 +108,7 @@ bool RaiseAllocations::runOnBasicBlock(BasicBlock &BB) {
|
|||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
BasicBlock::InstListType &BIL = BB.getInstList();
|
BasicBlock::InstListType &BIL = BB.getInstList();
|
||||||
|
|
||||||
for (BasicBlock::iterator BI = BB.begin(); BI != BB.end();) {
|
for (BasicBlock::iterator BI = BB.begin(); BI != BB.end(); ++BI) {
|
||||||
Instruction *I = BI;
|
Instruction *I = BI;
|
||||||
|
|
||||||
if (CallInst *CI = dyn_cast<CallInst>(I)) {
|
if (CallInst *CI = dyn_cast<CallInst>(I)) {
|
||||||
@@ -118,19 +118,14 @@ bool RaiseAllocations::runOnBasicBlock(BasicBlock &BB) {
|
|||||||
|
|
||||||
// If no prototype was provided for malloc, we may need to cast the
|
// If no prototype was provided for malloc, we may need to cast the
|
||||||
// source size.
|
// source size.
|
||||||
if (Source->getType() != Type::UIntTy) {
|
if (Source->getType() != Type::UIntTy)
|
||||||
CastInst *New = new CastInst(Source, Type::UIntTy, "MallocAmtCast");
|
Source = new CastInst(Source, Type::UIntTy, "MallocAmtCast", BI);
|
||||||
BI = ++BIL.insert(BI, New);
|
|
||||||
Source = New;
|
|
||||||
}
|
|
||||||
|
|
||||||
MallocInst *MallocI = new MallocInst(PtrSByte, Source, CI->getName());
|
std::string Name(CI->getName()); CI->setName("");
|
||||||
|
BI = new MallocInst(PtrSByte, Source, Name, BI);
|
||||||
CI->setName("");
|
BIL.erase(I);
|
||||||
ReplaceInstWithInst(BIL, BI, MallocI);
|
|
||||||
Changed = true;
|
Changed = true;
|
||||||
++NumRaised;
|
++NumRaised;
|
||||||
continue; // Skip the ++BI
|
|
||||||
} else if (CI->getCalledValue() == FreeFunc) { // Replace call to free?
|
} else if (CI->getCalledValue() == FreeFunc) { // Replace call to free?
|
||||||
// If no prototype was provided for free, we may need to cast the
|
// If no prototype was provided for free, we may need to cast the
|
||||||
// source pointer. This should be really uncommon, but it's neccesary
|
// source pointer. This should be really uncommon, but it's neccesary
|
||||||
@@ -138,21 +133,15 @@ bool RaiseAllocations::runOnBasicBlock(BasicBlock &BB) {
|
|||||||
// free((long)ptr);
|
// free((long)ptr);
|
||||||
//
|
//
|
||||||
Value *Source = CI->getOperand(1);
|
Value *Source = CI->getOperand(1);
|
||||||
if (!isa<PointerType>(Source->getType())) {
|
if (!isa<PointerType>(Source->getType()))
|
||||||
CastInst *New = new CastInst(Source, PointerType::get(Type::SByteTy),
|
Source = new CastInst(Source, PointerType::get(Type::SByteTy),
|
||||||
"FreePtrCast");
|
"FreePtrCast", BI);
|
||||||
BI = ++BIL.insert(BI, New);
|
BI = new FreeInst(Source, BI);
|
||||||
Source = New;
|
BIL.erase(I);
|
||||||
}
|
|
||||||
|
|
||||||
ReplaceInstWithInst(BIL, BI, new FreeInst(Source));
|
|
||||||
Changed = true;
|
Changed = true;
|
||||||
continue; // Skip the ++BI
|
|
||||||
++NumRaised;
|
++NumRaised;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
++BI;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Changed;
|
return Changed;
|
||||||
|
@@ -240,7 +240,7 @@ bool ADCE::doADCE() {
|
|||||||
//
|
//
|
||||||
if (!AliveBlocks.count(&Func->front())) {
|
if (!AliveBlocks.count(&Func->front())) {
|
||||||
BasicBlock *NewEntry = new BasicBlock();
|
BasicBlock *NewEntry = new BasicBlock();
|
||||||
NewEntry->getInstList().push_back(new BranchInst(&Func->front()));
|
new BranchInst(&Func->front(), NewEntry->end());
|
||||||
Func->getBasicBlockList().push_front(NewEntry);
|
Func->getBasicBlockList().push_front(NewEntry);
|
||||||
AliveBlocks.insert(NewEntry); // This block is always alive!
|
AliveBlocks.insert(NewEntry); // This block is always alive!
|
||||||
}
|
}
|
||||||
@@ -353,9 +353,8 @@ bool ADCE::doADCE() {
|
|||||||
// Delete the old terminator instruction...
|
// Delete the old terminator instruction...
|
||||||
BB->getInstList().pop_back();
|
BB->getInstList().pop_back();
|
||||||
const Type *RetTy = Func->getReturnType();
|
const Type *RetTy = Func->getReturnType();
|
||||||
Instruction *New = new ReturnInst(RetTy != Type::VoidTy ?
|
new ReturnInst(RetTy != Type::VoidTy ? Constant::getNullValue(RetTy) :0,
|
||||||
Constant::getNullValue(RetTy) : 0);
|
BB->end());
|
||||||
BB->getInstList().push_back(New);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BB->dropAllReferences();
|
BB->dropAllReferences();
|
||||||
|
@@ -241,10 +241,8 @@ void LICM::hoist(Instruction &Inst) {
|
|||||||
// No loop pre-header, insert a PHI node into header to capture all of the
|
// No loop pre-header, insert a PHI node into header to capture all of the
|
||||||
// incoming versions of the value.
|
// incoming versions of the value.
|
||||||
//
|
//
|
||||||
PHINode *LoopVal = new PHINode(Inst.getType(), InstName+".phi");
|
PHINode *LoopVal = new PHINode(Inst.getType(), InstName+".phi",
|
||||||
|
Header->begin());
|
||||||
// Insert the new PHI node into the loop header...
|
|
||||||
Header->getInstList().push_front(LoopVal);
|
|
||||||
|
|
||||||
// Insert cloned versions of the instruction into all of the loop preds.
|
// Insert cloned versions of the instruction into all of the loop preds.
|
||||||
for (unsigned i = 0, e = LoopPreds.size(); i != e; ++i) {
|
for (unsigned i = 0, e = LoopPreds.size(); i != e; ++i) {
|
||||||
|
@@ -148,13 +148,8 @@ bool PiNodeInserter::insertPiNodeFor(Value *V, BasicBlock *Succ, Value *Rep) {
|
|||||||
|
|
||||||
// Create the Pi node...
|
// Create the Pi node...
|
||||||
Value *Pi = Rep;
|
Value *Pi = Rep;
|
||||||
if (Rep == 0) {
|
if (Rep == 0) // Insert the Pi node in the successor basic block...
|
||||||
PHINode *Phi = new PHINode(V->getType(), V->getName() + ".pi");
|
Pi = new PHINode(V->getType(), V->getName() + ".pi", Succ->begin());
|
||||||
|
|
||||||
// Insert the Pi node in the successor basic block...
|
|
||||||
Succ->getInstList().push_front(Phi);
|
|
||||||
Pi = Phi;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop over all of the uses of V, replacing ones that the Pi node
|
// Loop over all of the uses of V, replacing ones that the Pi node
|
||||||
// dominates with references to the Pi node itself.
|
// dominates with references to the Pi node itself.
|
||||||
|
@@ -87,8 +87,6 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
|
|||||||
// Loop over all of the instructions, looking for malloc or free instructions
|
// Loop over all of the instructions, looking for malloc or free instructions
|
||||||
for (BasicBlock::iterator I = BB.begin(), E = BB.end(); I != E; ++I) {
|
for (BasicBlock::iterator I = BB.begin(), E = BB.end(); I != E; ++I) {
|
||||||
if (MallocInst *MI = dyn_cast<MallocInst>(&*I)) {
|
if (MallocInst *MI = dyn_cast<MallocInst>(&*I)) {
|
||||||
BBIL.remove(I); // remove the malloc instr...
|
|
||||||
|
|
||||||
const Type *AllocTy = MI->getType()->getElementType();
|
const Type *AllocTy = MI->getType()->getElementType();
|
||||||
|
|
||||||
// Get the number of bytes to be allocated for one element of the
|
// Get the number of bytes to be allocated for one element of the
|
||||||
@@ -101,39 +99,32 @@ bool LowerAllocations::runOnBasicBlock(BasicBlock &BB) {
|
|||||||
MallocArg = MI->getOperand(0); // Operand * 1 = Operand
|
MallocArg = MI->getOperand(0); // Operand * 1 = Operand
|
||||||
} else if (MI->getNumOperands()) {
|
} else if (MI->getNumOperands()) {
|
||||||
// Multiply it by the array size if neccesary...
|
// Multiply it by the array size if neccesary...
|
||||||
MallocArg = BinaryOperator::create(Instruction::Mul,MI->getOperand(0),
|
MallocArg = BinaryOperator::create(Instruction::Mul, MI->getOperand(0),
|
||||||
MallocArg);
|
MallocArg, "", I);
|
||||||
I = ++BBIL.insert(I, cast<Instruction>(MallocArg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the call to Malloc...
|
// Create the call to Malloc...
|
||||||
CallInst *MCall = new CallInst(MallocFunc,
|
CallInst *MCall = new CallInst(MallocFunc,
|
||||||
vector<Value*>(1, MallocArg));
|
vector<Value*>(1, MallocArg), "", I);
|
||||||
I = BBIL.insert(I, MCall);
|
|
||||||
|
|
||||||
// Create a cast instruction to convert to the right type...
|
// Create a cast instruction to convert to the right type...
|
||||||
CastInst *MCast = new CastInst(MCall, MI->getType());
|
CastInst *MCast = new CastInst(MCall, MI->getType(), "", I);
|
||||||
I = BBIL.insert(++I, MCast);
|
|
||||||
|
|
||||||
// Replace all uses of the old malloc inst with the cast inst
|
// Replace all uses of the old malloc inst with the cast inst
|
||||||
MI->replaceAllUsesWith(MCast);
|
MI->replaceAllUsesWith(MCast);
|
||||||
delete MI; // Delete the malloc inst
|
I = --BBIL.erase(I); // remove and delete the malloc instr...
|
||||||
Changed = true;
|
Changed = true;
|
||||||
++NumLowered;
|
++NumLowered;
|
||||||
} else if (FreeInst *FI = dyn_cast<FreeInst>(&*I)) {
|
} else if (FreeInst *FI = dyn_cast<FreeInst>(&*I)) {
|
||||||
BBIL.remove(I);
|
|
||||||
|
|
||||||
// Cast the argument to free into a ubyte*...
|
// Cast the argument to free into a ubyte*...
|
||||||
CastInst *MCast = new CastInst(FI->getOperand(0),
|
CastInst *MCast = new CastInst(FI->getOperand(0),
|
||||||
PointerType::get(Type::UByteTy));
|
PointerType::get(Type::UByteTy), "", I);
|
||||||
I = ++BBIL.insert(I, MCast);
|
|
||||||
|
|
||||||
// Insert a call to the free function...
|
// Insert a call to the free function...
|
||||||
CallInst *FCall = new CallInst(FreeFunc, vector<Value*>(1, MCast));
|
CallInst *FCall = new CallInst(FreeFunc, vector<Value*>(1, MCast), "", I);
|
||||||
I = BBIL.insert(I, FCall);
|
|
||||||
|
|
||||||
// Delete the old free instruction
|
// Delete the old free instruction
|
||||||
delete FI;
|
I = --BBIL.erase(I);
|
||||||
Changed = true;
|
Changed = true;
|
||||||
++NumLowered;
|
++NumLowered;
|
||||||
}
|
}
|
||||||
|
@@ -196,14 +196,12 @@ bool PromotePass::QueuePhiNode(BasicBlock *BB, unsigned AllocaNo) {
|
|||||||
// If the BB already has a phi node added for the i'th alloca then we're done!
|
// If the BB already has a phi node added for the i'th alloca then we're done!
|
||||||
if (BBPNs[AllocaNo]) return false;
|
if (BBPNs[AllocaNo]) return false;
|
||||||
|
|
||||||
// Create a PhiNode using the dereferenced type...
|
// Create a PhiNode using the dereferenced type... and add the phi-node to the
|
||||||
|
// BasicBlock
|
||||||
PHINode *PN = new PHINode(Allocas[AllocaNo]->getAllocatedType(),
|
PHINode *PN = new PHINode(Allocas[AllocaNo]->getAllocatedType(),
|
||||||
Allocas[AllocaNo]->getName()+".mem2reg");
|
Allocas[AllocaNo]->getName()+".mem2reg",
|
||||||
|
BB->begin());
|
||||||
BBPNs[AllocaNo] = PN;
|
BBPNs[AllocaNo] = PN;
|
||||||
|
|
||||||
// Add the phi-node to the basic-block
|
|
||||||
BB->getInstList().push_front(PN);
|
|
||||||
|
|
||||||
PhiNodes[AllocaNo].push_back(BB);
|
PhiNodes[AllocaNo].push_back(BB);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user