As discussed on llvm-dev, it's unfortunate that ISD::ArgFlagsTy doesn't contain IsFixed. Adding this field isn't enough to get rid of SystemZ, PPC or Mips custom CCState, but does allow simplifications in the Lanai and Mips backends as well as removal of HexagonCCState.
This patch doesn't update any backend's GlobalISel call lowering to use the new field. Further improvements are possible: AArch64ISelLowering::CCAssignFnForCall could be updated to not take an IsVarArg parameter, AArch64 vararg calling conventions could be removed and CCIfFixed used instead, and CCAssignFnForCall could then be called only once per function rather than once per argument.
Posted with the hope of getting initial feedback on this direction.
It looks like SelectionDAG and FastISel are both calling Flags.setFixed() themselves. Do we still need the IsFixed argument or is GlobalISel still using it?