IIRC this is a merging predicated instruction, so the destination register retains its existing values for inactive lanes, and that’s why you see the extra input operand.
Yes @amara is right. The instruction is predicated and merges the result into the source-and-also-destination operand (you can see they’ve got a tied operand constraint):
Basically, the unary op fneg negates the input from $Zn and does a predicated move of the result into the source/destination operand $Zd/$_Zd.
The register allocator must ensure that Zd (the destination) equals _Zd (the source operand into which the result is merged). Because Zd = _Zd, the instruction is printed as opcode $Zd, $Pg/m, $Zn.
We’ve tried to reflect this in the name of the instruction (Pm = merging), as opposed to FNEG_ZPzZ, which zeroes the inactive lanes. FNEG_ZPzZ does not take another vector source operand, because none of it’s lanes would be used (i.e. the inactive lanes would be zeroed).
The downside of re-using $Src for the pass-thru operand rather than IMPLICIT_DEF is that when $Src has more than a single use the register allocator will have to insert explicit movs to retain $Src. With the way the patterns are currently implemented we can benefit from using movprfx, which may be more efficient.
What are you trying to do that you need to add a pattern for fneg?