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