The manual G_DUP selection code would produce DUPv16i8 for v8s8s and DUPv8i16 for v4s16.
This adds the missing cases to the manual selection code, and makes it return false when there is an unexpected size.
Update select-dup.mir to reflect the change.
I think it's probably more readable if you just do a sequence of checks using LLT comparisons. I.e.