llvm-project/clang/test/CodeGen/ppc64-extend.c
Ulrich Weigand 77ed89dbad 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
2012-11-05 19:13:42 +00:00

16 lines
453 B
C

// REQUIRES: ppc64-registered-target
// RUN: %clang_cc1 -O0 -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
void f1(int x) { return; }
// CHECK: define void @f1(i32 signext %x) nounwind
void f2(unsigned int x) { return; }
// CHECK: define void @f2(i32 zeroext %x) nounwind
int f3(void) { return 0; }
// CHECK: define signext i32 @f3() nounwind
unsigned int f4(void) { return 0; }
// CHECK: define zeroext i32 @f4() nounwind