I wonder if some of this C ABI hate is related to a design quirk of the LLVM tools: Is it true that every front end targeting LLVM needs to implement the C calling convention mostly on its own, rather than specifying a C function signature at the LLVM IR level (using a different syntax, obviously) and have the target backend translate that into the appropriate instruction sequence for the call?