Simplify code. No functionality change.

llvm-svn: 217726
This commit is contained in:
Benjamin Kramer 2014-09-13 12:38:49 +00:00
parent ce65c060e7
commit 0bd147da17
1 changed files with 3 additions and 15 deletions

View File

@ -683,31 +683,19 @@ static void UpdateCallGraphAfterInlining(CallSite CS,
static void HandleByValArgumentInit(Value *Dst, Value *Src, Module *M,
BasicBlock *InsertBlock,
InlineFunctionInfo &IFI) {
LLVMContext &Context = Src->getContext();
Type *VoidPtrTy = Type::getInt8PtrTy(Context);
Type *AggTy = cast<PointerType>(Src->getType())->getElementType();
Type *Tys[3] = { VoidPtrTy, VoidPtrTy, Type::getInt64Ty(Context) };
Function *MemCpyFn = Intrinsic::getDeclaration(M, Intrinsic::memcpy, Tys);
IRBuilder<> builder(InsertBlock->begin());
Value *DstCast = builder.CreateBitCast(Dst, VoidPtrTy, "tmp");
Value *SrcCast = builder.CreateBitCast(Src, VoidPtrTy, "tmp");
IRBuilder<> Builder(InsertBlock->begin());
Value *Size;
if (IFI.DL == nullptr)
Size = ConstantExpr::getSizeOf(AggTy);
else
Size = ConstantInt::get(Type::getInt64Ty(Context),
IFI.DL->getTypeStoreSize(AggTy));
Size = Builder.getInt64(IFI.DL->getTypeStoreSize(AggTy));
// Always generate a memcpy of alignment 1 here because we don't know
// the alignment of the src pointer. Other optimizations can infer
// better alignment.
Value *CallArgs[] = {
DstCast, SrcCast, Size,
ConstantInt::get(Type::getInt32Ty(Context), 1),
ConstantInt::getFalse(Context) // isVolatile
};
builder.CreateCall(MemCpyFn, CallArgs);
Builder.CreateMemCpy(Dst, Src, Size, /*Align=*/1);
}
/// HandleByValArgument - When inlining a call site that has a byval argument,