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 | 8fc50c296a7cdf8ca9bd5440272208105ce7551f (patch) | |
tree | 4074fa508a2c7feb08e7212ff4cf5ea43d5af913 /clang/lib/CodeGen/CGClass.cpp | |
parent | db192ba90f9fafda425982e9d1d4dbec288a6527 (diff) | |
download | bcm5719-llvm-8fc50c296a7cdf8ca9bd5440272208105ce7551f.tar.gz bcm5719-llvm-8fc50c296a7cdf8ca9bd5440272208105ce7551f.zip |
Factor out the code for emitting code to load vtable pointer members
so that it's done in one place.
llvm-svn: 117386
Diffstat (limited to 'clang/lib/CodeGen/CGClass.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGClass.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp index 33d1f6e206b..ebc84423531 100644 --- a/clang/lib/CodeGen/CGClass.cpp +++ b/clang/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"); +} |