<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>Tim wrote:</div>
<div>> -----Original Message-----<br>

> From: Tim Northover [<a href="mailto:t.p.northover@gmail.com">mailto:t.p.northover@gmail.com</a>]
<br>

> Sent: mercredi 20 juin 2018 11:13<br>

> To: Dominique Torette<br>

> Cc: LLVM Developers Mailing List<br>

> Subject: Re: [llvm-dev] Node deletion during DAG Combination ?</div>
<div>></div>
<div>> So there are 3 steps:</div>
<div>> </div>
<div>> 1. Add the incoming chain of the load you highlighted as an operand to</div>
<div>> this new combined node.</div>
<div>> 2. Create the combined node with an output chain too (essentially just</div>
<div>> an extra MVT::Other output value).</div>
<div> </div>
<div>Steps 1 and 2 have been implemented. t72 has now Chain output.</div>
<div> </div>
<div>    t73: ch = CLPISD::STORE_VECTOR_INSERT_oo t53:1, FrameIndex:i16<1>, t53, Constant:i16<1></div>
<div>  t57: v2f32,ch = load<Volatile LD8[%l1]> t73, FrameIndex:i16<0>, undef:i16</div>
<div>                    t58: v2f32,ch = load<Volatile LD8[%l1]> t57:1, FrameIndex:i16<0>, undef:i16</div>
<div>                    t72: f32,<span style="background-color:lime;">ch</span> = CLPISD::LOAD_VECTOR_EXTRACT_o t57:1, FrameIndex:i16<0>, Constant:i16<0></div>
<div>                  t62: ch = llvm.clp.writeapb.f32 <span style="background-color:yellow;">t58:1</span>, TargetConstant:i16<397>, Constant:i32<24575>, t72</div>
<div> </div>
<div>> 3. Manually call SelectionDAG::ReplaceAllUsesWith to replace all uses</div>
<div>> of the load node's chain with this new one because the generic</div>
<div>> combining logic only knows about the extract being combined. It can't</div>
<div>> automatically tell you've also fiddled about with a load further up</div>
<div>> the DAG.</div>
<div> </div>
<div>SelectionDAG::ReplaceAllUsesWith() was the API I was looking for…</div>
<div>But I have a problem with the 3 implementations of the SelectionDAG::ReplaceAllUsesWith().</div>
<div>They checks somehow the congruency of the returned values types….</div>
<div>t58 returns first a v2f32 while t72 return first a f32 ! This raises assertion. <font face="Wingdings">L</font></div>
<div>I understand such type constraint for general substitution, but in this case the only reference to t58 is the chain from t62.</div>
<div> </div>
<div> </div>
<div> </div>
</span></font>
<br clear="both">
 ------------------------------------------------------------------------------<BR>
<BR>
E-MAIL DISCLAIMER<BR>
<BR>
The present message may contain confidential and/or legally privileged information. If you are not the intended addressee and in case of a transmission error, please notify the sender immediately and destroy this E-mail. Disclosure, reproduction or distribution of this document and its possible attachments is strictly forbidden.<BR>
<BR>
SPACEBEL denies all liability for incomplete, improper, inaccurate, intercepted, (partly) destroyed, lost and/or belated transmission of the current information given that unencrypted electronic transmission cannot currently be guaranteed to be secure or error free.<BR>
Upon request or in conformity with formal, contractual agreements, an originally signed hard copy will be sent to you to confirm the information contained in this E-mail.<BR>
<BR>
SPACEBEL denies all liability where E-mail is used for private use.<BR>
<BR>
SPACEBEL cannot be held responsible for possible viruses that might corrupt this message and/or your computer system.<BR>
 -------------------------------------------------------------------------------<BR>
</body>
</html>