<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>