1 | // RUN: %clang_cc1 -triple nvptx-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s |
2 | // RUN: %clang_cc1 -triple nvptx64-unknown-unknown -S -o - %s -emit-llvm | FileCheck %s |
3 | |
4 | typedef struct float4_s { |
5 | float x, y, z, w; |
6 | } float4_t; |
7 | |
8 | float4_t my_function(void) { |
9 | // CHECK-LABEL: define %struct.float4_s @my_function |
10 | float4_t t; |
11 | return t; |
12 | }; |
13 | |
14 | float bar(void) { |
15 | float4_t ret; |
16 | // CHECK-LABEL: @bar |
17 | // CHECK: call %struct.float4_s @my_function |
18 | ret = my_function(); |
19 | return ret.x; |
20 | } |
21 | |
22 | void foo(float4_t x) { |
23 | // CHECK-LABEL: @foo |
24 | // CHECK: %struct.float4_s* byval align 4 %x |
25 | } |
26 | |
27 | void fooN(float4_t x, float4_t y, float4_t z) { |
28 | // CHECK-LABEL: @fooN |
29 | // CHECK: %struct.float4_s* byval align 4 %x |
30 | // CHECK: %struct.float4_s* byval align 4 %y |
31 | // CHECK: %struct.float4_s* byval align 4 %z |
32 | } |
33 | |
34 | typedef struct nested_s { |
35 | unsigned long long x; |
36 | float z[64]; |
37 | float4_t t; |
38 | } nested_t; |
39 | |
40 | void baz(nested_t x) { |
41 | // CHECK-LABEL: @baz |
42 | // CHECK: %struct.nested_s* byval align 8 %x) |
43 | } |
44 | |