<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    John, Ether,<br>
    <br>
    Thank you for the reply.<br>
    <br>
    The root of the problem is exactly as what John described --<br>
    "there are attempted uses of instruction(s) before its/their
    respective definition(s)", so the LLVM Verify pass complains as
    "Instruction doesn't dominate all uses".<br>
    <br>
    This unveils the problem, but I haven't come up with a proper
    solution yet.<br>
    I will address in a different question.<br>
    <br>
    Thank you for the help.<br>
    <br>
    Chuck<br>
    <br>
    On 5/2/2011 2:29 PM, John Criswell wrote:
    <blockquote cite="mid:4DBEF80B.6080100@illinois.edu" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      On 5/2/11 11:59 AM, Chuck Zhao wrote:
      <blockquote cite="mid:4DBEE2F0.5070107@eecg.toronto.edu"
        type="cite">
        <meta http-equiv="Content-Type" content="text/html;
          charset=ISO-8859-1">
        <font size="+1">I am having difficulty in replicating </font><font
          size="+1">a sequence of instructions (2+, with def-use
          dependencies within) </font><font size="+1">and inserting
          them at a different location.<br>
          <br>
          I have tried a few different approaches (IRBuilder, new
          Instruction(), I->clone(), insertBefore/insertAfter,etc.),
          all leading to the same error msg:<br>
          <big>"Instruction doesn't dominate all uses"</big><br>
        </font></blockquote>
      <br>
      In LLVM IR, an instruction must dominate all of its uses.  What
      this means is that an instruction must be inserted into a basic
      block that dominates the basic blocks of all instructions that use
      the inserted instruction's result.  In other words, it must be the
      case that the inserted instruction is always executed once before
      any instruction that uses its result.<br>
      <br>
      I'm not sure what you are doing wrong that is causing the above
      problem to occur.  It might be that you're not adjusting the
      def-use chains after replication or you might be inserting
      instructions in the wrong order in a basic block (defs must come
      before uses).<br>
      <br>
      The above error comes from the verifier pass, so you can disable
      the verifier pass, save the bitcode, and disassemble it to see
      what IR you're building that is incorrect.  Alternatively, you can
      have your transform dump the new instructions to stdout or stderr
      to see what IR it is generating.<br>
      <br>
      -- John T.<br>
      <br>
      <blockquote cite="mid:4DBEE2F0.5070107@eecg.toronto.edu"
        type="cite"><font size="+1"> <br>
          The DevList has a few previous discussions on this, but not
          much of hints I can get from there.<br>
          <br>
          Could somebody point me a code template or an existing LLVM
          source file that does similar things?<br>
          <br>
          <br>
          Thank you very much<br>
          <br>
          Chuck<br>
          <br>
          <br>
        </font>
        <pre wrap=""><fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
LLVM Developers mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
      </blockquote>
      <br>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>