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 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits