xref: /aosp_15_r20/external/clang/test/CodeGenCXX/x86_64-arguments-avx.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-feature +avx | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li namespace test1 {
4*67e74705SXin Li typedef double __m256d __attribute__((__vector_size__(32)));
5*67e74705SXin Li 
6*67e74705SXin Li class PR22753 {
7*67e74705SXin Li public:
8*67e74705SXin Li   __m256d data;
9*67e74705SXin Li };
10*67e74705SXin Li 
11*67e74705SXin Li // CHECK: define <4 x double> @_ZN5test14testENS_7PR22753E(<4 x double>
test(PR22753 x)12*67e74705SXin Li PR22753 test(PR22753 x) {
13*67e74705SXin Li   return x;
14*67e74705SXin Li }
15*67e74705SXin Li }
16*67e74705SXin Li 
17*67e74705SXin Li namespace test2 {
18*67e74705SXin Li typedef double __m128d __attribute__((__vector_size__(16)));
19*67e74705SXin Li typedef float __m128 __attribute__((__vector_size__(16)));
20*67e74705SXin Li typedef double __m256d __attribute__((__vector_size__(32)));
21*67e74705SXin Li typedef float __m256 __attribute__((__vector_size__(32)));
22*67e74705SXin Li 
23*67e74705SXin Li union U1 {
24*67e74705SXin Li   __m128  v1;
25*67e74705SXin Li   __m128d v2;
26*67e74705SXin Li };
27*67e74705SXin Li 
28*67e74705SXin Li union UU1 {
29*67e74705SXin Li   union U1;
30*67e74705SXin Li   __m128d v3;
31*67e74705SXin Li };
32*67e74705SXin Li 
33*67e74705SXin Li // CHECK: define <2 x double> @_ZN5test27PR23082ENS_3UU1E(<2 x double>
PR23082(UU1 x)34*67e74705SXin Li UU1 PR23082(UU1 x) {
35*67e74705SXin Li   return x;
36*67e74705SXin Li }
37*67e74705SXin Li 
38*67e74705SXin Li union U2 {
39*67e74705SXin Li   __m256  v1;
40*67e74705SXin Li   __m256d v2;
41*67e74705SXin Li };
42*67e74705SXin Li 
43*67e74705SXin Li union UU2 {
44*67e74705SXin Li   union U2;
45*67e74705SXin Li   __m256d v3;
46*67e74705SXin Li };
47*67e74705SXin Li 
48*67e74705SXin Li // CHECK: define <4 x double> @_ZN5test27PR23082ENS_3UU2E(<4 x double>
PR23082(UU2 x)49*67e74705SXin Li UU2 PR23082(UU2 x) {
50*67e74705SXin Li   return x;
51*67e74705SXin Li }
52*67e74705SXin Li }
53*67e74705SXin Li 
54*67e74705SXin Li namespace test3 {
55*67e74705SXin Li union U {
56*67e74705SXin Li   __attribute__((__vector_size__(32))) float f1;
57*67e74705SXin Li   int f2;
58*67e74705SXin Li };
59*67e74705SXin Li // CHECK: define i32 @_ZN5test31fENS_1UE({{.*}}* byval align 32
f(U u)60*67e74705SXin Li int f(U u) { return u.f2; }
61*67e74705SXin Li }
62