<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>