| // RUN: %clang_cc1 -triple x86_64-linux -emit-llvm -target-feature +sse2 < %s | FileCheck %s --check-prefixes=CHECK |
| |
| struct bfloat1 { |
| __bf16 a; |
| }; |
| |
| struct bfloat1 h1(__bf16 a) { |
| // CHECK: define{{.*}}bfloat @ |
| struct bfloat1 x; |
| x.a = a; |
| return x; |
| } |
| |
| struct bfloat2 { |
| __bf16 a; |
| __bf16 b; |
| }; |
| |
| struct bfloat2 h2(__bf16 a, __bf16 b) { |
| // CHECK: define{{.*}}<2 x bfloat> @ |
| struct bfloat2 x; |
| x.a = a; |
| x.b = b; |
| return x; |
| } |
| |
| struct bfloat3 { |
| __bf16 a; |
| __bf16 b; |
| __bf16 c; |
| }; |
| |
| struct bfloat3 h3(__bf16 a, __bf16 b, __bf16 c) { |
| // CHECK: define{{.*}}<4 x bfloat> @ |
| struct bfloat3 x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| return x; |
| } |
| |
| struct bfloat4 { |
| __bf16 a; |
| __bf16 b; |
| __bf16 c; |
| __bf16 d; |
| }; |
| |
| struct bfloat4 h4(__bf16 a, __bf16 b, __bf16 c, __bf16 d) { |
| // CHECK: define{{.*}}<4 x bfloat> @ |
| struct bfloat4 x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| x.d = d; |
| return x; |
| } |
| |
| struct floatbfloat { |
| float a; |
| __bf16 b; |
| }; |
| |
| struct floatbfloat fh(float a, __bf16 b) { |
| // CHECK: define{{.*}}<4 x half> @ |
| struct floatbfloat x; |
| x.a = a; |
| x.b = b; |
| return x; |
| } |
| |
| struct floatbfloat2 { |
| float a; |
| __bf16 b; |
| __bf16 c; |
| }; |
| |
| struct floatbfloat2 fh2(float a, __bf16 b, __bf16 c) { |
| // CHECK: define{{.*}}<4 x half> @ |
| struct floatbfloat2 x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| return x; |
| } |
| |
| struct bfloatfloat { |
| __bf16 a; |
| float b; |
| }; |
| |
| struct bfloatfloat hf(__bf16 a, float b) { |
| // CHECK: define{{.*}}<4 x half> @ |
| struct bfloatfloat x; |
| x.a = a; |
| x.b = b; |
| return x; |
| } |
| |
| struct bfloat2float { |
| __bf16 a; |
| __bf16 b; |
| float c; |
| }; |
| |
| struct bfloat2float h2f(__bf16 a, __bf16 b, float c) { |
| // CHECK: define{{.*}}<4 x bfloat> @ |
| struct bfloat2float x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| return x; |
| } |
| |
| struct floatbfloat3 { |
| float a; |
| __bf16 b; |
| __bf16 c; |
| __bf16 d; |
| }; |
| |
| struct floatbfloat3 fh3(float a, __bf16 b, __bf16 c, __bf16 d) { |
| // CHECK: define{{.*}}{ <4 x half>, bfloat } @ |
| struct floatbfloat3 x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| x.d = d; |
| return x; |
| } |
| |
| struct bfloat5 { |
| __bf16 a; |
| __bf16 b; |
| __bf16 c; |
| __bf16 d; |
| __bf16 e; |
| }; |
| |
| struct bfloat5 h5(__bf16 a, __bf16 b, __bf16 c, __bf16 d, __bf16 e) { |
| // CHECK: define{{.*}}{ <4 x bfloat>, bfloat } @ |
| struct bfloat5 x; |
| x.a = a; |
| x.b = b; |
| x.c = c; |
| x.d = d; |
| x.e = e; |
| return x; |
| } |