The negate operation is never compressible (as the destination and rs1 register must differ). The two shift versions will be equal size if the input GPR is reused, or smaller if this is the only use of the input.
For clarity, the operation being performed is (select (low-bit-of x), -1, 0).
This shouldn't be specific to RV64, but my attempts to write a pattern which used ImmSubFromVLen kept failing type inference. Any suggestions on how to write such a pattern?