This is a first whack at a dedicated FNeg IR instruction...
I've over-engineered the UnaryOperator class a little, with the intention of adding more Unary operations in the future. E.g. integer Neg (and maybe Abs, Copysign, etc.).
I don't work on some of these parts of LLVM, so I have some questions for the group. The majority are about reordering enums without breaking public interfaces. I'll comment on this code inline shortly.
Also, changing one of the operator enums appears to have exposed a bug in the MergeFuctions pass. I'll also comment on this inline.
This strongly suggests that you can not reorder/renumber the existing enumerators.