<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 8/14/14, 9:58 PM, Byungchan An
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAC_qwHKWLxq=BT8iu7Kc9+gUSHAPQLuBXik6weMs_TOshxySLA@mail.gmail.com"
      type="cite">
      <div dir="ltr">Hello. This is Byungchan An.
        <div><br>
        </div>
        <div>I have a question on the llvm IR.</div>
        <div>I'm compiling grep and generate bitcode. Here, I found
          something weird such as the following.</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>
          <div>cond.true1536:                                    ; preds
            = %while.body1531</div>
          <div>  br <b>i1 false</b>, label %if.end1558, label
            %if.then1557, !dbg !6453</div>
        </div>
        <div><br>
        </div>
        <div>Until now, what I examined is register value calculated as
          a result of icmp, rcmp, trunk, and phi.</div>
        <div>So, this makes me really confused... What type of that
          value is and how can this be generated? Any simple example
          that can lead to this bit code?</div>
      </div>
    </blockquote>
    <br>
    This looks like a conditional branch in which the condition of the
    branch is the constant false.  False is simply a boolean constant
    (note the i1 type).  C code similar to the above code would be:<br>
    <br>
    if (0) {<br>
        ...<br>
    } else {<br>
        ...<br>
    }<br>
    <br>
    As for why you're seeing it, I don't know.  It could be that
    constant propagation has been run but simplifycfg or adce has not. 
    It could be that the front-end figured out that the boolean
    condition is false (and so it is there in the instruction) but the
    LLVM optimizations haven't been run yet to change the conditional
    branch into an unconditional branch.<br>
    <br>
    Remember that the condition to a conditional branch can be any LLVM
    value with a type of i1.  That includes instructions (e.g., icmp,
    load), constants (e.g., true, false), constant expressions, and
    function arguments.<br>
    <br>
    In any event, it is valid LLVM IR, and I suspect running the
    standard set of O2 optimizations would change the branch into an
    unconditional branch (I'm guessing either simplifycfg or adce would
    do the trick).<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<br>
    <br>
  </body>
</html>