aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/X86/avx-cxx-record.cpp
blob: 6ce6815a521a189a3e7d254fd6c126854ea6500c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -emit-llvm -O2 -target-cpu x86-64-v3 -o - | FileCheck %s
// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -emit-llvm -O2 -target-cpu x86-64-v3 -fclang-abi-compat=20 -o - | FileCheck --check-prefix CLANG-20 %s

using UInt64x2 = unsigned long long __attribute__((__vector_size__(16), may_alias));

template<int id>
struct XMM1 {
    UInt64x2 x;
};

struct XMM2 : XMM1<0>, XMM1<1> {
};

// CHECK: define{{.*}} @_Z3foov({{.*}} [[ARG:%.*]]){{.*}}
// CLANG-20: define{{.*}} <4 x double> @_Z3foov()
// CHECK: entry:
// CHECK-NEXT: store {{.*}}, ptr [[ARG]]{{.*}}
// CHECK-NEXT: [[TMP1:%.*]] = getelementptr {{.*}}, ptr [[ARG]]{{.*}}
// CHECK-NEXT: store {{.*}}, ptr [[TMP1]]{{.*}}
XMM2 foo() {
  XMM2 result;
  ((XMM1<0>*)&result)->x = UInt64x2{1, 2};
  ((XMM1<1>*)&result)->x = UInt64x2{3, 4};
  return result;
}