mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-23 21:45:46 -04:00

LLVM IR recently added a Type parameter to the byval Attribute, so that when pointers become opaque and no longer have an element type the information will still be present in IR. For now the Type parameter is optional (which is why Clang didn't need this change at the time), but it will become mandatory soon. llvm-svn: 362652
62 lines
1.2 KiB
C++
62 lines
1.2 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; }
|
|
}
|