]> granicus.if.org Git - clang/commitdiff
Prefer bitcast+GEP over ptrtoint+sub+inttoptr: it's semantically equivalent here...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 28 Feb 2012 22:07:56 +0000 (22:07 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 28 Feb 2012 22:07:56 +0000 (22:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151659 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp

index b9abbf29012ec2fbcff2caacd21ec62762d39686..e3b5777387003a127bddc3feef6905ed519dfa08 100644 (file)
@@ -249,9 +249,9 @@ CodeGenFunction::GetAddressOfDerivedClass(llvm::Value *Value,
   }
   
   // Apply the offset.
-  Value = Builder.CreatePtrToInt(Value, NonVirtualOffset->getType());
-  Value = Builder.CreateSub(Value, NonVirtualOffset);
-  Value = Builder.CreateIntToPtr(Value, DerivedPtrTy);
+  Value = Builder.CreateBitCast(Value, Int8PtrTy);
+  Value = Builder.CreateGEP(Value, Builder.CreateNeg(NonVirtualOffset),
+                            "sub.ptr");
 
   // Just cast.
   Value = Builder.CreateBitCast(Value, DerivedPtrTy);