// RUN: %clang_cc1 -fms-extensions -fcxx-exceptions -ffreestanding -target-feature +avx -emit-llvm %s -o - -triple=i686-pc-win32 | FileCheck %s
void
void
// CHECK: define dso_local void @"?foo64@@YAXT__m64@@@Z"
__m64
// CHECK: define dso_local noundef <1 x i64> @"?rfoo64@@YA?AT__m64@@XZ"
void
// CHECK: define dso_local void @"?foo128@@YAXT__m128@@@Z"
const __m128
// CHECK: define dso_local noundef <4 x float> @"?rfoo128@@YA?BT__m128@@XZ"
void
// CHECK: define dso_local void @"?foo128d@@YAXU__m128d@@@Z"
volatile __m128d
// CHECK: define dso_local noundef <2 x double> @"?rfoo128d@@YA?CU__m128d@@XZ"
void
// CHECK: define dso_local void @"?foo128i@@YAXT__m128i@@@Z"
const volatile __m128i
// CHECK: define dso_local noundef <2 x i64> @"?rfoo128i@@YA?DT__m128i@@XZ"
void
// CHECK: define dso_local void @"?foo256@@YAXT__m256@@@Z"
__m256
// CHECK: define dso_local noundef <8 x float> @"?rfoo256@@YA?AT__m256@@XZ"
void
// CHECK: define dso_local void @"?foo256d@@YAXU__m256d@@@Z"
__m256d
// CHECK: define dso_local noundef <4 x double> @"?rfoo256d@@YA?AU__m256d@@XZ"
void
// CHECK: define dso_local void @"?foo256i@@YAXT__m256i@@@Z"
__m256i
// CHECK: define dso_local noundef <4 x i64> @"?rfoo256i@@YA?AT__m256i@@XZ"
// We have a custom mangling for vector types not standardized by Intel.
void
// CHECK: define dso_local void @"?foov8hi@@YAXT?$__vector@F$07@__clang@@@Z"
typedef int vi4b;
void
// CHECK: define dso_local void @"?foovi4b@@YAXT?$__vector@H$03@__clang@@@Z"
typedef float vf3;
void
// CHECK: define dso_local void @"?foovf3@@YAXT?$__vector@M$02@__clang@@@Z"
// Clang does not support vectors of complex types, so we can't test the
// mangling of them.