<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:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 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:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Menlo;
        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:12.0pt;
        font-family:"Times New Roman","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
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi David,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’m not certain, but to me the “LLVMSetTarget(module, "i686-apple-darwin11");” line looks suspicious.  I’m not familiar with all the ins and outs of how target
 triples get handled, but it looks to me like that’s requesting 32-bit code.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I think that if you omit that line completely then the target will be inferred from the execution environment.  My best guess as to what you would want if you
 do want to specify something explicit is “x86_64-apple-darwin11”.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Someone who knows more about how the target works may correct me.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-Andy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> llvmdev-bounces@cs.uiuc.edu [mailto:llvmdev-bounces@cs.uiuc.edu]
<b>On Behalf Of </b>David Mirabito<br>
<b>Sent:</b> Tuesday, April 24, 2012 11:49 PM<br>
<b>To:</b> LLVM Developers Mailing List<br>
<b>Subject:</b> [LLVMdev] Crash in JIT<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hello,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">[Using LLVM r155315, according to `svn log | head`]<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I am experimenting with programatically building and jitting functions in a module, and I seem to be coming across a crash in some generated code. Using the llvm-c interface I build up the module which dumps like this:<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">; ModuleID = 'MyModule'</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">target datalayout = "i686-apple-darwin11"</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">target triple = "i686-apple-darwin11"</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">define i32 @functionName(i32 %m, i32 %x, i32 %b) {</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">entry:</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">  %mx = mul i32 %m, %x</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">  %y = add i32 %mx, %b</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">  ret i32 %y</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size:8.5pt;font-family:"Menlo","serif"">}</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Which looks OK to me. Note I'm not 100% sure (actually, I suspect is wrong) about the 'target datalayout' but with or without that line makes no difference to my results.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">When I attempt to run the JIT (interpreter works fine) I get a EXC_BAD_ACCESS with the following backtrace:<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">* thread #1: tid = 0x2007, 0x0000000102e00042, stop reason = EXC_BAD_ACCESS (code=1, address=0x60c93a2c)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    frame #0: 0x0000000102e00042<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    frame #1: 0x00000001015c01fb LLVMPlayGround`llvm::JIT::runFunction(llvm::Function*, std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> > const&) + 4747 at JIT.cpp:547<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    frame #2: 0x00000001015a0db2 LLVMPlayGround`LLVMRunFunction + 322 at ExecutionEngineBindings.cpp:195<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    frame #3: 0x0000000101096125 LLVMPlayGround`main + 741 at main.c:91<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    frame #4: 0x0000000101095e34 LLVMPlayGround`start + 52<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6483FF"><o:p> </o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">Which looks to be in some non-c code. At least XCode cannot find any corresponding source:</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0x102e00042</span><span style="font-size:8.5pt;font-family:"Menlo","serif"">:  movl   $<span style="color:#2500D8">10</span>, (%rsp) <-- DIE<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0x102e00049</span><span style="font-size:8.5pt;font-family:"Menlo","serif"">:  movl   $<span style="color:#2500D8">5</span>,
<span style="color:#2500D8">4</span>(%rsp)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0x102e00051</span><span style="font-size:8.5pt;font-family:"Menlo","serif"">:  movl   $<span style="color:#2500D8">1</span>,
<span style="color:#2500D8">8</span>(%rsp)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0x102e00059</span><span style="font-size:8.5pt;font-family:"Menlo","serif"">:  movl   %eax,
<span style="color:#2500D8">24</span>(%rsp)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0x102e0005d</span><span style="font-size:8.5pt;font-family:"Menlo","serif"">:  movl   %ecx,
<span style="color:#2500D8">20</span>(%rsp)<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">It looks like marshalling the 3 arguments to my function.</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">Looking at rsp it looks like the top 32bits have been truncated, compared to other pointers floating around the system:</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">  rbp = 0x00007fff60c94070<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">  rsp = 0x0000000060c93a2c  <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">  r8 = 0x00007fff60c93800<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">  r9 = 0x00007fff60c93808<o:p></o:p></span></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#008700"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">If I use the debugger to poke 0x00007fff into the top half of rsp, stepping through works, and after one jump I get to my function; I see the mul and add instruction. Continuing to step,
 I need one more fixup of rsp (perhaps corresponding to two jitted functions: mine, and the auto-built nullary stub?) before returning to my main function.</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">Is there anything obvious I've missed? Sorry for the long mail but I figure if I put all my data, then where I went wrong would be more obvious to someone who knows what they're doing :)</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">Thanks, and please let me know if there's anything extra I can add.</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">-DavidM</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Helvetica","sans-serif"">PS: below is my complete source.</span><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B">#include
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D"><stdio.h></span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B">#define __STDC_LIMIT_MACROS<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B">#define __STDC_CONSTANT_MACROS<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B">#include
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"llvm-c/Core.h"<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#77482B">#include
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"llvm-c/ExecutionEngine.h"<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#B80FA2">int</span><span style="font-size:8.5pt;font-family:"Menlo","serif""> main(<span style="color:#B80FA2">int</span> argc,
<span style="color:#B80FA2">const</span> <span style="color:#B80FA2">char</span> * argv[])<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">{<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMContextRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> llvm;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">    llvm =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMContextCreate</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">();</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMModuleRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> module;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">    module =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMModuleCreateWithNameInContext</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"MyModule"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">,
 llvm);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#008700">//LLVMSetDataLayout(module, "i686-apple-darwin11"); <-- is needed? What is correct?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMSetTarget</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(module,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"i686-apple-darwin11"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMTypeRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> int32 =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMInt32TypeInContext</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(llvm);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMTypeRef</span> funcType;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMTypeRef</span> threeInts[] = {int32, int32, int32};<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    funcType =
