<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div><div>Hi,</div><div>  I compile a case (test.c) to get object machine file (test.o) using clang as follows:</div><div>  "clang -target arm -integrated-as -c test.c -o test.o"</div><div>My clang version is 3.3 and debug build.</div><div><br></div><div>//test.c</div><div>int a[6] = {1, 2, 3, 4, 5, 6}</div><div>int main() {</div><div>  a[0] = a[5];</div><div>  a[1] = a[4];</div><div>  a[2] = a[5];</div><div>}</div><div>//end test.c</div><div>Then test.dump is generated by using the objdump tool.</div><div>//test.dump</div><div>ldr  r1, [r0, #20]</div><div>str  r1, [r0]</div><div>ldr  r1, [r0, #16]</div><div>str  r1, [r0, #4]</div><div>ldr  r1, [r0, #12]</div><div>str  r1, [r0, #8]</div><div>bx  lr</div><div>//end test.dump</div><div>From the test.dump, we can see that the first instruction and second one use a register "r1", the 3th and 4th use the same register "r1", it's same to the 5th and 6th instruction.</div><div>That's to say, the six instructions use the same register.</div><div>However, for 3th and 4th instructions, they should be allocated different register from the second instruction.</div><div>So, I insert a breakpoint in BuildSchedGraph function in ScheduleDAGSNodes.cpp to debug the source code.</div><div>Then I get schedule graph of this basic block:</div></div><img src="cid:48a09f7e$2$142f682f01c$Coremail$hndxvon$163.com" orgwidth="723" orgheight="318" style="height: 132px; width: 300px; "><div><div>Like the above graph,  Pre-RA-sched(ScheduleRRList.cpp) is unable to insert the 3th SDNode(load2 instruction) between the first SDNode(load1 Instruction) and the second store1 SDNode.</div><div>Then in the register allocation step, the pair instruction are allocated same register.</div><div>However, if we build a schedule graph like the following:</div></div><div><img src="cid:29472e72$3$142f682f01c$Coremail$hndxvon$163.com" orgwidth="676" orgheight="535" style="height: 237px; width: 300px; "></div><div><br></div><div><div>I think that Pre-RA-sched has change to schedule apart load1 and store1, the same to load2 and store2.</div><div>Have someone considered building such a schedule graph?</div><div>Thank you very much if any suggestion.</div><div>-Haishan</div></div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>