[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