<span style="color:#3C0F81">LLVMFunctionType</span>(int32, threeInts, <span style="color:#2500D8">
3</span>, <span style="color:#2500D8">0</span>);<o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMValueRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> func;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    func =
<span style="color:#3C0F81">LLVMAddFunction</span>(module, <span style="color:#CF231D">
"functionName"</span>, funcType);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMValueRef</span> mParam = <span style="color:#3C0F81">
LLVMGetParam</span>(func, <span style="color:#2500D8">0</span>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMSetValueName</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(mParam,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"m"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMValueRef</span> xParam = <span style="color:#3C0F81">
LLVMGetParam</span>(func, <span style="color:#2500D8">1</span>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMSetValueName</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(xParam,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"x"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMValueRef</span> bParam = <span style="color:#3C0F81">
LLVMGetParam</span>(func, <span style="color:#2500D8">2</span>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMSetValueName</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(bParam,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"b"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMBasicBlockRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> entryBB;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    entryBB =
<span style="color:#3C0F81">LLVMAppendBasicBlockInContext</span>(llvm, func, <span style="color:#CF231D">
"entry"</span>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMBuilderRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> builder;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">    builder =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMCreateBuilderInContext</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(llvm);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMPositionBuilderAtEnd</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(builder, entryBB);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMValueRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> mx;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    mx =
<span style="color:#3C0F81">LLVMBuildMul</span>(builder, mParam, xParam, <span style="color:#CF231D">
"mx"</span>);<o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMValueRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> y;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    y =
<span style="color:#3C0F81">LLVMBuildAdd</span>(builder, mx, bParam, <span style="color:#CF231D">
"y"</span>);<o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMValueRef</span> retInst;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    retInst =
<span style="color:#3C0F81">LLVMBuildRet</span>(builder, y);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    (<span style="color:#B80FA2">void</span>) retInst;<o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMDisposeBuilder</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(builder);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMLinkInJIT</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">();</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMLinkInInterpreter</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">();</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMInitializeNativeTarget</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">();</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMDumpModule</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(module);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#008700">/* Now run it! */<o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMExecutionEngineRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> jit =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#B80FA2">NULL</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">;</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#B80FA2">char</span> *err;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#008700">//    LLVMBool result = LLVMCreateExecutionEngineForModule(&jit, module, &err);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMBool</span> result = <span style="color:#3C0F81">
LLVMCreateJITCompilerForModule</span>(&jit, module, <span style="color:#2500D8">0</span>, &err);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#B80FA2">if</span> (result) {<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">       
<span style="color:#3C0F81">printf</span>(<span style="color:#CF231D">"Fail: %s\n"</span>, err);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">       
<span style="color:#B80FA2">return</span> -<span style="color:#2500D8">1</span>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    }<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">printf</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"JIT is %p\n"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">,
 jit);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMGenericValueRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> argM =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMCreateGenericValueOfInt</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(int32,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">10</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#6F32A9">LLVMGenericValueRef</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"> argX =
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMCreateGenericValueOfInt</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(int32,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">5</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#2500D8">0</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMGenericValueRef</span> argB = <span style="color:#3C0F81">
LLVMCreateGenericValueOfInt</span>(int32, <span style="color:#2500D8">1</span>, <span style="color:#2500D8">
0</span>);    <o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMGenericValueRef</span> args[] = {argM, argX, argB};<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#6F32A9">LLVMGenericValueRef</span> result2 = <span style="color:#3C0F81">
LLVMRunFunction</span>(jit, func, <span style="color:#2500D8">3</span>, args);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#B80FA2">unsigned</span> <span style="color:#B80FA2">long</span>
<span style="color:#B80FA2">long</span> answer = <span style="color:#3C0F81">LLVMGenericValueToInt</span>(result2,
<span style="color:#2500D8">0</span>);<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">printf</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D">"And the answer
 is %d\n"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">, (</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#B80FA2">int</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">)answer);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#CF231D"><o:p></o:p></span></p>
</div>
<p style="margin:0in;margin-bottom:.0001pt;min-height: 13.0px"><span style="font-size:8.5pt;font-family:"Menlo","serif"">    <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMDisposeModule</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(module);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">   
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81">LLVMContextDispose</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black">(llvm);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:#3C0F81"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">   
<span style="color:#B80FA2">return</span> <span style="color:#2500D8">0</span>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif"">}<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo","serif""><o:p> </o:p></span></p>
</div>
</div>
</div>
</div>
</body>
</html>