<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020 at 3:09 PM Alexey Bataev <<a href="mailto:a.bataev@outlook.com">a.bataev@outlook.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>And I disabled it only for device side, which is NVPTX, no? Can
host side target class report that the target is NVPTX? If you
look at the patch, it disable RTTI only if current triple is
NVPTX. Can it be true for the host? <br></p></div></blockquote><div><div class="gmail_default" style="font-family:verdana,sans-serif">You are correct that the NVPTX as the triple is never used for the host compilation.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">However, I'm talking about host-side *code* as seen by compiler during device-side *compilation*. Keep in mind that both host and device compilations always see both sides of the source code. The host code seen by the compiler during device-side compilation should be allowed to use host features that are not available on GPU.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">When you RTTI got disabled for NVPTX, it affected *all* code seen by the compiler. When GPU-side compiler that targets NVPTX with RTTI disabled gets to parse the host function hf() (<a href="https://godbolt.org/z/Gzsrof" target="_blank">https://godbolt.org/z/Gzsrof</a>) it sees typeid() and complains that RTTI is disabled, even though it will never produce any code for hf(). It should've allowed RTTI use in the host-only code.</div></div><div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><div><span style="font-family:verdana,sans-serif">--Artem</span><br></div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>
</p>
<pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
<div>15.01.2020 1:06 PM, Artem Belevich
пишет:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div dir="ltr">
<div style="font-family:verdana,sans-serif"><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020 at 2:52
PM Alexey Bataev <<a href="mailto:a.bataev@outlook.com" target="_blank">a.bataev@outlook.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>1. The problem is that it does not produce errors, </p>
</div>
</blockquote>
<div><span class="gmail_default" style="font-family:verdana,sans-serif">ATM, it does
produce errors when it's disabled.</span> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>it leads to the emission of some declaration that
cannot be resolved by the linker. This what I was trying
to avoid.</p>
</div>
</blockquote>
<div>
<div style="font-family:verdana,sans-serif">I'm OK with
disabling it on device, but it should be done in a way to
keep RTTI in the host code working.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">E.g. this code
should compile: <a href="https://godbolt.org/z/Gzsrof" target="_blank">https://godbolt.org/z/Gzsrof</a></div>
<div style="font-family:verdana,sans-serif">It still has your
original change, so clang compilation fails. It does not
with NVCC.</div>
</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>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.<br>
</p>
</div>
</blockquote>
<div>
<div style="font-family:verdana,sans-serif">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.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">--Artem</div>
<br>
</div>
<div><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p> </p>
<pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
<div>15.01.2020 12:49 PM, Artem Belevich пишет:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div style="font-family:verdana,sans-serif">Thank you.</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">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. </div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">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:</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif"><a href="https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/arena.h#L536" target="_blank">https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/arena.h#L536</a><br>
</div>
<div style="font-family:verdana,sans-serif">google/protobuf/arena.h:536:15:
error: use of typeid requires -frtti<br>
AllocHook(RTTI_TYPE_ID(T), n);<br>
</div>
<div style="font-family:verdana,sans-serif">...<br>
</div>
<div style="font-family:verdana,sans-serif">2 errors
generated when compiling for sm_60.<br>
</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">--Artem</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020
at 2:36 PM Alexey Bataev <<a href="mailto:a.bataev@outlook.com" target="_blank">a.bataev@outlook.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Sure, will revert it ASAP.<br>
</p>
<pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
<div>15.01.2020 12:26 PM, Artem Belevich пишет:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div style="font-family:verdana,sans-serif">Alexey,</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">This
breaks compilation of our cuda code which
happens to transitively include protobuf
headers.</div>
<div style="font-family:verdana,sans-serif">Can
you, please, revert it for now until we
figure out how RTTI should be handled?</div>
<div style="font-family:verdana,sans-serif"><br>
</div>
<div style="font-family:verdana,sans-serif">--Artem<br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Jan
14, 2020 at 3:15 PM Alexey Bataev via
cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Alexey Bataev<br>
Date: 2020-01-14T18:12:06-05:00<br>
New Revision:
23058f9dd4d7e18239fd63b6da52549514b45fda<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda.diff</a><br>
<br>
LOG: [OPENMP]Do not use RTTI by default for
NVPTX devices.<br>
<br>
NVPTX does not support RTTI, so disable it
by default.<br>
<br>
Added: <br>
clang/test/Driver/openmp-offload-gpu.cpp<br>
<br>
Modified: <br>
clang/lib/Driver/ToolChain.cpp<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff --git a/clang/lib/Driver/ToolChain.cpp
b/clang/lib/Driver/ToolChain.cpp<br>
index cab97b1a601a..3ebbd30195b3 100644<br>
--- a/clang/lib/Driver/ToolChain.cpp<br>
+++ b/clang/lib/Driver/ToolChain.cpp<br>
@@ -68,7 +68,8 @@ static ToolChain::RTTIMode
CalculateRTTIMode(const ArgList &Args,<br>
}<br>
<br>
// -frtti is default, except for the PS4
CPU.<br>
- return (Triple.isPS4CPU()) ?
ToolChain::RM_Disabled :
ToolChain::RM_Enabled;<br>
+ return (Triple.isPS4CPU() ||
Triple.isNVPTX()) ? ToolChain::RM_Disabled<br>
+
: ToolChain::RM_Enabled;<br>
}<br>
<br>
ToolChain::ToolChain(const Driver &D,
const llvm::Triple &T,<br>
<br>
diff --git
a/clang/test/Driver/openmp-offload-gpu.cpp
b/clang/test/Driver/openmp-offload-gpu.cpp<br>
new file mode 100644<br>
index 000000000000..9da7308506ae<br>
--- /dev/null<br>
+++
b/clang/test/Driver/openmp-offload-gpu.cpp<br>
@@ -0,0 +1,20 @@<br>
+///<br>
+/// Perform several driver tests for OpenMP
offloading<br>
+///<br>
+<br>
+// REQUIRES: clang-driver<br>
+// REQUIRES: x86-registered-target<br>
+// REQUIRES: powerpc-registered-target<br>
+// REQUIRES: nvptx-registered-target<br>
+<br>
+///
###########################################################################<br>
+<br>
+/// PTXAS is passed -c flag by default when
offloading to an NVIDIA device using OpenMP<br>
+/// Check that the flag is passed when
-fopenmp-relocatable-target is used.<br>
+// RUN: %clangxx -### -fopenmp=libomp
-fopenmp-targets=nvptx64-nvidia-cuda \<br>
+// RUN: -save-temps
-no-canonical-prefixes %s -x c++ -c
2>&1 \<br>
+// RUN: | FileCheck
-check-prefix=CHK-RTTI %s<br>
+<br>
+// CHK-RTTI: clang{{.*}}" "-triple"
"nvptx64-nvidia-cuda"<br>
+// CHK-RTTI-SAME: "-fno-rtti"<br>
+<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr">
<div dir="ltr">--Artem Belevich</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr">
<div dir="ltr">--Artem Belevich</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr">
<div dir="ltr">--Artem Belevich</div>
</div>
</div>
</blockquote>
</div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">--Artem Belevich</div></div></div>