Currently isAddRecNeverPoison fails if there are any abnormal exits in a
loop, like function calls that may throw.
This check can be a bit relaxed however: if the instruction we are
looking at is in the latch block and guaranteed to transfer execution
to the successor, then the instruction can never yield poison (if the
latch is control dependent on it), as the branch is always executed when
the instruction is executed.
You're not checking "all instructions between I and the end of the block".