62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s -target-feature +avx | FileCheck %s
 | |
| 
 | |
| namespace test1 {
 | |
| typedef double __m256d __attribute__((__vector_size__(32)));
 | |
| 
 | |
| class PR22753 {
 | |
| public:
 | |
|   __m256d data;
 | |
| };
 | |
| 
 | |
| // CHECK: define <4 x double> @_ZN5test14testENS_7PR22753E(<4 x double>
 | |
| PR22753 test(PR22753 x) {
 | |
|   return x;
 | |
| }
 | |
| }
 | |
| 
 | |
| namespace test2 {
 | |
| typedef double __m128d __attribute__((__vector_size__(16)));
 | |
| typedef float __m128 __attribute__((__vector_size__(16)));
 | |
| typedef double __m256d __attribute__((__vector_size__(32)));
 | |
| typedef float __m256 __attribute__((__vector_size__(32)));
 | |
| 
 | |
| union U1 {
 | |
|   __m128  v1;
 | |
|   __m128d v2;
 | |
| };
 | |
| 
 | |
| union UU1 {
 | |
|   union U1;
 | |
|   __m128d v3;
 | |
| };
 | |
| 
 | |
| // CHECK: define <2 x double> @_ZN5test27PR23082ENS_3UU1E(<2 x double>
 | |
| UU1 PR23082(UU1 x) {
 | |
|   return x;
 | |
| }
 | |
| 
 | |
| union U2 {
 | |
|   __m256  v1;
 | |
|   __m256d v2;
 | |
| };
 | |
| 
 | |
| union UU2 {
 | |
|   union U2;
 | |
|   __m256d v3;
 | |
| };
 | |
| 
 | |
| // CHECK: define <4 x double> @_ZN5test27PR23082ENS_3UU2E(<4 x double>
 | |
| UU2 PR23082(UU2 x) {
 | |
|   return x;
 | |
| }
 | |
| }
 | |
| 
 | |
| namespace test3 {
 | |
| union U {
 | |
|   __attribute__((__vector_size__(32))) float f1;
 | |
|   int f2;
 | |
| };
 | |
| // CHECK: define i32 @_ZN5test31fENS_1UE({{.*}}* byval align 32
 | |
| int f(U u) { return u.f2; }
 | |
| }
 |