<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 1, 2017 at 9:43 AM Hal Finkel <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="m_838875341229329508moz-cite-prefix">On 08/01/2017 11:28 AM, Adrian Prantl
      via llvm-commits wrote:<br>
    </div>
    <blockquote type="cite">
      
      <br>
      <div>
        <blockquote type="cite">
          <div>On Aug 1, 2017, at 9:24 AM, David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:</div>
          <br class="m_838875341229329508Apple-interchange-newline">
          <div>
            <div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br>
              <br>
              <div class="gmail_quote">
                <div dir="ltr">On Tue, Aug 1, 2017 at 9:04 AM
                  Adrian Prantl via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank">reviews@reviews.llvm.org</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">aprantl added inline comments.<br>
                  <br>
                  <br>
                  ================<br>
                  Comment at: lib/Transforms/IPO/GlobalOpt.cpp:1577<br>
                  +  for(auto *GV : GVs)<br>
                  +    NewGV->addDebugInfo(GV);<br>
                  +<br>
                  ----------------<br>
                  NikolaPrica wrote:<br>
                  > aprantl wrote:<br>
                  > > I'm not familiar with this transformation:
                  Do we need to add a DIExpression to mask out all but
                  the first bit (i.e. can multiple bools be packed into
                  the same uint32_t such that it could confuse
                  debuggers)?<br>
                  > The debug info which is provided here with
                  addDebugInfo later generates address of the variable
                  (DW_OP_addr: xxxx) in DW_AT_location. If we provide
                  here metadata which is for 1byte variable  the
                  debugger would get confused because the enum type is
                  written as 4-byte and he would try to read 4 bytes.
                  This is just temporary fix until proper way to handle
                  this is found.<br>
                  If I understood you correctly then the best way to
                  represent this would be a `DW_OP_LLVM_fragment
                  /*offset*/0 /*bitsize*/1 (or 8?)`<br>
                  expression. This will get lowered into a
                  DW_OP_bit_piece to tell the debugger that this
                  location is describing of the first n bits of the
                  variable.<br>
                </blockquote>
                <div><br>
                  A slight problem with this is that at least GDB won't
                  print a single value if it's partially unavailable
                  (eg: if it's a struct and the fragment describes one
                  member but not the othe,r I think that's OK - but if
                  it's a single int and only one out of 4 bytes are
                  described - well, the value is known/unknowable).<br>
                  <br>
                </div>
              </div>
            </div>
          </div>
        </blockquote>
        <div><br>
        </div>
        <div>A debugger would have to print the value as something like
          0x??????01 to indicate that pieces are missing. But no
          debugger I'm aware of does that.</div>
        <br>
        <blockquote type="cite">
          <div>
            <div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
              <div class="gmail_quote">
                <div>If this optimization is really based on
                  the proof that the other bytes are unused, never
                  written to or read, then a fragment describing the
                  other bytes as constant zero would be good to have as
                  well.<br>
                </div>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br></div><div bgcolor="#FFFFFF" text="#000000">
    No, it is more complicated than that. See TryToShrinkGlobalToBoolean
    in lib/Transforms/IPO/GlobalOpt.cpp. It is looking for cases where
    the global is only set to one initialized value and one other value.
    In that case, it can make a Boolean global and replace uses of that
    Global with selects over that value.</div></blockquote><div><br>Oh, wait - you mean a variable with value 42 and 87 gets collapsed to a boolean where true/1 is used to represent 42 and false/0 is used to represent 87?<br><br>Oh. Yeah. That's a bit more involved. (but nice that it means we can represent the values exactly - hopefully)<br><br>Thanks!<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"> I think you actually want to
    generate a DWARF expression for these.<br>
    <br>
     -Hal<br>
    <br>
    <blockquote type="cite"></blockquote></div><div bgcolor="#FFFFFF" text="#000000"><blockquote type="cite">
      <div>
        <div><br>
        </div>
        Agreed, that would be the most practical solution — if we can
        prove that it is correct.</div>
      <div><br>
      </div>
      <div>-- adrian<br>
        <blockquote type="cite">
          <div>
            <div dir="ltr" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
              <div class="gmail_quote">
                <div><br>
                  But I doubt that's the case - no doubt if we can see
                  all the reads and writes, we optimize away the writes
                  if we know they won't be read, so we may end up with
                  only the one byte. C'est la vie.<br>
                  <br>
                  Just mention it to check/understand what the
                  optimization is/isn't doing, etc.<br>
                   </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>
                  <br>
                  <a href="https://reviews.llvm.org/D35994" rel="noreferrer" target="_blank">https://reviews.llvm.org/D35994</a></blockquote>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
      <br>
      <fieldset class="m_838875341229329508mimeAttachmentHeader"></fieldset>
      <br>
      <pre>_______________________________________________
llvm-commits mailing list
<a class="m_838875341229329508moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>
<a class="m_838875341229329508moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a>
</pre>
    </blockquote></div><div bgcolor="#FFFFFF" text="#000000">
    <br>
    <pre class="m_838875341229329508moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </div></blockquote></div></div>