We had some problems in merging splat value.
For example
We usually see 0xuuuu0001 as an undef value, then replace it with totally undef 0xuuuuuuuu.
But this is not make sense when we only use part value of it.
Take llvm.fshl.* for example:
t1: v4i32 = Constant:i32<12>, undef:i32, Constant:i32<12>, undef:i32 t2: v2i64 = bitcast t1 t5: v2i64 = fshl t3, t4, t2
We can not convert t2 to {i64 undef, i64 undef}
But this will be replaced or see "OK to replace" in SelectionDAG::isSplatValue.
This comment uses the word "down" as well, but to mean the number of bits is decreasing. I believe this patch is implementing this TODO.