SysV ABI non-power-of-two returns, motivation?

For the x64 SysV ABI, Clang uses i48 and i24 types to represent structs containing data with that size. For example struct { short z[3]; } will be represented by an i48.

My question now is: is this the only possible representation that works? I believe that LLVM will lower this to using an i64 (i.e. it puts it in a register) in practice anyway, although obviously it discards the top bits.

I would like to change this representation to something that can be optimized equally well but avoids the non-pot size if possible. Can it be done?