<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="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-7">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Sanjay, I am working on backend with similar
constraints using Method #1. You can use createVirtualRegister for all your
register allocation needs. The only issue is that it currently resets the
virtual register count at the beginning of each function call.  Look at the
thread, “Virtual Register allocation across functions” to see
possible solutions for this issue.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'><o:p> </o:p></span></font></p>

<div class=MsoNormal align=center style='text-align:center'><font size=3
face="Times New Roman"><span style='font-size:12.0pt'>

<hr size=2 width="100%" align=center tabindex=-1>

</span></font></div>

<p class=MsoNormal><b><font size=2 face=Tahoma><span style='font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font size=2
face=Tahoma><span style='font-size:10.0pt;font-family:Tahoma'>
llvmdev-bounces@cs.uiuc.edu [mailto:llvmdev-bounces@cs.uiuc.edu] <b><span
style='font-weight:bold'>On Behalf Of </span></b>Sanjay Soman<br>
<b><span style='font-weight:bold'>Sent:</span></b> Tuesday, October 28, 2008
11:41 AM<br>
<b><span style='font-weight:bold'>To:</span></b> llvmdev@cs.uiuc.edu<br>
<b><span style='font-weight:bold'>Subject:</span></b> [LLVMdev] Targeting a
platform with virtual instruction set andunlimited virtual registers</span></font><o:p></o:p></p>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>

<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0>
 <tr>
  <td valign=top style='padding:0in 0in 0in 0in'>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>I am
  working on a LLVM backend for a new platform. The target has a virtual
  instruction set and unlimited virtual registers. After going through LLVM
  documentation and source code, it looks like there are two possible ways to
  implement it with LLVM:<o:p></o:p></span></font></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>1) Method
  #1: follow common code generator path (TableGen, LLVMTargetMachine, etc),
  similarly as the Sparc and x86 targets. Since the target has unlimited number
  of virtual registers, register allocation is no use here. I can skip the
  register allocation by overloading the register allocator with one does no
  allocation. Is there any assumption in this infrastructure that would prevent
  from doing so?<o:p></o:p></span></font></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>2) Method
  #2: follow the custom code generator path, similar as the CBackend and MSIL
  targets.<o:p></o:p></span></font></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>Iąd like
  to evaluate which method is more appropriate for this particular target.
  Method#1 provides some optimizations at machine instruction level (in this
  case, the virtual instruction set). Is the custom path capable of doing the
  same?</span></font><o:p></o:p></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=3 face="Times New Roman"><span style='font-size:12.0pt'> <o:p></o:p></span></font></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>Thanks,</span></font><o:p></o:p></p>
  <p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><font
  size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>-Sanjay</span></font><o:p></o:p></p>
  </td>
 </tr>
</table>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'><o:p> </o:p></span></font></p>

</div>

</body>

</html>