// RUN: %clang_cc1 -triple x86_64-linux -emit-llvm  -target-feature +avx512fp16 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-C
// RUN: %clang_cc1 -triple x86_64-linux -emit-llvm  -target-feature +avx512fp16 -x c++ -std=c++11 < %s | FileCheck %s --check-prefixes=CHECK,CHECK-CPP

struct half1 {
  _Float16 a;
};

struct half1 h1(_Float16 a) {
  // CHECK: define{{.*}}half @
  struct half1 x;
  x.a = a;
  return x;
}

struct half2 {
  _Float16 a;
  _Float16 b;
};

struct half2 h2(_Float16 a, _Float16 b) {
  // CHECK: define{{.*}}<2 x half> @
  struct half2 x;
  x.a = a;
  x.b = b;
  return x;
}

struct half3 {
  _Float16 a;
  _Float16 b;
  _Float16 c;
};

struct half3 h3(_Float16 a, _Float16 b, _Float16 c) {
  // CHECK: define{{.*}}<4 x half> @
  struct half3 x;
  x.a = a;
  x.b = b;
  x.c = c;
  return x;
}

struct half4 {
  _Float16 a;
  _Float16 b;
  _Float16 c;
  _Float16 d;
};

struct half4 h4(_Float16 a, _Float16 b, _Float16 c, _Float16 d) {
  // CHECK: define{{.*}}<4 x half> @
  struct half4 x;
  x.a = a;
  x.b = b;
  x.c = c;
  x.d = d;
  return x;
}

struct floathalf {
  float a;
  _Float16 b;
};

struct floathalf fh(float a, _Float16 b) {
  // CHECK: define{{.*}}<4 x half> @
  struct floathalf x;
  x.a = a;
  x.b = b;
  return x;
}

struct floathalf2 {
  float a;
  _Float16 b;
  _Float16 c;
};

struct floathalf2 fh2(float a, _Float16 b, _Float16 c) {
  // CHECK: define{{.*}}<4 x half> @
  struct floathalf2 x;
  x.a = a;
  x.b = b;
  x.c = c;
  return x;
}

struct halffloat {
  _Float16 a;
  float b;
};

struct halffloat hf(_Float16 a, float b) {
  // CHECK: define{{.*}}<4 x half> @
  struct halffloat x;
  x.a = a;
  x.b = b;
  return x;
}

struct half2float {
  _Float16 a;
  _Float16 b;
  float c;
};

struct half2float h2f(_Float16 a, _Float16 b, float c) {
  // CHECK: define{{.*}}<4 x half> @
  struct half2float x;
  x.a = a;
  x.b = b;
  x.c = c;
  return x;
}

struct floathalf3 {
  float a;
  _Float16 b;
  _Float16 c;
  _Float16 d;
};

struct floathalf3 fh3(float a, _Float16 b, _Float16 c, _Float16 d) {
  // CHECK: define{{.*}}{ <4 x half>, half } @
  struct floathalf3 x;
  x.a = a;
  x.b = b;
  x.c = c;
  x.d = d;
  return x;
}

struct half5 {
  _Float16 a;
  _Float16 b;
  _Float16 c;
  _Float16 d;
  _Float16 e;
};

struct half5 h5(_Float16 a, _Float16 b, _Float16 c, _Float16 d, _Float16 e) {
  // CHECK: define{{.*}}{ <4 x half>, half } @
  struct half5 x;
  x.a = a;
  x.b = b;
  x.c = c;
  x.d = d;
  x.e = e;
  return x;
}

struct float2 {
  struct {} s;
  float a;
  float b;
};

float pr51813(struct float2 s) {
  // CHECK-C: define{{.*}} @pr51813(<2 x float>
  // CHECK-CPP: define{{.*}} @_Z7pr518136float2(double {{.*}}, float
  return s.a;
}

struct float3 {
  float a;
  struct {} s;
  float b;
};

float pr51813_2(struct float3 s) {
  // CHECK-C: define{{.*}} @pr51813_2(<2 x float>
  // CHECK-CPP: define{{.*}} @_Z9pr51813_26float3(double {{.*}}, float
  return s.a;
}

struct shalf2 {
  struct {} s;
  _Float16 a;
  _Float16 b;
};

_Float16 sf2(struct shalf2 s) {
  // CHECK-C: define{{.*}} @sf2(<2 x half>
  // CHECK-CPP: define{{.*}} @_Z3sf26shalf2(double {{.*}}
  return s.a;
};

struct halfs2 {
  _Float16 a;
  struct {} s1;
  _Float16 b;
  struct {} s2;
};

_Float16 fs2(struct shalf2 s) {
  // CHECK-C: define{{.*}} @fs2(<2 x half>
  // CHECK-CPP: define{{.*}} @_Z3fs26shalf2(double {{.*}}
  return s.a;
};

struct fsd {
  float a;
  struct {};
  double b;
};

struct fsd pr52011() {
  // CHECK: define{{.*}} { float, double } @
}

struct hsd {
  _Float16 a;
  struct {};
  double b;
};

struct hsd pr52011_2() {
  // CHECK: define{{.*}} { half, double } @
}

struct hsf {
  _Float16 a;
  struct {};
  float b;
};

struct hsf pr52011_3() {
  // CHECK: define{{.*}} <4 x half> @
}

struct fds {
  float a;
  double b;
  struct {};
};

struct fds pr52011_4() {
  // CHECK-C: define{{.*}} { float, double } @pr52011_4
  // CHECK-CPP: define{{.*}} void @_Z9pr52011_4v({{.*}} sret
}
