<div dir="ltr">Tim and all,<div><br></div><div>thanks to Tim, now i started  to understand the basic theory.</div><div><br></div><div>my understanding of the problem was as follows.</div><div>1) 16-bit ADD/SUB, has four loads: ld a,ld a+1, ld b,ld b+1. they were the operands of  the said TF node</div>
<div>2) ADDC  happends after  ld a,lb b, so  the TF node  happens before ADDC</div><div>3) ADDE  happends after ADDC</div><div>4) ADDE modifies a+1, so it must happen before the <span style="font-family:arial,sans-serif;font-size:13px">subsequent</span><span style="font-family:arial,sans-serif;font-size:13px"> </span>STORE. so the input chain update makes sense.</div>
<div><br></div><div>the problem here was. that the TF happends before ADDC is not wrong, but ld a+1, ld b+1 can happen after ADDC.</div><div><br></div><div>if we split the TF node into two:</div><div>TF1:ld a,ld b</div><div>
TF2: ld a_1,ld b+1</div><div> then the problem should be gone.</div><div><br></div><div>Cheers.</div><div><br></div><div>hilbert</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 28, 2014 at 2:03 PM, Tim Northover <span dir="ltr"><<a href="mailto:t.p.northover@gmail.com" target="_blank">t.p.northover@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Hilbert,<br>
<div class=""><br>
> i  had not understood the purpose of a TF node.<br>
> my understanding was, the operands  were  not loaded together in one node. they were loaded separately.<br>
<br>
</div>The loads happen separately, but the TokenFactor node says that<br>
whichever order they do happen in, they *both* have to be before<br>
whatever comes next (the user of the TokenFactor). It's there to<br>
constrain LLVM's scheduling.<br>
<div class=""><br>
> 4) replace any operands of the TF Node with ADDE did not make sense.<br>
<br>
</div>It does to me. Before we were saying that the load of "a+1" had to<br>
happen before X (which might be, for example, a subsequent write to<br>
the 16-bit variable "a"). If that load has been folded into an ADDE,<br>
then that ADDE has to happen before X too.<br>
<div class=""><br>
> 3)the DAG after ADDC was seleced:<br>
<br>
</div>Now that's one thing I don't understand. The ADDC should be "above"<br>
the ADDE in the DAG since the ADDE depends on the output of the ADDC.<br>
How did it get selected first?<br>
<br>
The DAGs you posted aren't really that useful I'm afraid: deciphering<br>
the text layout is a massive pain in the neck; the machine nodes are<br>
given purely by number (I have no idea what they are); your first dump<br>
appears to be from half way through ISel (which *is* interesting), but<br>
I'd mostly like before & after to begin with.<br>
<br>
Cheers.<br>
<span class="HOEnZb"><font color="#888888"><br>
Tim.<br>
</font></span></blockquote></div><br></div>