AFAICT the way SDAG does this is:
fshl (x, y, undef) -> x for scalars fshr (x, y, undef) -> y for scalars fshl (x, y, undef) -> undef for vectors fshr (x, y, undef) -> undef for vectors
https://gcc.godbolt.org/z/xq9PYfhYh
This should fix https://github.com/llvm/llvm-project/issues/57256
Different behavior for vector and scalar sounds really broken