[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