The definition of the builtins builtin_bswap32, builtin_bitreverse32, builtin_rotateleft32 and builtin_rotateright32 rely on that the int type is 32 bits wide on the target.
The defintions of the builtins builtin_bswap64, builtin_bitreverse64, builtin_rotateleft64, and builtin_rotateright64 rely on that the long long type is 64 bits wide.
On targets where this is not the case (e.g. AVR) clang will generate faulty code (wrong llvm assembler intrinsics).
This patch add support for using 'Z' (the int32_t type) in Bultins.def. The builtins above are changed to be based on the int32_t type instead of the int type, and the int64_t type instead of the long long type.
The AVR backend (experimental) have a native int type that is only 16 bits wide. The supplied testcase will therefore fail if running the testcase on trunk as clang will convert e.g. __builtin_bitreverse32 into llvm.bitreverse.i16 on AVR.