<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Apr 24, 2012, at 7:54 AM, Sirish Pande <<a href="mailto:spande@codeaurora.org">spande@codeaurora.org</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
  
    <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
  
  <div bgcolor="#FFFFFF" text="#000000">
    On 4/23/2012 3:26 PM, Andrew Trick wrote:
    <blockquote cite="mid:14F368AF-A60C-4EDD-A6F0-C61E9DEA5891@apple.com" type="cite"><br>
      <div>
        <div>On Apr 23, 2012, at 11:55 AM, Sirish Pande <<a moz-do-not-send="true" href="mailto:spande@codeaurora.org">spande@codeaurora.org</a>>
          wrote:</div></div><div>
        <div><br>
        </div>
        <div>+  VLIWScheduler->exitRegion();</div>
        <div><br>
        </div>
        <div>I'm not sure why you would do this *before* packetizing.
          It's ok if it works, just a little misleading. You should
          probably add a call to VLIWScheduler->finishBlock()
          somewhere.</div>
      </div>
    </blockquote>
    <br>
    Thanks for pointing out about the finishBlock(). I will add
    finishBlock() at the end of PacketizeMI function. <br>
    <br>
    You probably know that we are getting the dependence information
    from the scheduler. Once we have the dependence info, along with the
    DFA resource manager, we can packetize the way our architecture
    prefers.  We are not using the scheduler to *schedule* instructions
    during packetization. Hence, we have enterRegion() and exitRegion()
    around schedule. Esssentially, this logic is borrowed from around
    line 200 of MachineScheduler.cpp<br></div></blockquote><div><br></div><div>After callling ScheduleDAGInstrs::exitRegion, no one should refer DAG for that region (it happens to work, it's just a minor abuse). Likewise, after calling finishBlock no one should ask for the DAG's current block. I only mention this because others are learning the API from your client.</div><br><blockquote type="cite"><div bgcolor="#FFFFFF" text="#000000">
    <blockquote cite="mid:14F368AF-A60C-4EDD-A6F0-C61E9DEA5891@apple.com" type="cite">
      <div>
        <div><br>
        </div>
        <div>+  // Generate MI -> SU map.</div>
        <div>+  //std::map <MachineInstr*, SUnit*> MIToSUnit;</div>
        <div>+  MIToSUnit.clear();</div>
        <div>+  for (unsigned i = 0, e =
          VLIWScheduler->SUnits.size(); i != e; ++i) {</div>
        <div>+    SUnit *SU = &VLIWScheduler->SUnits[i];</div>
        <div>+    MIToSUnit[SU->getInstr()] = SU;</div>
        <div>+  }</div>
        <div><br>
        </div>
        <div>I added ScheduleDAGInstrs::MISUnitMap so you wouldn't need
          your own. I haven't tested it with a PostRA scheduler, but
          would like to know if it doesn't work.</div>
      </div>
    </blockquote>
    <br>
    Have you checked this functionality in? I don't see it.<br>
    </div></blockquote><br></div><div>ScheduleDAGInstrs::initSUnits populates the map. I'm not sure why that wouldn't work for you. Note that the ExitSU is not mapped, but you're not really using ExitSU anyway.</div><div><br></div><div>-Andy</div><br></body></html>