// RUN: %clang_cc1 -target-feature +altivec -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s

typedef short v2i16 __attribute__((vector_size (4)));
typedef short v3i16 __attribute__((vector_size (6)));
typedef short v4i16 __attribute__((vector_size (8)));
typedef short v6i16 __attribute__((vector_size (12)));
typedef short v8i16 __attribute__((vector_size (16)));
typedef short v16i16 __attribute__((vector_size (32)));

struct v16i16 { v16i16 x; };

// CHECK: define{{.*}} i32 @test_v2i16(i32 noundef %x.coerce)
v2i16 test_v2i16(v2i16 x)
{
  return x;
}

// CHECK: define{{.*}} i64 @test_v3i16(i64 %x.coerce)
v3i16 test_v3i16(v3i16 x)
{
  return x;
}

// CHECK: define{{.*}} i64 @test_v4i16(i64 noundef %x.coerce)
v4i16 test_v4i16(v4i16 x)
{
  return x;
}

// CHECK: define{{.*}} <6 x i16> @test_v6i16(<6 x i16> noundef %x)
v6i16 test_v6i16(v6i16 x)
{
  return x;
}

// CHECK: define{{.*}} <8 x i16> @test_v8i16(<8 x i16> noundef %x)
v8i16 test_v8i16(v8i16 x)
{
  return x;
}

// CHECK: define{{.*}} void @test_v16i16(ptr noalias sret(<16 x i16>) align 32 %agg.result, ptr noundef %0)
v16i16 test_v16i16(v16i16 x)
{
  return x;
}

// CHECK: define{{.*}} void @test_struct_v16i16(ptr noalias sret(%struct.v16i16) align 32 %agg.result, [2 x i128] %x.coerce)
struct v16i16 test_struct_v16i16(struct v16i16 x)
{
  return x;
}
