<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Sep 13, 2017, at 9:03 PM, jin chuan see via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div id="divtagdefaultwrapper" dir="ltr" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif;" class=""><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span id="ms-rterangepaste-start" class=""></span></p><div class="">Hi All,<br class=""><br class="">Thanks for the reply. I managed to identify and fixed a few errors in my implementation.<br class=""><br class="">However, there are a few errors that i am not sure what is it indicating.<br class="">For starters, i think i should explain what i am trying to achieve.<br class=""><br class="">I am actually working on MIPS backend to generate smaller set of MIPS Instructions compared to its existing supported instructions.<br class="">Currently, i am working on shifting instructions.<br class=""><br class="">Take an example:<br class="">A typical mips sllv syntax goes in this manner:<br class=""><br class="">         sllv $reg1,$reg2,$reg3<br class=""><br class="">The $reg3 contains the shifting amount. Only the LSB 5 bit will be used.<br class="">The $reg2 contains the data to be shifted.<br class="">The $reg1 contains the data after shifting is performed.<br class=""><br class="">What i want to achieve is to expand sllv instruction to the following routine:<br class=""><br class="">                 andi $reg3,$reg3,0x1f         //To mask the 5 bit LSB shifting amount<span class="Apple-converted-space"> </span><br class="">#BB_1:    beq  $reg3,$zero,#BB_2    //Branch out from basic block if shifting amount is zero<br class="">                 sub  $reg3,$reg3,1              //To subtract 1 from the shifting amount<br class="">                 sll  $reg2,$reg2,1                //Shift by 1 bit<br class="">                 j    #BB_1                              //Branch back to the begining of the routine<br class="">#BB_2:    addu $reg1,$reg2,$zero    //Transfer the completed shift data to the original destination register<br class=""><br class="">Since you guys mentioned that the MI are represented in MachineSSA form, i imagined my routine represented by virtual registers would look something like this:<br class=""><br class="">                andi $vreg3,$vreg3,0x1f         <br class="">#BB_1:   beq  $vreg3,$zero,#BB_2        <br class="">                sub  $vreg3,$vreg3,1           <br class="">                sll  $vreg2,$vreg2,1           <br class="">                j    #BB_1               <br class="">#BB_2:  addu $vreg1,$vreg2,$zero           <br class=""><br class="">With the -verify-machineinstrs invoked together with llc, the errors i encountered are as follow:<br class="">1. *** Bad machine code: Explicit definition marked as use ***<br class="">- function:    main<br class="">- basic block: BB#1 entry (0x546e600)<br class="">- instruction: SUB<br class="">- operand 0:   %vreg3<br class=""></div></div></div></blockquote><div><br class=""></div><div>That usually means that when you created your instruction and added the register operand to it you forgot to set the RegisterDefined state.</div><br class=""><blockquote type="cite" class=""><div class=""><div id="divtagdefaultwrapper" dir="ltr" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif;" class=""><div class=""><br class=""><br class="">2.*** Bad machine code: Explicit definition marked as use ***<br class="">- function:    main<br class="">- basic block: BB#1 entry (0x546e600)<br class="">- instruction: SLL<br class="">- operand 0:   %vreg2<span class="Apple-converted-space"> </span><br class=""></div></div></div></blockquote><div><br class=""></div>Ditto.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div id="divtagdefaultwrapper" dir="ltr" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif;" class=""><div class=""><br class=""><br class="">3.*** Bad machine code: Non-terminator instruction after the first terminator ***<br class="">- function:    main<br class="">- basic block: BB#1 entry (0x4911600)<br class="">- instruction: SUB<br class="">First terminator was:    BEQ %vreg3, %ZERO, <BB#2>, %AT<imp-def>; GPR32:%vreg3<br class=""></div></div></div></blockquote><div><br class=""></div>That means you inserted your instructions after the jump of the basic block. Use getFirstTerminator as insertion point.<br class=""><blockquote type="cite" class=""><div class=""><div id="divtagdefaultwrapper" dir="ltr" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif;" class=""><div class=""><br class=""><br class="">4.*** Bad machine code: Non-terminator instruction after the first terminator ***<br class="">- function:    main<br class="">- basic block: BB#1 entry (0x4632600)<br class="">- instruction: SLL<br class="">First terminator was:    BEQ %vreg3, %ZERO, <BB#2>, %AT<imp-def>; GPR32:%vreg3<br class=""></div></div></div></blockquote><div><br class=""></div>Ditto.</div><div><br class=""><blockquote type="cite" class=""><div class=""><div id="divtagdefaultwrapper" dir="ltr" style="font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-size: 12pt; font-family: Calibri, Helvetica, sans-serif;" class=""><div class=""><br class=""><br class="">Here are a few questions i would like to ask:<br class="">1.Assuming that $vreg1,$vreg2 and $vreg3 are defined before #BB_1, based on my suggested routine, have i broke the integrity of the MachineSSA form?<br class=""><br class="">2.What is error 1 and 2 trying to tell me? I believe it has something to do with the define and kill of the virtual register states.<span class="Apple-converted-space"> </span><br class=""><br class="">3.I am actually not sure about data-flow analysis.I did looked through MachineOperand class. Inside there shows the register states such as IsDef,IsDead,IsKill and etc. What are the definition for those register states? I am not sure what to do with the states, so i didn't really pass the virtual register states when i invoked BuildMI() to insert my desired MI. Are there any recommended sources or documentions i can look into so that i could learn more about data-flow analysis or understand the definition for each of the register states?  <br class=""><br class="">4.For error 3 and 4, does it mean i should group the other instructions after branch into another basic block?<br class=""><br class="">5.For #BB_1, i actually notice another error. If i add more than one successor for it, the llvm actually complains unconditional branch does not have exactly one successor. I had to seperate the jump instruction into another basic block. Is it wrong to have to 2 branching instructions in one basic block?<span class="Apple-converted-space"> </span><br class=""><br class="">6.My implementation seems to work only for -O1,-O2,-O3 invocation of llc. The -O0 invocation results in a lot of unecessary spilling and reloading code and causes the behavior of my code to be undefined. Matthias did mentioned that it could be due to the register allocator of O0. What should i look into so that my approach could work for all register allocator?<br class=""><br class="">I might asking for too much, but to be honest, i am actually very new to compiler study. I had to admit i need to study more about compiler techniques.<br class="">Can you guys recommend me books to study about compiler techniques?<span class="Apple-converted-space"> </span><br class="">If you guys find troubled to answer my questions, can you guys at least recommend me some sources or documentations so that i can look into myself?<span class="Apple-converted-space"> </span><br class=""><br class="">Thanks in advance.<span class="Apple-converted-space"> </span><br class="">Chuan<br class="">       <span class="Apple-converted-space"> </span><br class="">   <span class="Apple-converted-space"> </span><br class=""></div><span id="ms-rterangepaste-end" class=""></span><br class=""><p style="margin-top: 0px; margin-bottom: 0px;" class=""></p><br class=""><br class=""><div style="" class=""><hr tabindex="-1" style="display: inline-block; width: 942.75px;" class=""><div id="divRplyFwdMsg" dir="ltr" class=""><font face="Calibri, sans-serif" style="font-size: 11pt;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span>Song, Ruiling <<a href="mailto:ruiling.song@intel.com" class="">ruiling.song@intel.com</a>><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Tuesday, September 12, 2017 9:17 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>jin chuan see; Matthias Braun<br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>RE: [llvm-dev] Live Register Spilling</font><div class=""> </div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class="">Running llc with ‘-verify-machineinstrs’ may tell you which instruction break the SSA form.</span></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""> </span></p><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class="">Ruiling</span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><a name="_MailEndCompose" class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""> </span></a></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0in 0in 0in 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><b class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span class="Apple-converted-space"> </span>llvm-dev [<a href="mailto:llvm-dev-bounces@lists.llvm.org" class="">mailto:llvm-dev-bounces@lists.llvm.org</a>]<span class="Apple-converted-space"> </span><b class="">On Behalf Of<span class="Apple-converted-space"> </span></b>jin chuan see via llvm-dev<br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Monday, September 11, 2017 10:02 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Matthias Braun <<a href="mailto:mbraun@apple.com" class="">mbraun@apple.com</a>><br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-dev] Live Register Spilling</span></div></div></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""> </p><div id="divtagdefaultwrapper" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Sorry about the previous message</span></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">This message showed up:</span></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">llc: /home/jc/Desktop/Project/For_Testing/llvm/lib/CodeGen/MachineRegisterInfo.cpp:366: llvm::MachineInstr* llvm::MachineRegisterInfo::getVRegDef(unsigned int) const: Assertion `(I.atEnd() || std::next(I) == def_instr_end()) && "getVRegDef assumes a single definition or no definition"' failed.</span></div></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">I am assuming that i messed up the virtual register allocation when i am using BuildMI().</span></div><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">Also, i cannot invoke the clang as -O1 and so on as it will optimize my code and the generated .ll file will contain nothing other than the prologue and epilogue code.<br class="">Is there any information i can provide you so that we can discuss the issue further?<span class="Apple-converted-space"> </span><br class=""><br class="">Chuan.<span class="Apple-converted-space"> </span></span></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div class=""><div align="center" style="text-align: center; margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""><hr width="98%" size="3" align="center" class=""></span></div><div id="divRplyFwdMsg" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><b class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span class="Apple-converted-space"> </span>jin chuan see <<a href="mailto:jinchuansee@hotmail.com" style="color: blue; text-decoration: underline;" class="">jinchuansee@hotmail.com</a>><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Monday, September 11, 2017 9:57 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Matthias Braun<br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" style="color: blue; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-dev] Live Register Spilling</span><span style="font-family: Calibri, sans-serif;" class=""></span></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div></div><div class=""><div id="divtagdefaultwrapper" class=""><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">Hi Matthias,</span></div><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">Sorry for the late reply. </span></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">Yes, you are correct, I do have optnone attribute on my function.</span></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">I did pass -O0 to the tools. </span></div><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">For your information, my invocations are as below:</span></div><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">clang  --target=mips-unknown-linux  -mips32  test.c  -emit-llvm  -S</span></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">llc  -O0  -march=mips  -mcpu=mips32  test.ll  -o  test.s</span></div><p style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">Based on the generated .ll file, there is optnone attribute on the function, i am guessing this is due to the default optimization -O0 by clang if not specified.</span></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">As for the llc, i tried to invoke it with -O1,-O2,-O3. All of them resulted in failure during the phase "PROCESS IMPLICIT DEFS"</span></div><div style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="font-family: Calibri, sans-serif;" class="">This message showed up:</span></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div class=""><div align="center" style="text-align: center; margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""><hr width="98%" size="3" align="center" class=""></span></div><div id="divRplyFwdMsg" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><b class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span class="Apple-converted-space"> </span><a href="mailto:mbraun@apple.com" style="color: blue; text-decoration: underline;" class="">mbraun@apple.com</a><span class="Apple-converted-space"> </span><<a href="mailto:mbraun@apple.com" style="color: blue; text-decoration: underline;" class="">mbraun@apple.com</a>> on behalf of Matthias Braun <<a href="mailto:mbraun@apple.com" style="color: blue; text-decoration: underline;" class="">mbraun@apple.com</a>><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Saturday, September 9, 2017 2:06 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>jin chuan see<br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" style="color: blue; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-dev] Live Register Spilling</span><span style="font-family: Calibri, sans-serif;" class=""></span></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">This would be a lot easier to discuss having a concrete example, llc invocations etc.</span></div></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">It sounds like you are using RegAllocFast, have you tried using the optimized register allocators (= make sure you don't have the optnone attribute on your function and are not passing -O0 to the tools).</span></div></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">- Matthias</span></div></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div><div class=""><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">On Sep 8, 2017, at 12:10 AM, jin chuan see via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: blue; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>> wrote:</span></div></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div class=""><div id="divtagdefaultwrapper" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Hi All,<span class=""> </span></span></div></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">I faced some problems while using the BuildMI().</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Currently, i am trying to replace specific MI with a series of new MI.</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">I wrote a routine under the processFunctionAfterISel() to detect the targeted MI and replace it accordingly.</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">After using BuildMI() to perform my replacement, i realize there are unnecessary spilling and reloading of registers in the assembly generated.</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">By checking the llc debug output, i am suspecting that the virtual register states have been completely messed up.</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">This is because the spilling and reloading codes are only inserted at the register allocation phase, especially during the state of "Spilling live registers at the end of block".</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">These spilling and reloading codes are messing up the assembly generated, and the behavior of the code generated is undetermined.<span class=""> </span></span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">I would like to know is there anything i can do to fix the virtual register use-def relationship?</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Or is there any standard procedure i should follow to handle the MachineOperands while using BuildMI()?</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Any opinions or suggestion are welcomed.</span></div></div><div class=""><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">Regards,</span></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class="">JC</span></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 9pt; font-family: Helvetica, sans-serif;" class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""></span><span style="font-family: Calibri, sans-serif;" class=""><a href="mailto:llvm-dev@lists.llvm.org" style="color: blue; text-decoration: underline;" class=""><span style="font-size: 9pt; font-family: Helvetica, sans-serif;" class="">llvm-dev@lists.llvm.org</span></a></span><span style="font-size: 9pt; font-family: Helvetica, sans-serif;" class=""><br class=""></span><span style="font-family: Calibri, sans-serif;" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" style="color: blue; text-decoration: underline;" class=""><span style="font-size: 9pt; font-family: Helvetica, sans-serif;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</span></a></span></div></div></blockquote></div><p style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-family: Calibri, sans-serif;" class=""> </span></p></div></div></div></div></div></div></div></div></div></div></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">LLVM Developers mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></span></div></blockquote></div><br class=""></body></html>