On PowerPC64, integer arguments and return values need to be sign- or
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 5 Nov 2012 19:13:42 +0000 (19:13 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 5 Nov 2012 19:13:42 +0000 (19:13 +0000)
commit77ed89dbad943d657dcc79fa29f92fe6abd74efc
treeaddb5d7a42d1d3bdd5a32afd0e839466fe4bfd2f
parent2cce3f91f89e9ca353412db6c9e2b90b02d563fb
On PowerPC64, integer arguments and return values need to be sign- or
zero-extended to 64 bits.  This information is currently provided to
the back end by setting "signext" or "zeroext" attributes.  However,
this is done only for integer types *smaller* than i32, not for i32
itself.  This causes clang to generate code violating the ABI, which
results in a failure of the tramp3d-v4 test case (due to calling a
system library routine without ABI-required extension).

This patch implements custom versions of classifyArgumentType and
classifyReturnType for PPC64_SVR4_ABIInfo, which are the same as the
default versions except that they also classify "int" and "unsigned int"
as types needing extending.  This fixed tramp3d-v4 on PowerPC64.

llvm-svn: 167393
clang/lib/CodeGen/TargetInfo.cpp
clang/test/CodeGen/ppc64-extend.c [new file with mode: 0644]