]> granicus.if.org Git - clang/commit
[CUDA] Make vtable construction aware of host/device side of CUDA compilation.
authorArtem Belevich <tra@google.com>
Thu, 17 Dec 2015 18:12:36 +0000 (18:12 +0000)
committerArtem Belevich <tra@google.com>
Thu, 17 Dec 2015 18:12:36 +0000 (18:12 +0000)
commitf92cc92aa1b6204eacc2a775455e7fc97b4f0d7b
treed8697e87495694d8afca9670e8c6d0aaa1609fd1
parentcd80fb3bfd1ae135848d28c5c21783a68380ead6
[CUDA] Make vtable construction aware of host/device side of CUDA compilation.

C++ emits vtables for classes that have key function present in the
current TU. While we compile CUDA the fact that key function was found
in this TU does not mean that we are going to generate code for it. E.g.
vtable for a class with host-only methods should not (and can not) be
generated on device side, because we'll never generate code for them
during device-side compilation.

This patch adds an extra CUDA-specific check during key method computation
and filters out potential key methods that are not suitable for this side
of CUDA compilation.

When we codegen vtable, entries for unsuitable methods are set to null.

Differential Revision: http://reviews.llvm.org/D15309

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255911 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/RecordLayoutBuilder.cpp
lib/CodeGen/CGVTables.cpp
test/CodeGenCUDA/device-vtable.cu [new file with mode: 0644]