Changes in directory llvm-poolalloc/lib/PoolAllocate:
TransformFunctionBody.cpp updated: 1.51 -> 1.52 --- Log message: Use the nifty new memset intrinsics --- Diffs of the changes: (+20 -17) TransformFunctionBody.cpp | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-) Index: llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp diff -u llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.51 llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.52 --- llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp:1.51 Fri Mar 31 16:27:40 2006 +++ llvm-poolalloc/lib/PoolAllocate/TransformFunctionBody.cpp Thu Apr 13 09:07:35 2006 @@ -291,19 +291,22 @@ void FuncTransform::visitCallocCall(CallSite CS) { + TargetData& TD = PAInfo.getAnalysis<TargetData>(); + bool useLong = TD.getTypeSize(PointerType::get(Type::SByteTy)) != 4; + Module *M = CS.getInstruction()->getParent()->getParent()->getParent(); assert(CS.arg_end()-CS.arg_begin() == 2 && "calloc takes two arguments!"); Value *V1 = CS.getArgument(0); Value *V2 = CS.getArgument(1); if (V1->getType() != V2->getType()) { - V1 = new CastInst(V1, Type::UIntTy, V1->getName(), CS.getInstruction()); - V2 = new CastInst(V2, Type::UIntTy, V2->getName(), CS.getInstruction()); + V1 = new CastInst(V1, useLong ? Type::ULongTy : Type::UIntTy, V1->getName(), CS.getInstruction()); + V2 = new CastInst(V2, useLong ? Type::ULongTy : Type::UIntTy, V2->getName(), CS.getInstruction()); } V2 = BinaryOperator::create(Instruction::Mul, V1, V2, "size", CS.getInstruction()); - if (V2->getType() != Type::UByteTy) - V2 = new CastInst(V2, Type::UIntTy, V2->getName(), CS.getInstruction()); + if (V2->getType() != (useLong ? Type::ULongTy : Type::UIntTy)) + V2 = new CastInst(V2, useLong ? Type::ULongTy : Type::UIntTy, V2->getName(), CS.getInstruction()); BasicBlock::iterator BBI = TransformAllocationInstr(CS.getInstruction(), V2); @@ -311,11 +314,11 @@ // We just turned the call of 'calloc' into the equivalent of malloc. To // finish calloc, we need to zero out the memory. - Function *MemSet = M->getOrInsertFunction("llvm.memset", - Type::VoidTy, - PointerType::get(Type::SByteTy), - Type::UByteTy, Type::UIntTy, - Type::UIntTy, NULL); + Function *MemSet = M->getOrInsertFunction((useLong ? "llvm.memset.i64" : "llvm.memset.i32"), + Type::VoidTy, + PointerType::get(Type::SByteTy), + Type::UByteTy, (useLong ? Type::ULongTy : Type::UIntTy), + Type::UIntTy, NULL); if (Ptr->getType() != PointerType::get(Type::SByteTy)) Ptr = new CastInst(Ptr, PointerType::get(Type::SByteTy), Ptr->getName(), @@ -579,14 +582,14 @@ // There is no reason to map globals here, since they are not passed as // arguments - // Map the nodes that are pointed to by globals. - // DSScalarMap &CalleeSM = CalleeGraph->getScalarMap(); - // for (DSScalarMap::global_iterator GI = G.getScalarMap().global_begin(), - // E = G.getScalarMap().global_end(); GI != E; ++GI) - // if (CalleeSM.count(*GI)) - // DSGraph::computeNodeMapping(CalleeGraph->getNodeForValue(*GI), - // getDSNodeHFor(*GI), - // NodeMapping, false); +// // Map the nodes that are pointed to by globals. +// DSScalarMap &CalleeSM = CalleeGraph->getScalarMap(); +// for (DSScalarMap::global_iterator GI = G.getScalarMap().global_begin(), +// E = G.getScalarMap().global_end(); GI != E; ++GI) +// if (CalleeSM.count(*GI)) +// DSGraph::computeNodeMapping(CalleeGraph->getNodeForValue(*GI), +// getDSNodeHFor(*GI), +// NodeMapping, false); // Okay, now that we have established our mapping, we can figure out which // pool descriptors to pass in... _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits