<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><br>
</p>
<div class="moz-cite-prefix">On 08/01/2017 11:28 AM, Adrian Prantl
via llvm-commits wrote:<br>
</div>
<blockquote
cite="mid:DBDD2107-4C7E-4F38-9116-F4ED99ADE5E9@apple.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Aug 1, 2017, at 9:24 AM, David Blaikie <<a
moz-do-not-send="true" href="mailto:dblaikie@gmail.com"
class="">dblaikie@gmail.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<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;
-webkit-text-stroke-width: 0px;" class=""><br class="">
<br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Tue, Aug 1, 2017 at 9:04 AM
Adrian Prantl via Phabricator <<a
moz-do-not-send="true"
href="mailto:reviews@reviews.llvm.org" class="">reviews@reviews.llvm.org</a>>
wrote:<br class="">
</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
class="">
<br class="">
<br class="">
================<br class="">
Comment at: lib/Transforms/IPO/GlobalOpt.cpp:1577<br
class="">
+ for(auto *GV : GVs)<br class="">
+ NewGV->addDebugInfo(GV);<br class="">
+<br class="">
----------------<br class="">
NikolaPrica wrote:<br class="">
> aprantl wrote:<br class="">
> > 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 class="">
> 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 class="">
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 class="">
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 class="">
</blockquote>
<div class=""><br class="">
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
class="">
<br class="">
</div>
</div>
</div>
</div>
</blockquote>
<div><br class="">
</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 class="">
<blockquote type="cite" class="">
<div class="">
<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;
-webkit-text-stroke-width: 0px;" class="">
<div class="gmail_quote">
<div class="">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 class="">
</div>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
<br>
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. I think you actually want to
generate a DWARF expression for these.<br>
<br>
-Hal<br>
<br>
<blockquote
cite="mid:DBDD2107-4C7E-4F38-9116-F4ED99ADE5E9@apple.com"
type="cite">
<div>
<div><br class="">
</div>
Agreed, that would be the most practical solution — if we can
prove that it is correct.</div>
<div><br class="">
</div>
<div>-- adrian<br class="">
<blockquote type="cite" class="">
<div class="">
<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;
-webkit-text-stroke-width: 0px;" class="">
<div class="gmail_quote">
<div class=""><br class="">
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 class="">
<br class="">
Just mention it to check/understand what the
optimization is/isn't doing, etc.<br class="">
</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 class="">
<br class="">
<a moz-do-not-send="true"
href="https://reviews.llvm.org/D35994"
rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D35994</a></blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
llvm-commits mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="72">--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
</body>
</html>