r249005 - Revert "Decorating virtual functions load with invariant.load" and fix

Renato Golin via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 1 05:58:41 PDT 2015


Author: rengolin
Date: Thu Oct  1 07:58:41 2015
New Revision: 249005

URL: http://llvm.org/viewvc/llvm-project?rev=249005&view=rev
Log:
Revert "Decorating virtual functions load with invariant.load" and fix

This reverts commit r248982 as it was breaking the ARM buildbots and the fix didn't work.
This reverts commit r248984, the fix that didn't work.

Modified:
    cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
    cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp

Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=249005&r1=249004&r2=249005&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Thu Oct  1 07:58:41 2015
@@ -1609,16 +1609,7 @@ llvm::Value *ItaniumCXXABI::getVirtualFu
   uint64_t VTableIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
   llvm::Value *VFuncPtr =
       CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
-  auto *Inst = CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign());
-
-  // It's safe to add "invariant.load" without -fstrict-vtable-pointers, but it
-  // would not help in devirtualization.
-  if (CGM.getCodeGenOpts().OptimizationLevel > 0 &&
-      CGM.getCodeGenOpts().StrictVTablePointers)
-    Inst->setMetadata(llvm::LLVMContext::MD_invariant_load,
-                      llvm::MDNode::get(CGM.getLLVMContext(),
-                                        llvm::ArrayRef<llvm::Metadata *>()));
-  return Inst;
+  return CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign());
 }
 
 llvm::Value *ItaniumCXXABI::EmitVirtualDestructorCall(

Modified: cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp?rev=249005&r1=249004&r2=249005&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp Thu Oct  1 07:58:41 2015
@@ -1,5 +1,4 @@
 // RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - -fstrict-vtable-pointers -O1 | FileCheck --check-prefix=CHECK-INVARIANT %s
 
 // PR5021
 namespace PR5021 {
@@ -43,14 +42,10 @@ namespace VirtualNoreturn {
     [[noreturn]] virtual void f();
   };
 
-  // CHECK-LABEL: @_ZN15VirtualNoreturn1f
-  // CHECK-INVARIANT-LABEL: define void @_ZN15VirtualNoreturn1f
+  // CHECK: @_ZN15VirtualNoreturn1f
   void f(A *p) {
     p->f();
     // CHECK: call {{.*}}void %{{[^#]*$}}
     // CHECK-NOT: unreachable
-    // CHECK-INVARIANT: load {{.*}} !invariant.load ![[EMPTY_NODE:[0-9]]]
   }
 }
-
-// CHECK-INVARIANT: ![[EMPTY_NODE]] = !{}




More information about the cfe-commits mailing list