diff options
author | Dan Gohman <gohman@apple.com> | 2010-10-26 18:44:08 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-10-26 18:44:08 +0000 |
commit | 043fb9a1fc0609285f60f0f87e5a18195408f34c (patch) | |
tree | 2de74b635ac0eba6fea286b11248e3b3e554f8cf /lib/CodeGen/CGClass.cpp | |
parent | 808bedfd8cf18146bde5a181862375f1b1d261af (diff) |
Factor out the code for emitting code to load vtable pointer members
so that it's done in one place.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117386 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGClass.cpp')
-rw-r--r-- | lib/CodeGen/CGClass.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/CodeGen/CGClass.cpp b/lib/CodeGen/CGClass.cpp index 33d1f6e206..ebc8442353 100644 --- a/lib/CodeGen/CGClass.cpp +++ b/lib/CodeGen/CGClass.cpp @@ -1237,10 +1237,7 @@ CodeGenFunction::GetVirtualBaseClassOffset(llvm::Value *This, const llvm::Type *Int8PtrTy = llvm::Type::getInt8Ty(VMContext)->getPointerTo(); - llvm::Value *VTablePtr = Builder.CreateBitCast(This, - Int8PtrTy->getPointerTo()); - VTablePtr = Builder.CreateLoad(VTablePtr, "vtable"); - + llvm::Value *VTablePtr = GetVTablePtr(This, Int8PtrTy); int64_t VBaseOffsetOffset = CGM.getVTables().getVirtualBaseOffsetOffset(ClassDecl, BaseClassDecl); @@ -1393,3 +1390,9 @@ void CodeGenFunction::InitializeVTablePointers(const CXXRecordDecl *RD) { /*BaseIsNonVirtualPrimaryBase=*/false, VTable, RD, VBases); } + +llvm::Value *CodeGenFunction::GetVTablePtr(llvm::Value *This, + const llvm::Type *Ty) { + llvm::Value *VTablePtrSrc = Builder.CreateBitCast(This, Ty->getPointerTo()); + return Builder.CreateLoad(VTablePtrSrc, "vtable"); +} |