[LLVMdev] -instcombine introduces "undef" values to the IR.

Nick Lewycky nlewycky at google.com
Wed Jun 11 13:09:15 PDT 2014


On 11 June 2014 12:26, Paul Vario <paul.paul.mit at gmail.com> wrote:

> Hi Fellows,
>
>      If a .ll file contains no "undef"'s, does it necessarily mean that
> every value is properly initialized before use in the IR? What confuses me
> is that I notice that -instcombine can introduce "undef" to the previously
> undef-clean .ll file ... is it always safe to use -instcombine  as one of
> the preprocessing pass? Thanks.
>

Yes, there's all manner of weird corner cases where it will. PHI nodes that
are cyclic and therefore dead, a provably invalid call to a library
function (sqrt negative), shift operations that provably shift out of
bounds, ... often it inserts a store to undef to indicate that the code is
unreachable (an unreachable instruction is a terminator instruction and
therefore inserting it would modify the CFG which instcombine is not
allowed to do).

The guarantee instcombine offers is that the resulting code will have the
exact same behaviour as the input code for all cases where the input code
had well defined behaviour. Anything else is a bug.

Nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140611/a56407d1/attachment.html>


More information about the llvm-dev mailing list