86 lines · plain
1// RUN: rm -f %t.pch2// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -emit-pch -finclude-default-header -o %t.pch %s3// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -finclude-default-header -include-pch %t.pch %s -ast-dump | FileCheck --check-prefix=AST %s4// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -finclude-default-header -include-pch %t.pch %s -ast-print | FileCheck %s5 6 7#ifndef TEST_HLSL8#define TEST_HLSL9 10RWBuffer<float> Buf;11 12// CHECK: void trunc_Param(inout int &__restrict X) {13 14// AST: FunctionDecl {{.*}} used trunc_Param 'void (inout int)'15// AST-NEXT: ParmVarDecl {{.*}} X 'int &__restrict'16// AST-NEXT: HLSLParamModifierAttr {{.*}} inout17 18void trunc_Param(inout int X) {}19 20// CHECK: void zero(out int &__restrict Z) {21// CHECK-NEXT: Z = 0;22 23// AST: FunctionDecl {{.*}} zero 'void (out int)'24// AST-NEXT: ParmVarDecl {{.*}} used Z 'int &__restrict'25// AST-NEXT: HLSLParamModifierAttr {{.*}} out26void zero(out int Z) { Z = 0; }27 28// AST-LABEL: FunctionDecl {{.*}} imported used fn 'void (uint)'29// AST: CallExpr {{.*}} 'void'30// AST-NEXT: ImplicitCastExpr {{.*}} 'void (*)(inout int)' <FunctionToPointerDecay>31// AST-NEXT: DeclRefExpr {{.*}} 'void (inout int)' lvalue Function32// AST-NEXT: HLSLOutArgExpr {{.*}} 'int' lvalue inout33// AST-NEXT: OpaqueValueExpr [[LVOpV:0x[0-9a-fA-F]+]] {{.*}} 'hlsl_device float' lvalue34// AST-NEXT: CXXOperatorCallExpr {{.*}} 'hlsl_device float' lvalue '[]'35// AST-NEXT: ImplicitCastExpr {{.*}} 'hlsl_device float &(*)(unsigned int)' <FunctionToPointerDecay>36// AST-NEXT: DeclRefExpr {{.*}} 'hlsl_device float &(unsigned int)' lvalue CXXMethod {{.*}} 'operator[]' 'hlsl_device float &(unsigned int)'37// AST-NEXT: DeclRefExpr {{.*}} 'RWBuffer<float>':'hlsl::RWBuffer<float>' lvalue Var {{.*}} 'Buf' 'RWBuffer<float>':'hlsl::RWBuffer<float>'38// AST-NEXT: ImplicitCastExpr {{.*}} 'uint':'unsigned int' <LValueToRValue>39// AST-NEXT: DeclRefExpr {{.*}} 'uint':'unsigned int' lvalue ParmVar {{.*}} 'GI' 'uint':'unsigned int'40 41// AST-NEXT: OpaqueValueExpr [[TmpOpV:0x[0-9a-fA-F]+]] {{.*}} 'int' lvalue42// AST-NEXT: ImplicitCastExpr {{.*}} 'int' <FloatingToIntegral>43// AST-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>44// AST-NEXT: OpaqueValueExpr [[LVOpV]] <col:15, col:21> 'hlsl_device float' lvalue45 46// AST: BinaryOperator {{.*}} 'hlsl_device float' lvalue '='47// AST-NEXT: OpaqueValueExpr [[LVOpV]] {{.*}} 'hlsl_device float' lvalue48// AST: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>49// AST-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>50// AST-NEXT: OpaqueValueExpr [[TmpOpV]] {{.*}} 'int' lvalue51 52// CHECK: void fn(uint GI) {53// CHECK: trunc_Param(Buf[GI]);54void fn(uint GI) {55 trunc_Param(Buf[GI]);56}57 58#else59 60// AST-LABEL: FunctionDecl {{.*}} main 'void (uint)'61// AST: CallExpr {{.*}} 'void'62// AST-NEXT: ImplicitCastExpr {{.*}} 'void (*)(out int)' <FunctionToPointerDecay>63// AST-NEXT: DeclRefExpr {{.*}} 'void (out int)' lvalue Function {{.*}} 'zero' 'void (out int)'64// AST-NEXT: HLSLOutArgExpr {{.*}} 'int' lvalue out65 66// AST: OpaqueValueExpr [[LVOpV:0x[0-9a-fA-F]+]] {{.*}} 'int' lvalue67// AST-NEXT: DeclRefExpr {{.*}} 'int' lvalue Var {{.*}} 'I' 'int'68 69// AST-NEXT: OpaqueValueExpr [[TmpOpV:0x[0-9a-fA-F]+]] {{.*}} 'int' lvalue70// AST-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>71// AST-NEXT: OpaqueValueExpr [[LVOpV]] <col:8> 'int' lvalue72 73// AST: BinaryOperator {{.*}} 'int' lvalue '='74// AST-NEXT: OpaqueValueExpr [[LVOpV]] {{.*}} 'int' lvalue75// AST: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>76// AST-NEXT: OpaqueValueExpr [[TmpOpV]] {{.*}} 'int' lvalue77 78 79[numthreads(8,1,1)]80void main(uint GI : SV_GroupIndex) {81 int I;82 zero(I);83 fn(GI);84}85#endif // TEST_HLSL86