Since D61806, DAGCombiner has folded subvector_extract(bitcast(..)) to bitcast(subvector_extract(..)), which would place a bitcast between a subvector_extract and the operation that could be converted to a "high" neon instruction (like smull2). This adds better matching for the subvector_extract, through the tablegen extract_high PatFrags to optionally skip the bitcast under little ending, still matchings an extract of the high half of the input vector.
I didn't update the extract_high of a duplicate patterns, as the ComplexPattern need names operands. I did add a extract_high_dup_v8i16 PatFrag to abstract away the common code, which can be extended in a future patch.
Out of curiosity, what changes when being explicit about the operand's type?