// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -target-cpu corei7-avx -emit-llvm -x c++ %s -o - | FileCheck %s

typedef double vector8double __attribute__((__vector_size__(64)));
typedef float  vector8float  __attribute__((__vector_size__(32)));
typedef long   vector8long   __attribute__((__vector_size__(64)));
typedef short  vector8short  __attribute__((__vector_size__(16)));
typedef unsigned long   vector8ulong   __attribute__((__vector_size__(64)));
typedef unsigned short  vector8ushort  __attribute__((__vector_size__(16)));

#ifdef __cplusplus
extern "C" {
#endif

vector8float flt_trunc(vector8double x) {
  return __builtin_convertvector(x, vector8float);
  // CHECK-LABEL: @flt_trunc
  // CHECK: fptrunc <8 x double> %{{[^ ]}} to <8 x float>
}

vector8double flt_ext(vector8float x) {
  return __builtin_convertvector(x, vector8double);
  // CHECK-LABEL: @flt_ext
  // CHECK: fpext <8 x float> %{{[^ ]}} to <8 x double>
}

vector8long flt_tosi(vector8float x) {
  return __builtin_convertvector(x, vector8long);
  // CHECK-LABEL: @flt_tosi
  // CHECK: fptosi <8 x float> %{{[^ ]}} to <8 x i64>
}

vector8ulong flt_toui(vector8float x) {
  return __builtin_convertvector(x, vector8ulong);
  // CHECK-LABEL: @flt_toui
  // CHECK: fptoui <8 x float> %{{[^ ]}} to <8 x i64>
}

vector8ulong fltd_toui(vector8double x) {
  return __builtin_convertvector(x, vector8ulong);
  // CHECK-LABEL: @fltd_toui
  // CHECK: fptoui <8 x double> %{{[^ ]}} to <8 x i64>
}

vector8ulong int_zext(vector8ushort x) {
  return __builtin_convertvector(x, vector8ulong);
  // CHECK-LABEL: @int_zext
  // CHECK: zext <8 x i16> %{{[^ ]}} to <8 x i64>
}

vector8long int_sext(vector8short x) {
  return __builtin_convertvector(x, vector8long);
  // CHECK-LABEL: @int_sext
  // CHECK: sext <8 x i16> %{{[^ ]}} to <8 x i64>
}

vector8float int_tofp(vector8short x) {
  return __builtin_convertvector(x, vector8float);
  // CHECK-LABEL: @int_tofp
  // CHECK: sitofp <8 x i16> %{{[^ ]}} to <8 x float>
}

vector8float uint_tofp(vector8ushort x) {
  return __builtin_convertvector(x, vector8float);
  // CHECK-LABEL: @uint_tofp
  // CHECK: uitofp <8 x i16> %{{[^ ]}} to <8 x float>
}

#ifdef __cplusplus
}
#endif


#ifdef __cplusplus
template<typename T>
T int_toT(vector8long x) {
  return __builtin_convertvector(x, T);
}

extern "C" {
  vector8double int_toT_fp(vector8long x) {
    // CHECK-LABEL: @int_toT_fp
    // CHECK: sitofp <8 x i64> %{{[^ ]}} to <8 x double>
    return int_toT<vector8double>(x);
  }
}
#else
vector8double int_toT_fp(vector8long x) {
  return __builtin_convertvector(x, vector8double);
}
#endif

