<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=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"\B9D1\C740 \ACE0\B515";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@\B9D1\C740 \ACE0\B515";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:85.05pt 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</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-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> Hi,<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> The source attached at the bottom is a testcase which causes
a back-end error in LLVM 2.4.<o:p></o:p></p>

<p class=MsoNormal> These types of assembly routines are mainly used in OS
kernels. <o:p></o:p></p>

<p class=MsoNormal> I checked that GCC 4.3 works for this routine.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> The error messsage is ...<o:p></o:p></p>

<p class=MsoNormal>         Couldn't
allocate output reg for constraint 'A'!<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> I just need help or comments so that I could analyze
and fix this bug.<o:p></o:p></p>

<p class=MsoNormal> My question is how can we efficiently debug this type
of bug?<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> 1. Typically we have a large size of testcase source
code. <o:p></o:p></p>

<p class=MsoNormal> Thus we need to locate the specific location of bug in
the testcase source code.<o:p></o:p></p>

<p class=MsoNormal> Is there any debugging message that LLVM gives to make
it easy to identify this information?<o:p></o:p></p>

<p class=MsoNormal> I don’t except that information in source code because
that is belong to GCC front-end<o:p></o:p></p>

<p class=MsoNormal> but what about in terms of LLVM asm code, e.g., line #
of LLVM asm code that generate this error.<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> 2. Then we need to find a code in LLVM that generates
this error message.<o:p></o:p></p>

<p class=MsoNormal> But how can I efficiently find that buggy routine in
LLVM pass or backend?<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal> Thanks,<o:p></o:p></p>

<p class=MsoNormal> Keun Soo<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>-----<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>/*<o:p></o:p></p>

<p class=MsoNormal> * @title   A Testcase for LLVM<o:p></o:p></p>

<p class=MsoNormal> * <o:p></o:p></p>

<p class=MsoNormal> * @about   This faces an error with LLVM 2.4
(but not with GCCC)<o:p></o:p></p>

<p class=MsoNormal> *         
The error messsage is ...<o:p></o:p></p>

<p class=MsoNormal> *             
Couldn't allocate output reg for constraint 'A'!<o:p></o:p></p>

<p class=MsoNormal> * <o:p></o:p></p>

<p class=MsoNormal> * @author  Keun Soo Yim<o:p></o:p></p>

<p class=MsoNormal> */<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>struct a_struct{<o:p></o:p></p>

<p class=MsoNormal>    unsigned int a,b;<o:p></o:p></p>

<p class=MsoNormal>};<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>void x()<o:p></o:p></p>

<p class=MsoNormal>{<o:p></o:p></p>

<p class=MsoNormal>    long err;<o:p></o:p></p>

<p class=MsoNormal>    struct a_struct a;<o:p></o:p></p>

<p class=MsoNormal>    struct a_struct *pa;<o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p class=MsoNormal>    __asm__ __volatile__(<o:p></o:p></p>

<p class=MsoNormal>           
"1: movl 0(%2),%%eax\n"<o:p></o:p></p>

<p class=MsoNormal>           
"2: movl 4(%2),%%edx\n"<o:p></o:p></p>

<p class=MsoNormal>           
"3:\n" ".section .fixup,\"ax\"\n"<o:p></o:p></p>

<p class=MsoNormal>           
"4: movl %3,%0\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   xorl %%eax,%%eax\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   xorl %%edx,%%edx\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   jmp 3b\n" ".previous\n"<o:p></o:p></p>

<p class=MsoNormal>           
".section __ex_table,\"a\"\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   .align 4\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   .long 1b,4b\n"<o:p></o:p></p>

<p class=MsoNormal>           
"   .long 2b,4b\n"<o:p></o:p></p>

<p class=MsoNormal>           
".previous" :   "=r" (err),<o:p></o:p></p>

<p class=MsoNormal>                           
"=&A" (((a)))<o:p></o:p></p>

<p class=MsoNormal>                       
:   "r" (((pa))),<o:p></o:p></p>

<p class=MsoNormal>                           
"i"(-14),<o:p></o:p></p>

<p class=MsoNormal>                           
"0"(err));<o:p></o:p></p>

<p class=MsoNormal>}<o:p></o:p></p>

<p class=MsoNormal>                                        
<o:p></o:p></p>

</div>

</body>

</html>