`noundef` on the return value means that > If the value representation contains any undefined or poison bits, the behavior is undefined. so if the function `ret`urns `undef`, that must be [`unreachable`](https://llvm.org/docs/LangRef.html#unreachable-instruction). Alive2 confirms this is allowed: <https://alive2.llvm.org/ce/z/bW2DoM> ``` define i32 @src() noundef { %start: ret i32 undef } => define i32 @tgt() noundef { %start: assume i1 0 } Transformation seems to be correct! ``` But seemingly it doesn't happen today: <https://llvm.godbolt.org/z/79a91o59q>