<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Evan,<br>
    <br>
    Thanks for sending out the proposal. This pass will, of course, be
    very important for the Hexagon backend. I have to study the proposal
    in more detail but overall, it looks good to me. <br>
    <br>
    > I would also like to see a target independent interface for
    pre-scheduling optimizations that form instruction sequences (e.g.
    macro-fusion). <br>
    <br>
    My team will be happy to help with the tasks and specifically with
    the packet-formation pass. We already have a pass that forms packets
    for Hexagon and we can generalize the pass and make it
    machine-independent.<br>
    <br>
    -Anshu<br>
    <tt><br>
    </tt>
    <div class="moz-text-html" lang="x-western">
      <link rel="File-List"
href="file:///C:%5CUsers%5Cadasgupt%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml">
      <link rel="themeData"
href="file:///C:%5CUsers%5Cadasgupt%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx">
      <link rel="colorSchemeMapping"
href="file:///C:%5CUsers%5Cadasgupt%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml">
      <tt>--<br>
        Qualcomm Innovation Center, Inc is a member of Code Aurora Forum</tt></div>
    <br>
    <br>
    <br>
    On 12/2/2011 2:40 PM, Evan Cheng wrote:
    <blockquote
      cite="mid:BC1F4D62-3DDB-47F9-96D7-01E502994F7F@apple.com"
      type="cite">
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Machine Instruction Bundle in LLVM</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">Hi all,</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">There have been quite a bit of discussions about
        adding machine instruction bundle to support VLIW targets. I
        have been pondering what the right representation should be and
        what kind of impact it might have on the LLVM code generator. I
        believe I have a fairly good plan now and would like to share
        with the LLVM community.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Design Criteria</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. The bundle representation must be light weight. We
        cannot afford to add significant memory or compile time
        overhead.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. It must be flexible enough to represent more than
        VLIW bundles. It should be useful to represent arbitrary
        sequence of instructions that must be scheduled as a unit. e.g.
        ARM Thumb2 IT block, Intel compare + branch macro-fusion, or
        random instruction sequences that are currently modeled as
        pseudo instructions that are expanded late.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">3. Minimize the amount of changes required in the
        LLVM code generator, especially in target independent passes. It
        must minimize code duplication (i.e. we don't want code snippets
        that search for bundle start / end like all the code in the
        backend that skip over DBG_VALUE).</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">4. The representation should make it easy for new
        code to be oblivious of bundles. That is, MI passes should not
        have to check whether something is a bundle.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">Given the above, we can rule out a new class (e.g.
        MachineInstrBundle) right away. We don't want MachineBasic block
        to keep a list of MachineInstrBundles since it will require
        massive amount of code change. So what are the choices?</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Bundle Representation</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. A nested MachineInstr: This is the most natural
        (meaning it looks most like the real HW bundle) representation.
        It has the nice property that most passes do not have to check
        if a MI is a bundle.The concern here this can add significant
        memory overhead if this means adding a ilist or SmallVector
        field to keep bundled MIs.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. Add a bit to MachineInstr: The bit means the next
        MI in the list is part of the same bundle. This is very light
        weight. However it requires many passes to check wether a MI is
        part of a bundle.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">The solution is a combination of both #1 and #2.
        Conceptually we want a representation that looks like this:</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">|  Bundle    | -------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------        \</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |                   |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |                   |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">|  Bundle    | ------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------       \</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |                   |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |           ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |                   |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |                  …</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">|  Bundle    | ------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">--------------       \</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">         |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">        ...</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">This is #1, a series of nested MI's. However, we are
        going to store the instructions in the same way as it's done
        right now, i.e. a list<MachineInstr> on
        MachineBasicBlocks.  Using #2, we will add a bit to MI that
        indicates whether it is part of a bundle.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |   (* bit
        indicates next MI is "glued" to this MI, i.e. in the same
        bundle)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |    (no bit,
        this is the end of the bundle)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     --------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |   (* a new
        bundle)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            ...</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">We are going to hide the complexity in the
        MachineBasicBlock::iterator instead. That is, the iterator will
        be changed to visit only the *top level* instructions (i.e.
        first instruction in each bundle). We will add another iterator
        that allows client to visit all of the MIs for those passes that
        want to look into bundles.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">We can use the same representation for arbitrary
        sequence of instructions that cannot be broken up. e.g. Thumb2
        IT blocks.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |   (just a MI)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |   (* Start of
        Thumb2 IT block)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * | </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |   (last MI in
        the block)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      | </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                           ...</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">This representation can support VLIW (where top level
        MI's are all start of bundles) or non-VLIW (where there can be
        mix of MIs and bundles). It is also very cheap since the "Flags"
        field has plenty of free bits available.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Properties of Bundle</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">If MI passes can consider each bundle as a single
        unit, then how are they going to examine properties (i.e. flags
        and operands) of a MI bundle? Conceptually a the properties of a
        bundle is the union of the properties of all the MIs inside the
        bundle. So a bundle reads all the inputs that the individual MIs
        read and it defines all the outputs of the individual MIs.
        However, this is not correct when there are intra-bundle
        dependencies. e.g.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r0 = op1 r1, r2       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r3 = op2 r0<kill>, #c |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">r0 should not be considered as a source on the bundle
        since it's defined inside the bundle and its live range does not
        extend beyond it. Instead, r0 is a clobber (i.e. dead def).</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r0 = op1 r1, r2       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r3 = op2 r0, #c       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "> ...</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">     = op3 r0, </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">r0 is a def, not a use.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">What does this mean? It means in order for passes to
        operate on a bundle at a time, it must be able to visit all the
        defs and uses of a bundle. We have established that computing
        the defs and uses of a bundle is not as trivial as taking the
        union. This is certainly not something we want to re-compute
        every time! This requires a slight change to the bundle
        representation.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |    Bundle  * |   (A MI with
        special opcode "Bundle")</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |    (no bit,
        this is the end of the bundle)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     --------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |    Bundle  * |   (a new
        bundle)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI    * | </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     |      MI      |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                     ----------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                             |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">                            ...</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">The pseudo bundle instructions should be used to
        capture properties of the bundle. When a bundle is finalized the
        packetizer must add source and def operands to the pseudo bundle
        instruction. More on this later.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">Other properties, such as mayLoad, mayStore, are
        static properties associated with opcodes. They cannot be
        copied. We will add APIs to examine properties of MIs which will
        do the *right thing* for bundles (i.e. look into MIs in
        bundles).</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Packetizing</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">The current MI flow looks like this:</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. DAG to MI lowering (and pre-RA schedule)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. MI optimizations (LICM, CSE, etc.)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">3. Register allocation super pass</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3a. De-ssa (2-address, phi slim)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3b. Coalescing</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3c. Actual register allocation</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">4. Post-RA optimizations</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">5. PEI</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">6. Post-RA scheduling</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">In the hopefully not very distant future it should
        look like this:</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. DAG to MI lowering (no scheduling!)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. MI optimizations (LICM, CSE, etc.)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">3. Register allocation super pass</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3a. De-ssa (2-address, phi slim)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3b. Coalescing</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3c. <b>Pre-RA scheduling</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3d. Actual register allocation</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">4. Post-RA optimizations</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">5. PEI</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">6. <b>Re-schedule restores, copies</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">The current proposal is for "packetization" to be
        done as part of the "RA super pass". Early MI optimization
        passes such as LICM do not benefit from operating on bundles.
        Furthermore, the packetizer should not have to know how to deal
        with copies which may later be coalesced, phi nodes, or other
        copy like pseudo instructions.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">Packetization should be done in two phases. The first
        part decides what MIs should be bundled together and it add the
        "bits" which glued MIs together. This can be done either before
        pre-RA scheduling. The second part of the packetization should
        only be done after register allocation is completed. There are
        two very important reason for this.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. Packet finalization *must* add source and def
        operands to the "Bundle" pseudo MI. This allows all later passes
        to handle they transparently. However, we do not want to do this
        before register allocation is complete. Otherwise it introduces
        new defs and uses of virtual registers and that mess up
        MachineRegisterInfo def-use chains.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">e.g. Now vr0 has two defs!</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">defs: vr0<dead>, vr3, uses: vr1, vr2</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">----------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| vr0 = op1 vr1, vr2       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| vr3 = op2 vr0<kill>, #c  |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">----------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. During register allocation, more identity copies
        will be eliminated while loads, stores, copies, re-materialized
        instructions will be introduced. It makes sense for the second
        part of packetization to try to fill these new instructions into
        empty slots (for VLIW like targets).</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">So the overall flow should look like this:</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. DAG to MI lowering (no scheduling!)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. MI optimizations (LICM, CSE, etc.)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">3. Register allocation super pass</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3a. De-ssa (2-address, phi slim)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3b. Coalescing</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3c. <b>Pre-scheduling packetization (optional)</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3d. Pre-RA scheduling (or <b>integrated
          packetization</b>)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3e. <b>Post-scheduling packetization (optional)</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3f. Actual register allocation</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">   3g. <b>Packet finalization</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">4. Post-RA optimizations</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">5. PEI</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">6. Re-schedule restores, copies</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>Lowering Bundles to MCInst</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">There is no need to add the equivalent of MI bundle
        to MCInst. A MI bundle should be concatenated into a single
        MCInst by storing opcodes as integer operands. e.g.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r0 = op1 r1, r2       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">| r3 = op2 r0, #c       |</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">-------------------------</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">=></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">MCInst: op1 r0, r1, r2, op2, r3, r0, #c</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">or</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">MCInst: op1 op2 r0, r1, r2, r3, r0, #c</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><b>What's Next?</b></div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">I am hoping to find some time to implement the
        followings in the near future:</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">1. Add BUNDLE opcode</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">2. MachineInstr class changes: new bit, changes to
        methods such as eraseFromParent(), isIdenticalTo().</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">3. Change MachineInstr::iterator to skip over bundled
        MIs. Rename old iterator.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">4. Add MachineInstr API to check for instruction
        properties and switch existing code over.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">5. Add API to form a bundle. It would compute the
        proper def's and use's and add MachineOperands to the bundle MI.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">6. Switch Thumb2 IT block to using MI bundles.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">7. Add interface for targets to register their own
        packetization passes.</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">I would dearly welcome help on any of these tasks
        especially on 4, 5, 6. I also would not cry if someone beats me
        to #6 (or actually any of the tasks. :-)</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; min-height: 14px; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">In the longer term, I would like to see a target
        independent packetization pass (I believe one is being
        reviewed). I would also like to see a target independent
        interface for pre-scheduling optimizations that form instruction
        sequences (e.g. macro-fusion). Patches welcome!</div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; "><br>
      </div>
      <div style="margin-top: 0px; margin-right: 0px; margin-bottom:
        0px; margin-left: 0px; font: normal normal normal 12px/normal
        Courier; ">Evan</div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>