<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thanks for the report Kevin!<div class=""><br class=""></div><div class="">I’ve posted a tentative fix there for you to try.</div><div class="">I haven’t tested it myself yet, but I’ll write a test case for it.<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On May 7, 2019, at 1:17 PM, Kevin Choi <<a href="mailto:code.kchoi@gmail.com" class="">code.kchoi@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""><p class="">Hi Quentin,</p><p class="">MyInst is a custom instruction that has implicit-defs of fixed
registers. The implicit-defs are seen at the end of Instruction
Selection. <br class="">
I'd like to add a report, but I am working on an out-of-tree
backend based on 7.0. I can try to help reduce the testcase down.<br class="">
Filed <a class="moz-txt-link-freetext" href="https://bugs.llvm.org/show_bug.cgi?id=41790">https://bugs.llvm.org/show_bug.cgi?id=41790</a><br class="">
</p><p class="">Regards,<br class="">
Kevin<br class="">
</p>
<div class="moz-cite-prefix">On 2019-05-07 3:45 p.m., Quentin
Colombet wrote:<br class="">
</div>
<blockquote type="cite" cite="mid:0F7DC12B-58E7-434A-896D-92DF3F72058A@apple.com" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252" class="">
Hi Kevin,
<div class=""><br class="">
</div>
<div class="">That sounds like a bug :).</div>
<div class=""><br class="">
</div>
<div class="">When is the implicit-def added?</div>
<div class=""><br class="">
</div>
<div class="">What I am thinking is if it gets added after we
computed the live intervals, then we may miss it is there.</div>
<div class=""><br class="">
</div>
<div class="">Could you file a public report?</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class="">-Quentin<br class="">
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On May 6, 2019, at 3:13 PM, Kevin Choi via
llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="content-type" content="text/html;
charset=windows-1252" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""><p class="">Hi LLVM,</p><p class="">I ran into a case where RegAlloc would
insert a spill across instruction that had same
register for output operand and implicit-def. The
effect this had was that spill code would immediately
overwrite the output result. Is this the expected
result of setting up MyInst this way? In other words,
does RegAlloc know to not insert spill in case it sees
that output reg is same as one of implicit-def?</p><p class="">If this is intended (always spilling live
regs across implicit-def inst?), I am puzzled on how
to use MyInst that has variable output reg with static
implicit-defs. Any tips would be greatly appreciated.</p><p class="">Reduced Example:<br class="">
</p><p class=""><u class=""><b class="">Before RegAlloc:</b></u><br class="">
%1:reg = COPY ...;<br class="">
%2:reg = MyInst %1:reg, ..., implicit-def dead $p1,
...;<br class="">
%3:reg = Use %2:reg</p>
<u class=""><b class="">RegAlloc:</b></u><br class="">
>> %2:reg = MyInst %1:reg, ..., implicit-def dead
$p1, ...;<br class="">
Regs: $p1=%1<br class="">
Killing last use: %1:reg<br class="">
Assigning %2 to $p1<br class="">
Spilling %2 in $p1 to stack slot #2 <-- suspicious
if this is inserting spill, unaware of output reg being
same<br class="">
<< $p1 =MyInst killed $p1, ..., implicit-def dead
$p1, ...;
<p class=""><b class=""><u class="">After RegAlloc:</u></b><br class="">
$p1 = COPY ...;<br class="">
Store $p1 %stack.2;<br class="">
$p1 =MyInst killed $p1, ..., implicit-def dead $p1,
...;<br class="">
$p1 = Load %stack.2;<br class="">
$p2 = Use $p1, ...;</p><p class=""><br class="">
</p><p class="">Best Regards,</p><p class="">Kevin<br class="">
</p>
</div>
_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" class="" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br class="">
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</blockquote>
</div>
</div></blockquote></div><br class=""></div></body></html>