<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:54 AM, David Blaikie
wrote:<br>
</div>
<blockquote
cite="mid:CAENS6EvM7VPmpJZg6CDwzSvYSide9ByFvQB5cSAKBneu+PewTA@mail.gmail.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div dir="ltr"><br>
<br>
<div class="gmail_quote">
<div dir="ltr">On Tue, Aug 1, 2017 at 9:43 AM Hal Finkel <<a
moz-do-not-send="true" 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
moz-do-not-send="true"
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
moz-do-not-send="true"
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>
</div>
</div>
</div>
</blockquote>
<br>
Yes. The code does this:<br>
<br>
// Change the load into a load of bool then a select.<br>
LoadInst *LI = cast<LoadInst>(UI);<br>
LoadInst *NLI = new LoadInst(NewGV, LI->getName()+".b",
false, 0,<br>
LI->getOrdering(),
LI->getSyncScopeID(), LI);<br>
Value *NSI;<br>
if (IsOneZero)<br>
NSI = new ZExtInst(NLI, LI->getType(), "", LI);<br>
else<br>
NSI = SelectInst::Create(NLI, OtherVal, InitVal, "", LI);<br>
NSI->takeName(LI);<br>
LI->replaceAllUsesWith(NSI);<br>
<br>
-Hal<br>
<br>
<blockquote
cite="mid:CAENS6EvM7VPmpJZg6CDwzSvYSide9ByFvQB5cSAKBneu+PewTA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div><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>
</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 moz-do-not-send="true"
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 moz-do-not-send="true" class="m_838875341229329508moz-txt-link-abbreviated" href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>
<a moz-do-not-send="true" 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>
</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>