<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 9/13/11 9:22 AM, Michael Clagett wrote:
    <blockquote cite="mid:BAY147-W58878C8BFB7DA0EF3E0452CE050@phx.gbl"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
      <div dir="ltr">
        Oooohhh!  That's interesting.   Does the optimizer just work
        around these inline fragments?  Is there documentation for this
        facility?<br>
      </div>
    </blockquote>
    <br>
    CC'ing the mailing list.<br>
    <br>
    The inline assembly feature is described in the LLVM Language
    Reference Manual (<a class="moz-txt-link-freetext" href="http://llvm.org/docs/LangRef.html">http://llvm.org/docs/LangRef.html</a>).  I'm not
    really familiar with what the LLVM optimizers will do with inline
    assembly code; all I really know is that there's a well-defined
    interface between LLVM code and inline assembly code that allows the
    optimizers to "do the right thing" (e.g., an inline assembly
    fragment can specify that it needs one register for input and two
    for outputs, and the LLVM code generator will assign physical
    registers for you, or you can tell it that you're using %eax, and
    the LLVM code generator won't generate code that clobbers %eax).<br>
    <br>
    It's basically the same as GCC inline assembly.<br>
    <br>
    -- John T.<br>
    <br>
    <blockquote cite="mid:BAY147-W58878C8BFB7DA0EF3E0452CE050@phx.gbl"
      type="cite">
      <div dir="ltr"><br>
        <div>
          <hr id="stopSpelling">Date: Tue, 13 Sep 2011 09:20:03 -0500<br>
          From: <a class="moz-txt-link-abbreviated" href="mailto:criswell@illinois.edu">criswell@illinois.edu</a><br>
          To: <a class="moz-txt-link-abbreviated" href="mailto:mclagett@hotmail.com">mclagett@hotmail.com</a><br>
          CC: <a class="moz-txt-link-abbreviated" href="mailto:llvmdev@cs.uiuc.edu">llvmdev@cs.uiuc.edu</a><br>
          Subject: Re: [LLVMdev] Strategy for leveraging llvm
          optimizations in vm<br>
          <br>
          <meta name="Generator" content="Microsoft SafeHTML">
          On 9/13/11 8:14 AM, Michael Clagett wrote:
          <blockquote
            cite="mid:BAY147-W331A621D0BBCAB0A5FD904CE050@phx.gbl">
            <style>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}

</style>
            <div dir="ltr">
              <style>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Tahoma;}

</style>
              <div dir="ltr"><br>
                Hi --<br>
                <br>
                I'm still very much a newbie with llvm, but am looking
                (hopefully) to use it to compile into native intel code
                a set of source that is a combination of byte codes for
                my own custom vm and intel code that has been coded in
                assembly language directly.<br>
                <br>
                In an earlier exchange, I already discovered that llvm
                does not do any optimizations on intel assembly language
                code.  This would be an interesting thing to add, I
                believe, and I may make some progress in that direction
                as I proceed.  But in the meantime I'm wondering if the
                following makes sense:  To write two separate
                translation mechanisms; one that translates the
                assembler code associated with each of my byte codes
                into a sequence of llvm intermediate code instructions,
                and the other to do the same with instructions coded
                directly in intel assembly (i.e there would be a
                one-to-one correspondence between intel assembly
                language statements and llvm intermediate code
                statements, substituting real register assignments with
                llvm virtual register assignments.<br>
              </div>
            </div>
          </blockquote>
          <br>
          Another option for handling the assembly language fragments is
          to convert them into inline assembly code within the LLVM IR
          that you generate.  This might be worth exploring if
          converting the assembly code into LLVM IR is either difficult
          or causes a performance hit.<br>
          <br>
          -- John T.<br>
          <br>
          <br>
          <blockquote
            cite="mid:BAY147-W331A621D0BBCAB0A5FD904CE050@phx.gbl">
            <div dir="ltr">
              <div dir="ltr"><br>
                It strikes me that if I did this, I would then have
                instruction sequences (whether originating in my byte
                code or in intel assembly language) that could be
                submitted to the llvm optimization engine.  Does this
                make sense to any of you old hands?<br>
                <br>
                Thanks.<br>
                <br>
                Mike<br>
              </div>
            </div>
            <br>
            <fieldset class="ecxmimeAttachmentHeader"></fieldset>
            <br>
            <pre>_______________________________________________
LLVM Developers mailing list
<a moz-do-not-send="true" class="ecxmoz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a moz-do-not-send="true" class="ecxmoz-txt-link-freetext" href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a>
<a moz-do-not-send="true" class="ecxmoz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
          </blockquote>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>