<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Book Antiqua";
        panose-1:2 4 6 2 5 3 5 3 3 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@MS Gothic";
        panose-1:2 11 6 9 7 2 5 8 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        mso-fareast-language:EN-IE;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Book Antiqua",serif;
        font-variant:normal !important;
        color:windowtext;
        text-transform:none;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;
        vertical-align:baseline;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Book Antiqua",serif;
        font-variant:normal !important;
        color:windowtext;
        text-transform:none;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;
        vertical-align:baseline;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-IE link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>Actually, we didn’t do this in any new transform pass, though we do custom lowering for many operations (e.g. shuffle); but the majority of the descriptions are in normal TableGen files.  This goes though the usual LLVM instruction selection as chains of dependent instructions.  The only other critical thing was to use ‘</span><span style='font-family:"Courier New";mso-fareast-language:EN-US'>setOperationAction</span><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>’ to select ‘</span><span style='font-family:"Courier New";mso-fareast-language:EN-US'>Expand</span><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>’, ‘</span><span style='font-family:"Courier New";mso-fareast-language:EN-US'>Legal</span><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'> ‘and ‘</span><span style='font-family:"Courier New";mso-fareast-language:EN-US'>Custom</span><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>’ as appropriate to the instruction set.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>Pre-RA scheduling simply insures that appropriate schedules are correct for each chain, and the Post-RA scheduler then lays each chain down (bottom up in our model) and creates the bundles representing the VLIW instruction.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>The Hexagon target is a nice example of an in-tree target that does this.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>            MartinO<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> yangzhh@mail.ustc.edu.cn [mailto:yangzhh@mail.ustc.edu.cn] <br><b>Sent:</b> 20 February 2017 13:31<br><b>To:</b> Martin J. O'Riordan <martin.oriordan@movidius.com><br><b>Cc:</b> 'LLVM Developers' <llvm-dev@lists.llvm.org><br><b>Subject:</b> Re: RE: [llvm-dev] vectorization and vliw(very long instruction word)<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks, I will modify some transform pass, because my specific target processor. I don't think this a good way, but I think this a easier way. Could I do that? <o:p></o:p></p><p><span style='font-family:"Calibri",sans-serif'>在</span>2017-02-20 20:47:36<span style='font-family:"Calibri",sans-serif'>,</span>Martin J. O'Riordan<a href="mailto:martin.oriordan@movidius.com">martin.oriordan@movidius.com</a><span style='font-family:"Calibri",sans-serif'>写道:</span><o:p></o:p></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm' name=replyContent><div><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>Our approach is to let instruction selection and vectorisation happen as if the instruction set was single-issue, and use the post-RA scheduler to fill the VLIW slots with instructions from each of the functional-units [FUs] on a first-come, first-served basis.  This works quite well in conjunction with some mutation patterns that allow an instruction from an alternative FU to be substituted if the preferred FU is busy.</span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>The VLWI nature of the target and the instruction selection and vectorisation are largely orthogonal.  There are scheduling, register allocation and instruction selection decisions that an expert human programmer might do differently, but overall the compiler still produces solutions that are competitive with the solutions determined by expert assembly programmers.</span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'>            MartinO</span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;mso-fareast-language:EN-US'> </span><o:p></o:p></p><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org">llvm-dev-bounces@lists.llvm.org</a>] <b>On Behalf Of </b>via llvm-dev<br><b>Sent:</b> 20 February 2017 02:37<br><b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br><b>Subject:</b> [llvm-dev] vectorization and vliw(very long instruction word)</span><o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><pre style='background:white'><span style='font-size:10.5pt'>Hello, I want to implement vectorization and vliw(very long instruction word) in my specific dsp ,do you have any advices to me ? </span><o:p></o:p></pre><pre style='background:white'><span style='font-size:10.5pt'>Thank you very much!</span><o:p></o:p></pre></div></blockquote></div></body></html>