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