This patch adds handling of rotation patterns with constant shift amounts - the next bit will be how we want to support non-uniform constant vectors.
Probably need to either guard or assert against invalid shift amounts here. Don't want to combine -33 and +1.
|2910 ↗||(On Diff #291597)|
mount -> amount
|2922 ↗||(On Diff #291597)|
Don't we need to check that the fsh operands are the same, or at least LHS->Provider and RHS->Provider are?
|2924 ↗||(On Diff #291597)|
I suspect this is inverted, but maybe I misunderstand the direction of the mapping. It would be good to at least add some tests where the fsh amount is not exactly half the bitwidth.
Result = fshl(LHS, RHS, 1) Result = RHS Result = LHS ... Result = LHS
I think I've worked out whats happened - we've replaced a 3 x instruction pattern (which was later matched to a single rotate instruction in the DAG) with 1 intrinsic (which matched to the same single rotate instruction) - which seems to have allowed a couple of core loops to be unrolled further/completely - leading to the code size increase.