summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2015-10-01 12:58:41 +0000
committerRenato Golin <renato.golin@linaro.org>2015-10-01 12:58:41 +0000
commit41106188a4fea286c094fc201e8066b416455463 (patch)
tree25d6cbdf2e91b430d3210affb9589cd705d454ea
parent2960f3a3466a46ff438f9dcf5f35b92e57398348 (diff)
downloadbcm5719-llvm-41106188a4fea286c094fc201e8066b416455463.tar.gz
bcm5719-llvm-41106188a4fea286c094fc201e8066b416455463.zip
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. llvm-svn: 249005
-rw-r--r--clang/lib/CodeGen/ItaniumCXXABI.cpp11
-rw-r--r--clang/test/CodeGenCXX/virtual-function-calls.cpp7
2 files changed, 2 insertions, 16 deletions
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 37b49dc6086..8392f6a7ba2 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -1609,16 +1609,7 @@ llvm::Value *ItaniumCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
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(
diff --git a/clang/test/CodeGenCXX/virtual-function-calls.cpp b/clang/test/CodeGenCXX/virtual-function-calls.cpp
index 76fc7bcf5ce..0a6fc6b3f28 100644
--- a/clang/test/CodeGenCXX/virtual-function-calls.cpp
+++ b/clang/test/CodeGenCXX/virtual-function-calls.cpp
@@ -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]] = !{}
OpenPOWER on IntegriCloud