<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi <span class="_2LDBlAH0cF64rqMHa4viCd"><span class="VHquDtYElxQkNvZKxCJct lpc-hoverTarget" data-lpc-hover-target-id="react-target-v2-6318" tabindex="0" data-is-focusable="true"><span>Krzysztof</span></span></span>,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for the explanation. How about adding the requirement that not only all those uses are by the same node but also that the node is within the sub-DAG being matched?</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Best regards,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thomas<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Krzysztof Parzyszek via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> 19 October 2020 16:53<br>
<b>To:</b> llvm-dev@lists.llvm.org <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] Single use rule for chained node in pattern matcher</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Single-use is an easy condition to check, easier than analyzing the consequences of folding a sub-DAG on a case by case basis.<br>
<br>
In general, chain edges can appear. Consider this case (with arrows being chains):<br>
<br>
A --> C<br>
 \   /<br>
   B<br>
<br>
The chains are A->C, B->C, assume B has multiple uses, but A and C are single-use.  If ABC gets matched to T, B must remain due to the extra uses, and we end up with T having a cyclic chain edges with B.<br>
<br>
--<br>
Krzysztof Parzyszek  <a href="mailto:kparzysz@quicinc.com">mailto:kparzysz@quicinc.com</a>   AI tools development<br>
<br>
From: llvm-dev <llvm-dev-bounces@lists.llvm.org> On Behalf Of Thomas Preud'homme via llvm-dev<br>
Sent: Monday, October 19, 2020 4:40 AM<br>
To: llvm-dev <llvm-dev@lists.llvm.org><br>
Cc: Chris Lattner <clattner@llvm.org><br>
Subject: [EXT] [llvm-dev] Single use rule for chained node in pattern matcher<br>
<br>
Hi,<br>
<br>
I'm trying to write a pattern for a truncating strict​*floating-point instruction that broadcast the result in the resulting register. However the pattern is not recognized by the pattern matcher because the any_fpround node is used more than once due to the
 broadcasting. I'm not quite sure I understand the reason behind that single use rule [1] (introduced by commit [2]) but all the uses are within the same pattern, as arguments of the same node even. Is there a way to relax the single use rule to allow uses
 in the same node? If not, how would you suggest I go about implementing pattern matching for this instruction?<br>
<br>
[1] <a href="https://reviews.llvm.org/source/llvm-github/browse/master/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp$3214-3228">
https://reviews.llvm.org/source/llvm-github/browse/master/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp$3214-3228</a><br>
[2] <a href="https://reviews.llvm.org/rGf8695c1ee9bb8b18a4e1991591fa92383d427435">
https://reviews.llvm.org/rGf8695c1ee9bb8b18a4e1991591fa92383d427435</a><br>
<br>
Thanks in advance for your help. Best regards,<br>
<br>
Thomas<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
llvm-dev@lists.llvm.org<br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</span></font></div>
</body>
</html>