On Wed, Jan 15, 2020 at 2:52 PM Alexey Bataev <a.bat...@outlook.com> wrote:
> 1. The problem is that it does not produce errors, > ATM, it does produce errors when it's disabled. > it leads to the emission of some declaration that cannot be resolved by > the linker. This what I was trying to avoid. > I'm OK with disabling it on device, but it should be done in a way to keep RTTI in the host code working. E.g. this code should compile: https://godbolt.org/z/Gzsrof It still has your original change, so clang compilation fails. It does not with NVCC. 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. > It's fine to disable it for code generated for the target. However, the front-end needs to be able to deal with the host-side code where it is OK to use RTTI. --Artem > ------------- > 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.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 > > -- --Artem Belevich
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits