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.bat...@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@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@lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
> --
> --Artem Belevich
>
>

-- 
--Artem Belevich
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to