]> granicus.if.org Git - clang/commitdiff
Generate assume loads only with -fstrict-vtable-pointers
authorPiotr Padlewski <prazek@google.com>
Mon, 28 Sep 2015 20:30:22 +0000 (20:30 +0000)
committerPiotr Padlewski <prazek@google.com>
Mon, 28 Sep 2015 20:30:22 +0000 (20:30 +0000)
Temporary fix till InstCombine and other possible passes will be
efficient to handle multiple assumes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248734 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGClass.cpp
test/CodeGenCXX/vtable-assume-load.cpp

index 7d55685767628ca85aa315a5bc8a18f03763d840..6394d1ff17dd2ea333ba50ba14b2081d559bcc2d 100644 (file)
@@ -2107,9 +2107,12 @@ void CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D,
   // FIXME: If vtable is used by ctor/dtor, or if vtable is external and we are
   // sure that definition of vtable is not hidden,
   // then we are always safe to refer to it.
+  // FIXME: It looks like InstCombine is very inefficient on dealing with
+  // assumes. Make assumption loads require -fstrict-vtable-pointers temporarily.
   if (CGM.getCodeGenOpts().OptimizationLevel > 0 &&
       ClassDecl->isDynamicClass() && Type != Ctor_Base &&
-      CGM.getCXXABI().canSpeculativelyEmitVTable(ClassDecl))
+      CGM.getCXXABI().canSpeculativelyEmitVTable(ClassDecl) &&
+      CGM.getCodeGenOpts().StrictVTablePointers)
     EmitVTableAssumptionLoads(ClassDecl, This);
 }
 
index 072be285b279901171efcfc2c296ef35a57a4a5a..30cfc00ec7ba736495b090076cc1f2157960ce26 100644 (file)
@@ -1,5 +1,6 @@
-// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -emit-llvm -o %t.ll -O1 -disable-llvm-optzns -fms-extensions
-// RUN: %clang_cc1 %s -triple i686-pc-win32 -emit-llvm -o %t.ms.ll -O1 -disable-llvm-optzns -fms-extensions
+// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -emit-llvm -o %t.ll -O1 -disable-llvm-optzns -fms-extensions -fstrict-vtable-pointers
+// RUN: %clang_cc1 %s -triple i686-pc-win32 -emit-llvm -o %t.ms.ll -O1 -disable-llvm-optzns -fms-extensions -fstrict-vtable-pointers
+// FIXME: Assume load should not require -fstrict-vtable-pointers
 
 // RUN: FileCheck --check-prefix=CHECK1 --input-file=%t.ll %s
 // RUN: FileCheck --check-prefix=CHECK2 --input-file=%t.ll %s