It seems to me that the ILP is able to begin execution of branches before the branch is known to be true.<p><pre><code>    def func():
        if predicate():
            task1()
        else:
            task2()
</code></pre>
In the above program, the processor would be able to speculatively start execution of task1 before the predicate function returned a value.<p>(obviously the processor does this on a much lower level than this code)