[clang] 23058f9 - [OPENMP]Do not use RTTI by default for NVPTX devices.

Alexey Bataev via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 15 14:52:32 PST 2020


1. The problem is that it does not produce errors, it leads to the
emission of some declaration that cannot be resolved by the linker. This
what I was trying to avoid.

2. Yes, I did not disable it on the host side, just for the device side.
I disabled it only for NVPTX target, which is the device.

-------------
Best regards,
Alexey Bataev

15.01.2020 12:49 PM, Artem Belevich пишет:
> Thank you.
>
> In general, RTTI should probably be treated similar to how we deal
> with inline assembly and ignore errors if they are in the code that
> we're not going to codegen during this side of compilation. E.g.
> during host-side compilation we don't complain about GPU-side
> registers in inline assembly that x86 target is not aware of. 
>
> Disabling RTTI altogether on device side makes it impossible to use in
> any host-side CUDA because RTTI code will be seen by the device-side
> compiler, which will promptly fail, which is exactly what happened in
> this case -- host-side template that relied on RTTI failed during
> device-side compilation:
>
> https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/arena.h#L536
> google/protobuf/arena.h:536:15: error: use of typeid requires -frtti
>     AllocHook(RTTI_TYPE_ID(T), n);
> ...
> 2 errors generated when compiling for sm_60.
>
> --Artem
>
> On Wed, Jan 15, 2020 at 2:36 PM Alexey Bataev <a.bataev at outlook.com
> <mailto:a.bataev at outlook.com>> wrote:
>
>     Sure, will revert it ASAP.
>
>     -------------
>     Best regards,
>     Alexey Bataev
>
>     15.01.2020 12:26 PM, Artem Belevich пишет:
>>     Alexey,
>>
>>     This breaks compilation of our cuda code which happens to
>>     transitively include protobuf headers.
>>     Can you, please, revert it for now until we figure out how RTTI
>>     should be handled?
>>
>>     --Artem
>>
>>     On Tue, Jan 14, 2020 at 3:15 PM Alexey Bataev via cfe-commits
>>     <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>>
>>     wrote:
>>
>>
>>         Author: Alexey Bataev
>>         Date: 2020-01-14T18:12:06-05:00
>>         New Revision: 23058f9dd4d7e18239fd63b6da52549514b45fda
>>
>>         URL:
>>         https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda
>>         DIFF:
>>         https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda.diff
>>
>>         LOG: [OPENMP]Do not use RTTI by default for NVPTX devices.
>>
>>         NVPTX does not support RTTI, so disable it by default.
>>
>>         Added:
>>             clang/test/Driver/openmp-offload-gpu.cpp
>>
>>         Modified:
>>             clang/lib/Driver/ToolChain.cpp
>>
>>         Removed:
>>
>>
>>
>>         ################################################################################
>>         diff  --git a/clang/lib/Driver/ToolChain.cpp
>>         b/clang/lib/Driver/ToolChain.cpp
>>         index cab97b1a601a..3ebbd30195b3 100644
>>         --- a/clang/lib/Driver/ToolChain.cpp
>>         +++ b/clang/lib/Driver/ToolChain.cpp
>>         @@ -68,7 +68,8 @@ static ToolChain::RTTIMode
>>         CalculateRTTIMode(const ArgList &Args,
>>            }
>>
>>            // -frtti is default, except for the PS4 CPU.
>>         -  return (Triple.isPS4CPU()) ? ToolChain::RM_Disabled :
>>         ToolChain::RM_Enabled;
>>         +  return (Triple.isPS4CPU() || Triple.isNVPTX()) ?
>>         ToolChain::RM_Disabled
>>         +                                                 :
>>         ToolChain::RM_Enabled;
>>          }
>>
>>          ToolChain::ToolChain(const Driver &D, const llvm::Triple &T,
>>
>>         diff  --git a/clang/test/Driver/openmp-offload-gpu.cpp
>>         b/clang/test/Driver/openmp-offload-gpu.cpp
>>         new file mode 100644
>>         index 000000000000..9da7308506ae
>>         --- /dev/null
>>         +++ b/clang/test/Driver/openmp-offload-gpu.cpp
>>         @@ -0,0 +1,20 @@
>>         +///
>>         +/// Perform several driver tests for OpenMP offloading
>>         +///
>>         +
>>         +// REQUIRES: clang-driver
>>         +// REQUIRES: x86-registered-target
>>         +// REQUIRES: powerpc-registered-target
>>         +// REQUIRES: nvptx-registered-target
>>         +
>>         +///
>>         ###########################################################################
>>         +
>>         +/// PTXAS is passed -c flag by default when offloading to an
>>         NVIDIA device using OpenMP
>>         +/// Check that the flag is passed when
>>         -fopenmp-relocatable-target is used.
>>         +// RUN:   %clangxx -### -fopenmp=libomp
>>         -fopenmp-targets=nvptx64-nvidia-cuda \
>>         +// RUN:          -save-temps -no-canonical-prefixes %s -x
>>         c++ -c 2>&1 \
>>         +// RUN:   | FileCheck -check-prefix=CHK-RTTI %s
>>         +
>>         +// CHK-RTTI: clang{{.*}}" "-triple" "nvptx64-nvidia-cuda"
>>         +// CHK-RTTI-SAME: "-fno-rtti"
>>         +
>>
>>
>>
>>         _______________________________________________
>>         cfe-commits mailing list
>>         cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>>         https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>>
>>
>>     -- 
>>     --Artem Belevich
>
>
>
> -- 
> --Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200115/465dbd17/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200115/465dbd17/attachment.sig>


More information about the cfe-commits mailing list