We don't need custom matching, we just a need a predicate to check
the immediate is greater than 32. We can use the existing ImmSub32
to adjust the immediate.
I've also used the new predicate in the other location that used
ImmSub32. I tried to create a test case where we would break without
the greater than 32 check on that pattern, but DAG combine defeated me.
Still seemed safer to have it.
I might be wrong here, but are we getting the operands to fshr the wrong way round? I'm seeing that the intrinsic documentation says that it takes operands %a, %b with %a in the MSB of the wide value, and we're passing them through to FSR as rs1 and rs3 respectively, where rs1 is the LSB of the wide value. I'm reading spec 0.92 so maybe there's a mismatch.
I don't think this applies to FSL because the spec says rs1 is the MSB of the wide value.