We cannot zap a return if the return value at any of the function's call
sites is overdefined. This can happen, for example, when the return
value is used as a condition on for a branch and the return value is
still unknown when the branch is visited during ResolvedUndefsIn(). Then
the return value of the call site will be force to false.
Alternatively, we could mark functions as 'do not zap' if we go to
overdefined when handling call instructions, but the current approach
seems more direct.
In general, it is unfortunate that we fail to do the optimal thing
here. I guess we could force the return value to the known constant
after solving to at least replace the uses, but this seems like a slight
hack without much benefit.
I think cast<Instruction>(U) will fail if there's a BlockAddress user of F.