r248982 - Decorating virtual functions load with invariant.load
Chandler Carruth via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 30 21:28:42 PDT 2015
On Wed, Sep 30, 2015 at 8:52 PM Piotr Padlewski via cfe-commits <
cfe-commits at lists.llvm.org> wrote:
> Author: prazek
> Date: Wed Sep 30 22:50:41 2015
> New Revision: 248982
>
> URL: http://llvm.org/viewvc/llvm-project?rev=248982&view=rev
> Log:
> Decorating virtual functions load with invariant.load
>
This change description really doesn't tell me anything about what this
change does. Could you try to write more detailed and explanatory change
logs?
Imagine a reader that has little or no context reading the change log to
gain the context necessary to read the actual patch and understand what is
going on with it.
>
> http://reviews.llvm.org/D13279
>
> 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=248982&r1=248981&r2=248982&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
> +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Wed Sep 30 22:50:41 2015
> @@ -1609,7 +1609,16 @@ llvm::Value *ItaniumCXXABI::getVirtualFu
> uint64_t VTableIndex =
> CGM.getItaniumVTableContext().getMethodVTableIndex(GD);
> llvm::Value *VFuncPtr =
> CGF.Builder.CreateConstInBoundsGEP1_64(VTable, VTableIndex, "vfn");
> - return CGF.Builder.CreateAlignedLoad(VFuncPtr, CGF.getPointerAlign());
> + 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;
> }
>
> 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=248982&r1=248981&r2=248982&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/virtual-function-calls.cpp Wed Sep 30
> 22:50:41 2015
> @@ -1,4 +1,5 @@
> // 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 {
> @@ -42,10 +43,14 @@ namespace VirtualNoreturn {
> [[noreturn]] virtual void f();
> };
>
> - // CHECK: @_ZN15VirtualNoreturn1f
> + // CHECK-LABEL: @_ZN15VirtualNoreturn1f
> + // CHECK-INVARIANT-LABEL: define void @_ZN15VirtualNoreturn1f
> void f(A *p) {
> p->f();
> // CHECK: call {{.*}}void %{{[^#]*$}}
> // CHECK-NOT: unreachable
> + // CHECK-INVARIANT: load {{.*}} align 8, !invariant.load
> ![[EMPTY_NODE:[0-9]]]
> }
> }
> +
> +// CHECK-INVARIANT: ![[EMPTY_NODE]] = !{}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151001/a67983e4/attachment.html>
More information about the cfe-commits
mailing list