<html>

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered)">
<title>[LLVMdev] promotion of return value.</title>
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 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:blue;
        text-decoration:underline;}
p
        {margin-right:0in;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.EmailStyle18
        {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=blue>

<div class=Section1>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>Any thoughts on this? </span></font></p>

<p class=MsoNormal><font size=2 color=navy face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:navy'>I would like to get it right before jumping
into the nuts and bolts of it….</span></font></p>

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

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

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

<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>

<div>

<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>Alireza.Moshtaghi@microchip.com<br>
<b><span style='font-weight:bold'>Sent:</span></b> Thursday, March 12, 2009
10:39 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> RE: [LLVMdev] promotion
of return value.</span></font></p>

</div>

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

<div id=idOWAReplyText41520>

<div>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:black'>Previously we talked about adding new
attributes to function to identify the promotion class. </span></font></p>

</div>

<div>

<p class=MsoNormal><font size=2 color=black face="Times New Roman"><span
style='font-size:10.0pt;color:black'>>   sign_ext_from_i8,
sign_ext_from_i16<br>
>   zero_ext_from_i8, zero_ext_from_i16</span></font></p>

</div>

<div>

<p class=MsoNormal><font size=2 color=black face=Arial><span style='font-size:
10.0pt;font-family:Arial;color:black'>Aren't these attributes more applicable
to return value? of course then the question would be if they are also
applicable to parameters too? (because we use same attributes for parameters
and return value)? or should we disallow then on parameters?</span></font></p>

</div>

</div>

<div>

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

</div>

<div>

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

</div>

<div>

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

</div>

<div>

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

</div>

<div>

<p class=MsoNormal><font size=3 face="Times New Roman"><span style='font-size:
12.0pt'> </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 style='margin-bottom:12.0pt'><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 on behalf of Alireza.Moshtaghi@microchip.com<br>
<b><span style='font-weight:bold'>Sent:</span></b> Wed 3/4/2009 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] promotion of return
value.</span></font></p>

</div>

<div>

<p><font size=2 face="Times New Roman"><span style='font-size:10.0pt'>Below I
have pasted the latest design that we discussed...<br>
Now we would like to pick it up and do the implementation.<br>
1) Is there any last change that we would like to add?<br>
2) Has anyone been working on it? I haven't seen any thing new in the<br>
code so I assume the answer is no...<br>
<br>
Thanks<br>
<br>
Alireza Moshtaghi<br>
Senior Software Engineer<br>
Development Systems, Microchip Technology<br>
<br>
Subject:<br>
Troubling promotion of return value to Integer ...<br>
On May 29, 2008, at 10:30 AM, <Alireza.Moshtaghi@...><br>
<Alireza.Moshtaghi@...<br>
 > wrote:<br>
<br>
> Let me summarize what we discussed so far:<br>
><br>
> 1) The return value promotion will be removed from llvm backend and<br>
>   implemented in both front-ends (clang and llvm-gcc)<br>
><br>
> 2) The promotions are only applied to the return value in the body<br>
>   of the function.<br>
>   Return value of function definition and declaration will not
be<br>
> promoted<br>
><br>
>   Example for a Target with 32-bit int type:<br>
><br>
>   char foo() {<br>
>     char c = ...<br>
>     return c;<br>
>   }<br>
><br>
>   Is translated to:<br>
><br>
>   define i8 @foo() {<br>
>      ...<br>
>      %tmp = sext i8 ... to i32<br>
>      ret i32 %tmp<br>
>   }<br>
<br>
Close.  The return value of declarations also has to be promoted. 
foo<br>
<br>
should be translated to:<br>
<br>
   define i32 @foo() sign_ext_from_i8 {<br>
      ...<br>
      %tmp = sext i8 ... to i32<br>
      ret i32 %tmp<br>
   }<br>
<br>
> 3) Return value promotion is the default behavior, however,<br>
>   hooks will be provided to allow the Target to disable it<br>
>   and emit diagnostics.<br>
<br>
Sure, the front-end can do that.<br>
<br>
<br>
> 4) There will be 4 new function attributes:<br>
>   sign_ext_from_i8, sign_ext_from_i16<br>
>   zero_ext_from_i8, zero_ext_from_i16<br>
>   These attributes will be placed on the function CALL node by<br>
> front-end<br>
>   to inform the backend about such promotions and enable
optimization<br>
> of<br>
>   return value. This should be sufficient for direct and
indirect  <br>
> call.<br>
>   (syntax of these attributes to be defined)<br>
<br>
They also go on the function definition, as above.<br>
<br>
> Am I capturing everything?<br>
<br>
Yep!  The place to start with this is introducing the new attributes.  <br>
Given the new attributes, we can mock up .ll code that uses them
and  <br>
improve the optimizers to use them.  When everything there is correct,<br>
<br>
we can move each front-end over to start using them.<br>
<br>
-Chris<br>
<br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
LLVMdev@cs.uiuc.edu         <a
href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span></font></p>

</div>

</div>

</div>

</body>

</html>