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 LiPR22753 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 LiUU1 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 LiUU2 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 Liint f(U u) { return u.f2; } 61*67e74705SXin Li } 62