// REQUIRES: ppc64-registered-target
// RUN: %clang_cc1 -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s

#include <stdarg.h>

struct x {
  long a;
  double b;
};

void testva (int n, ...)
{
  va_list ap;

  struct x t = va_arg (ap, struct x);
// CHECK: bitcast i8* %ap.cur{{[0-9]*}} to %struct.x*
// CHECK: bitcast %struct.x* %t to i8*
// CHECK: bitcast %struct.x* %{{[0-9]+}} to i8*
// CHECK: call void @llvm.memcpy

  __int128_t u = va_arg (ap, __int128_t);
// CHECK: ptrtoint i8* %ap.cur{{[0-9]*}} to i64
// CHECK: add i64 %{{[0-9]+}}, 15
// CHECK: and i64 %{{[0-9]+}}, 4294967280
// CHECK: inttoptr i64 %{{[0-9]+}} to i8*

  int v = va_arg (ap, int);
// CHECK: ptrtoint i8* %ap.cur{{[0-9]*}} to i64
// CHECK: add i64 %{{[0-9]+}}, 4
// CHECK: inttoptr i64 %{{[0-9]+}} to i8*
// CHECK: bitcast i8* %{{[0-9]+}} to i32*
}

Add a test case for r156143, which enabled general varargs support for the 64-bit PPC SVR4 ABI.
Add a test case for r156143, which enabled general varargs support for the
64-bit PPC SVR4 ABI.

The test verifies passing of structures, items with 16-byte alignment, and
small items that are passed right-justified in the parameter save area slot.


git-svn-id: ffe668792ed300d6c2daa1f6eba2e0aa28d7ec6c@165245 91177308-0d34-0410-b5e6-96231b3b80d8
