Currently, undef is used as a don’t-care value for vector operations, which causes hard problems.
For example, a shufflevector sometimes cannot be optimized away (https://bugs.llvm.org/show_bug.cgi?id=44185). The reason is that undef is not undefined enough.
To avoid such problem, I’d like to suggest using poison constant for vector operations’ placeholder instead.
I made a patch that updates InstCombine’s SimplifyDemandedVectorElts here, with a detailed description: https://reviews.llvm.org/D93586