It seems that LLVM's register allocator can't handle tied operands where the input and output types differ.
Clang hides this a bit by adding zero-extensions when both types are integers or pointers.
But for all other type combinations, it produces an error.
This is purely an LLVM limitation, GCC handles different types just fine.
And so would our theoretical external assembler fallback.
The question is: do we want to provide the same implicit conversion for integers that Clang does?
I'm tending towards no, since unlike Clang we don't have to emulate GCC's behavior. We can just force users to provide the casts where needed.
Yeah, that seems acceptable. It would be confusing even if it worked.