[llvm-commits] [poolalloc] r43389 - in /poolalloc/trunk/lib: Makefile PoolAllocate/AccessTrace.cpp PoolAllocate/PointerCompress.cpp PoolAllocate/PoolAllocate.cpp PoolAllocate/PoolOptimize.cpp PoolAllocate/TransformFunctionBody.cpp
Andrew Lenharth
alenhar2 at cs.uiuc.edu
Fri Oct 26 11:31:29 PDT 2007
Author: alenhar2
Date: Fri Oct 26 13:31:29 2007
New Revision: 43389
URL: http://llvm.org/viewvc/llvm-project?rev=43389&view=rev
Log:
Poolalloc, now with less bitrot, thanks Torvald Riegel
Modified:
poolalloc/trunk/lib/Makefile
poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp
poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp
poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp
poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp
poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp
Modified: poolalloc/trunk/lib/Makefile
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/Makefile?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/Makefile (original)
+++ poolalloc/trunk/lib/Makefile Fri Oct 26 13:31:29 2007
@@ -6,6 +6,6 @@
#
# List all of the subdirectories that we will compile.
#
-PARALLEL_DIRS=DSA
+PARALLEL_DIRS=DSA PoolAllocate
include $(LEVEL)/Makefile.common
Modified: poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/AccessTrace.cpp Fri Oct 26 13:31:29 2007
@@ -32,6 +32,8 @@
const Type *VoidPtrTy;
public:
+ PoolAccessTrace() : ModulePass((intptr_t)&ID) {}
+
bool runOnModule(Module &M);
void getAnalysisUsage(AnalysisUsage &AU) const;
@@ -39,6 +41,7 @@
const DSGraph &getGraphForFunc(PA::FuncInfo *FI) const {
return ECG->getDSGraph(FI->F);
}
+ static char ID;
private:
void InitializeLibraryFunctions(Module &M);
@@ -46,6 +49,7 @@
PA::FuncInfo *FI, DSGraph &DSG);
};
+ char PoolAccessTrace::ID = 0;
RegisterPass<PoolAccessTrace>
X("poolaccesstrace", "Instrument program to print trace of accesses");
}
@@ -90,7 +94,8 @@
PD = Constant::getNullValue(VoidPtrTy);
// Insert the trace call.
- new CallInst(PoolAccessTraceFn, Ptr, PD, "", I);
+ Value *Opts[2] = {Ptr, PD};
+ new CallInst(PoolAccessTraceFn, Opts, Opts + 2, "", I);
}
bool PoolAccessTrace::runOnModule(Module &M) {
Modified: poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/PointerCompress.cpp Fri Oct 26 13:31:29 2007
@@ -117,7 +117,9 @@
public:
Constant *PoolInitPC, *PoolDestroyPC, *PoolAllocPC;
typedef std::map<const DSNode*, CompressedPoolInfo> PoolInfoMap;
+ static char ID;
+ PointerCompress() : ModulePass((intptr_t)&ID) {}
/// NoArgFunctionsCalled - When we are walking the call graph, keep track of
/// which functions are called that don't need their prototype to be
/// changed.
@@ -162,6 +164,7 @@
Function &F, DSGraph &DSG, PA::FuncInfo *FI);
};
+ char PointerCompress::ID = 0;
RegisterPass<PointerCompress>
X("pointercompress", "Compress type-safe data structures");
}
@@ -285,7 +288,8 @@
// Get the pool base pointer.
Constant *Zero = Constant::getNullValue(Type::Int32Ty);
- Value *BasePtrPtr = new GetElementPtrInst(getPoolDesc(), Zero, Zero,
+ Value *Opts[2] = {Zero, Zero};
+ Value *BasePtrPtr = new GetElementPtrInst(getPoolDesc(), Opts, Opts + 2,
"poolbaseptrptr", &I);
return new LoadInst(BasePtrPtr, "poolbaseptr", &I);
} else {
@@ -296,7 +300,8 @@
BasicBlock::iterator IP = I.getParent()->getParent()->begin()->begin();
while (isa<AllocaInst>(IP)) ++IP;
Constant *Zero = Constant::getNullValue(Type::Int32Ty);
- Value *BasePtrPtr = new GetElementPtrInst(getPoolDesc(), Zero, Zero,
+ Value *Opts[2] = {Zero, Zero};
+ Value *BasePtrPtr = new GetElementPtrInst(getPoolDesc(), Opts, Opts + 2,
"poolbaseptrptr", IP);
PoolBase = new LoadInst(BasePtrPtr, "poolbaseptr", IP);
}
@@ -864,7 +869,7 @@
Ops.push_back(ConstantInt::get(Type::Int32Ty,
PA::Heuristic::getRecommendedAlignment(PI->getNewType(), TD)));
// TODO: Compression could reduce the alignment restriction for the pool!
- Value *PB = new CallInst(PtrComp.PoolInitPC, &Ops[0], Ops.size(), "", &CI);
+ Value *PB = new CallInst(PtrComp.PoolInitPC, Ops.begin(), Ops.end(), "", &CI);
if (!DisablePoolBaseASR) { // Load the pool base immediately.
PB->setName(CI.getOperand(1)->getName()+".poolbase");
@@ -906,7 +911,8 @@
Size = BinaryOperator::createMul(Size, NewSize, "newbytes", &CI);
}
- Value *NC = new CallInst(PtrComp.PoolAllocPC, CI.getOperand(1), Size, CI.getName(), &CI);
+ Value *Opts[2] = {CI.getOperand(1), Size};
+ Value *NC = new CallInst(PtrComp.PoolAllocPC, Opts, Opts + 2, CI.getName(), &CI);
setTransformedValue(CI, NC);
}
@@ -1031,7 +1037,7 @@
}
Function *Clone = PtrComp.GetExtFunctionClone(Callee, CompressedArgs);
- Value *NC = new CallInst(Clone, &Operands[0], Operands.size(), CI.getName(), &CI);
+ Value *NC = new CallInst(Clone, Operands.begin(), Operands.end(), CI.getName(), &CI);
if (NC->getType() != CI.getType()) // Compressing return value?
setTransformedValue(CI, NC);
else {
@@ -1108,7 +1114,7 @@
else
Operands.push_back(CI.getOperand(i));
- Value *NC = new CallInst(Clone, &Operands[0], Operands.size(), CI.getName(), &CI);
+ Value *NC = new CallInst(Clone, Operands.begin(), Operands.end(), CI.getName(), &CI);
if (NC->getType() != CI.getType()) // Compressing return value?
setTransformedValue(CI, NC);
else {
Modified: poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/PoolAllocate.cpp Fri Oct 26 13:31:29 2007
@@ -546,7 +546,7 @@
Value *ElSize = ConstantInt::get(Type::Int32Ty, RecSize);
Value *AlignV = ConstantInt::get(Type::Int32Ty, Align);
Value* Opts[3] = {GV, ElSize, AlignV};
- new CallInst(PoolInit, &Opts[0], 3, "", InsertPt);
+ new CallInst(PoolInit, Opts, Opts + 3, "", InsertPt);
++NumPools;
return GV;
}
@@ -887,7 +887,7 @@
for (unsigned i = 0, e = PoolInitPoints.size(); i != e; ++i) {
Value* Opts[3] = {PD, ElSize, Align};
- new CallInst(PoolInit, &Opts[0], 3, "", PoolInitPoints[i]);
+ new CallInst(PoolInit, Opts, Opts + 3, "", PoolInitPoints[i]);
DEBUG(std::cerr << PoolInitPoints[i]->getParent()->getName() << " ");
}
Modified: poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/PoolOptimize.cpp Fri Oct 26 13:31:29 2007
@@ -25,9 +25,12 @@
STATISTIC (NumBumpPtr, "Number of bump pointer pools");
struct PoolOptimize : public ModulePass {
+ static char ID;
+ PoolOptimize() : ModulePass((intptr_t)&ID) {}
bool runOnModule(Module &M);
};
+ char PoolOptimize::ID = 0;
RegisterPass<PoolOptimize>
X("pooloptimize", "Optimize a pool allocated program");
}
@@ -109,19 +112,22 @@
CallInst *CI = Calls[i];
// poolrealloc(PD, null, X) -> poolalloc(PD, X)
if (isa<ConstantPointerNull>(CI->getOperand(2))) {
- Value *New = new CallInst(PoolAlloc, CI->getOperand(1), CI->getOperand(3),
+ Value* Opts[2] = {CI->getOperand(1), CI->getOperand(3)};
+ Value *New = new CallInst(PoolAlloc, Opts, Opts + 2,
CI->getName(), CI);
CI->replaceAllUsesWith(New);
CI->eraseFromParent();
} else if (isa<Constant>(CI->getOperand(3)) &&
cast<Constant>(CI->getOperand(3))->isNullValue()) {
// poolrealloc(PD, X, 0) -> poolfree(PD, X)
- new CallInst(PoolFree, CI->getOperand(1), CI->getOperand(2), "", CI);
+ Value* Opts[2] = {CI->getOperand(1), CI->getOperand(2)};
+ new CallInst(PoolFree, Opts, Opts + 2, "", CI);
CI->replaceAllUsesWith(Constant::getNullValue(CI->getType()));
CI->eraseFromParent();
} else if (isa<ConstantPointerNull>(CI->getOperand(1))) {
// poolrealloc(null, X, Y) -> realloc(X, Y)
- Value *New = new CallInst(Realloc, CI->getOperand(2), CI->getOperand(3),
+ Value* Opts[2] = {CI->getOperand(2), CI->getOperand(3)};
+ Value *New = new CallInst(Realloc, Opts, Opts + 2,
CI->getName(), CI);
CI->replaceAllUsesWith(New);
CI->eraseFromParent();
@@ -148,7 +154,8 @@
CallInst *CI = Calls[i];
// poolmemalign(null, X, Y) -> memalign(X, Y)
if (isa<ConstantPointerNull>(CI->getOperand(1))) {
- Value *New = new CallInst(MemAlign, CI->getOperand(2), CI->getOperand(3), CI->getName(), CI);
+ Value* Opts[2] = {CI->getOperand(2), CI->getOperand(3)};
+ Value *New = new CallInst(MemAlign, Opts, Opts + 2, CI->getName(), CI);
CI->replaceAllUsesWith(New);
CI->eraseFromParent();
}
@@ -219,18 +226,18 @@
std::vector<Value*> Args;
if (CI->getCalledFunction() == PoolAlloc) {
Args.assign(CI->op_begin()+1, CI->op_end());
- Value *New = new CallInst(PoolAllocBP, &Args[0], Args.size(), CI->getName(), CI);
+ Value *New = new CallInst(PoolAllocBP, Args.begin(), Args.end(), CI->getName(), CI);
CI->replaceAllUsesWith(New);
CI->eraseFromParent();
} else if (CI->getCalledFunction() == PoolInit) {
Args.assign(CI->op_begin()+1, CI->op_end());
Args.erase(Args.begin()+1); // Drop the size argument.
- new CallInst(PoolInitBP, &Args[0], Args.size(), "", CI);
+ new CallInst(PoolInitBP, Args.begin(), Args.end(), "", CI);
CI->eraseFromParent();
} else {
assert(CI->getCalledFunction() == PoolDestroy);
Args.assign(CI->op_begin()+1, CI->op_end());
- new CallInst(PoolDestroyBP, &Args[0], Args.size(), "", CI);
+ new CallInst(PoolDestroyBP, Args.begin(), Args.end(), "", CI);
CI->eraseFromParent();
}
}
Modified: poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp
URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp?rev=43389&r1=43388&r2=43389&view=diff
==============================================================================
--- poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp (original)
+++ poolalloc/trunk/lib/PoolAllocate/TransformFunctionBody.cpp Fri Oct 26 13:31:29 2007
@@ -155,7 +155,8 @@
// Insert a call to poolalloc
Value *PH = getPoolHandle(I);
- Instruction *V = new CallInst(PAInfo.PoolAlloc, PH, Size, Name, I);
+ Value* Opts[2] = {PH, Size};
+ Instruction *V = new CallInst(PAInfo.PoolAlloc, Opts, Opts + 2, Name, I);
AddPoolUse(*V, PH, PoolUses);
@@ -268,7 +269,8 @@
G.getScalarMap()[Casted] = G.getScalarMap()[Arg];
}
- CallInst *FreeI = new CallInst(PAInfo.PoolFree, PH, Casted, "", Where);
+ Value* Opts[2] = {PH, Casted};
+ CallInst *FreeI = new CallInst(PAInfo.PoolFree, Opts, Opts + 2, "", Where);
AddPoolUse(*FreeI, PH, PoolFrees);
return FreeI;
}
@@ -329,7 +331,7 @@
// We know that the memory returned by poolalloc is at least 4 byte aligned.
Value* Opts[4] = {Ptr, ConstantInt::get(Type::Int8Ty, 0),
V2, ConstantInt::get(Type::Int32Ty, 4)};
- new CallInst(MemSet, Opts, 4, "", BBI);
+ new CallInst(MemSet, Opts, Opts + 4, "", BBI);
}
@@ -349,7 +351,7 @@
std::string Name = I->getName(); I->setName("");
Value* Opts[3] = {PH, OldPtr, Size};
- Instruction *V = new CallInst(PAInfo.PoolRealloc, Opts, 3, Name, I);
+ Instruction *V = new CallInst(PAInfo.PoolRealloc, Opts, Opts + 3, Name, I);
Instruction *Casted = V;
if (V->getType() != I->getType())
Casted = CastInst::createPointerCast(V, I->getType(), V->getName(), I);
@@ -417,7 +419,7 @@
std::string Name = I->getName(); I->setName("");
Value* Opts[3] = {PH, Align, Size};
- Instruction *V = new CallInst(PAInfo.PoolMemAlign, Opts, 3, Name, I);
+ Instruction *V = new CallInst(PAInfo.PoolMemAlign, Opts, Opts + 3, Name, I);
Instruction *Casted = V;
if (V->getType() != I->getType())
@@ -653,7 +655,7 @@
Value *ElSize = ConstantInt::get(Type::Int32Ty,0);
Value *Align = ConstantInt::get(Type::Int32Ty,0);
Value* Opts[3] = {ArgVal, ElSize, Align};
- new CallInst(PAInfo.PoolInit, Opts, 3,"", TheCall);
+ new CallInst(PAInfo.PoolInit, Opts, Opts + 3,"", TheCall);
BasicBlock::iterator BBI = TheCall;
new CallInst(PAInfo.PoolDestroy, ArgVal, "", ++BBI);
}
@@ -673,9 +675,9 @@
if (InvokeInst *II = dyn_cast<InvokeInst>(TheCall)) {
NewCall = new InvokeInst(NewCallee, II->getNormalDest(),
- II->getUnwindDest(), &Args[0], Args.size(), Name, TheCall);
+ II->getUnwindDest(), Args.begin(), Args.end(), Name, TheCall);
} else {
- NewCall = new CallInst(NewCallee, &Args[0], Args.size(), Name, TheCall);
+ NewCall = new CallInst(NewCallee, Args.begin(), Args.end(), Name, TheCall);
}
// Add all of the uses of the pool descriptor
More information about the llvm-commits
mailing list