We can only fold insertvalue undef, (extractvalue x, n) to x if x is not poison, otherwise we might be replacing undef with poison (https://alive2.llvm.org/ce/z/fnw3c8). The insertvalue poison case is always fine.
I didn't go to particularly large effort to preserve cases where folding with undef is still legal (mainly when there is a chain of multiple inserts that end up covering the whole aggregate), because this shouldn't really occur in practice: We should always be generating the insertvalue poison form when constructing aggregates nowadays.