<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Tim,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<font size="2"><span style="font-size:11pt">>That C++ function is probably what looks for an FrameIndex node and</span></font></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<font size="2"><span style="font-size:11pt">>has been taught that it can be folded into the load.</span></font></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<font size="2"><span style="font-size:11pt"><br>
</span></font></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<font size="2"><span style="font-size:11pt">How do you teach a function that a node can be folded into an instruction?</span></font><br>
</div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> Tim Northover <t.p.northover@gmail.com><br>
<b>Sent:</b> Monday, January 21, 2019 11:52 PM<br>
<b>To:</b> Josh Sharp<br>
<b>Cc:</b> via llvm-dev<br>
<b>Subject:</b> Re: [llvm-dev] Different SelectionDAGs for same CPU</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Hi Josh,<br>
<br>
On Tue, 22 Jan 2019 at 04:54, Josh Sharp via llvm-dev<br>
<llvm-dev@lists.llvm.org> wrote:<br>
> In the first case, node t1 is a separate node whereas in the second case, t1 is inside t4. What difference in implementation could explain this difference in behavior?<br>
<br>
The second compiler looks like someone has added extra code to fold a<br>
stack address calculation into the load operation that accesses the<br>
variable.<br>
<br>
> Where in the code should I look into?<br>
<br>
It could be implemented in a couple of places. Most likely is that<br>
XYZInstrInfo.td (or some related TableGen file) defines a<br>
ComplexPattern that is used by the LDWI instruction definition. That<br>
ComplexPattern tells pattern matching to call a specific function in<br>
XYZISelDAGToDAG.cpp when deciding what to use for the LDWI operands.<br>
That C++ function is probably what looks for an FrameIndex node and<br>
has been taught that it can be folded into the load.<br>
<br>
If you just grep the target's code for FrameIndex or frameindex you<br>
should find it pretty quickly though, even if they used some other<br>
method. There don't tend to be many uses of that particular node.<br>
<br>
Cheers.<br>
<br>
Tim.<br>
</div>
</span></font></div>
</body>
</html>