brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · ab54755 Raw
115 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -ast-dump -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -std=hlsl202x -ast-dump -o - %s | FileCheck %s3 4typedef float float2 __attribute__((ext_vector_type(2)));5typedef float float3 __attribute__((ext_vector_type(3)));6 7[numthreads(1,1,1)]8void entry() {9  float2 Vec2 = float2(1.0, 2.0);10  float3 Vec3 = float3(Vec2, 3.0);11  float3 Vec3b = float3(1.0, 2.0, 3.0);12 13// For the float2 vector, we just expect a conversion from constructor14// parameters to an initialization list15// CHECK-LABEL: VarDecl {{.*}} used Vec2 'float2':'vector<float, 2>' cinit16// CHECK-NEXT: CXXFunctionalCastExpr {{.*}} 'float2':'vector<float, 2>' functional cast to float2 <NoOp>17// CHECK-NEXT: InitListExpr {{0x[0-9a-fA-F]+}} <col:{{[0-9]+}}, col:{{[0-9]+}}> 'float2':'vector<float, 2>'18// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.000000e+0019// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 2.000000e+0020 21 22// For the float 3 things get fun...23// Here we expect accesses to the vec2 to provide the first and second24// components using ArraySubscriptExpr25// CHECK-LABEL: VarDecl {{.*}} Vec3 'float3':'vector<float, 3>' cinit26// CHECK-NEXT: CXXFunctionalCastExpr {{.*}} 'float3':'vector<float, 3>' functional cast to float3 <NoOp>27// CHECK-NEXT: InitListExpr {{.*}} 'float3':'vector<float, 3>'28// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>29// CHECK-NEXT: ArraySubscriptExpr {{.*}} 'float' lvalue30// CHECK-NEXT: DeclRefExpr {{.*}} 'float2':'vector<float, 2>' lvalue Var {{.*}} 'Vec2' 'float2':'vector<float, 2>'31// CHECK-NEXT: IntegerLiteral {{.*}} '__size_t':'unsigned long' 032// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>33// CHECK-NEXT: ArraySubscriptExpr {{.*}} 'float' lvalue34// CHECK-NEXT: DeclRefExpr {{.*}} 'float2':'vector<float, 2>' lvalue Var {{.*}} 'Vec2' 'float2':'vector<float, 2>'35// CHECK-NEXT: IntegerLiteral {{.*}} '__size_t':'unsigned long' 136// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 3.000000e+0037 38// CHECK: VarDecl {{.*}} 'float3':'vector<float, 3>' cinit39// CHECK-NEXT: CXXFunctionalCastExpr {{.*}} 'float3':'vector<float, 3>' functional cast to float3 <NoOp>40// CHECK-NEXT: InitListExpr {{.*}} 'float3':'vector<float, 3>'41 42// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.000000e+0043// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 2.000000e+0044// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 3.000000e+0045 46// The tests above verify pretty explictily that the Initialization lists are47// being constructed as expected. The next tests are bit sparser for brevity.48 49  float f = 1.0f, g = 2.0f;50  float2 foo0 = float2(f, g); // Non-literal51 52// CHECK-LABEL: VarDecl {{.*}} foo0 'float2'53// CHECK-NEXT: CXXFunctionalCastExpr54// CHECK-NEXT: InitListExpr55// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>56// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue Var  {{.*}} 'f' 'float'57// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>58// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue Var  {{.*}} 'g' 'float'59 60  int i = 1, j = 2;61  float2 foo1 = float2(1, 2); // Integer literals62 63// CHECK-LABEL: VarDecl {{.*}} foo1 'float2'64// CHECK-NEXT: CXXFunctionalCastExpr65// CHECK-NEXT: InitListExpr66// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>67// CHECK-NEXT: IntegerLiteral {{.*}} 'int' 168// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>69// CHECK-NEXT: IntegerLiteral {{.*}} 'int' 270 71  float2 foo2 = float2(i, j); // Integer non-literal72 73// CHECK-LABEL: VarDecl {{.*}} foo2 'float2'74// CHECK-NEXT: CXXFunctionalCastExpr75// CHECK-NEXT: InitListExpr76// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>77// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>78// CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue Var {{.*}} 'i' 'int'79// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>80// CHECK-NEXT: ImplicitCastExpr {{.*}} 'int' <LValueToRValue>81// CHECK-NEXT: DeclRefExpr {{.*}} 'int' lvalue Var {{.*}} 'j' 'int'82 83  struct S { float f; } s;84  float2 foo4 = float2(s.f, s.f);85 86// CHECK-LABEL: VarDecl {{.*}} foo4 'float2'87// CHECK-NEXT: CXXFunctionalCastExpr88// CHECK-NEXT: InitListExpr89// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>90// CHECK-NEXT: MemberExpr {{.*}} 'float' lvalue .f {{.*}}91// CHECK-NEXT: DeclRefExpr {{.*}} 'struct S' lvalue Var {{.*}} 's' 'struct S'92// CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <LValueToRValue>93// CHECK-NEXT: MemberExpr {{.*}} 'float' lvalue .f {{.*}}94// CHECK-NEXT: DeclRefExpr {{.*}} 'struct S' lvalue Var {{.*}} 's' 'struct S'95 96  typedef float2 second_level_of_typedefs;97  second_level_of_typedefs foo6 = float2(1.0f, 2.0f);98 99 100// CHECK-LABEL: VarDecl {{.*}} foo6 'second_level_of_typedefs'101// CHECK-NEXT: CXXFunctionalCastExpr102// CHECK-NEXT: InitListExpr103// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.000000e+00104// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 2.000000e+00105 106  float2 foo7 = second_level_of_typedefs(1.0f, 2.0f);107 108// CHECK-LABEL: VarDecl {{.*}} foo7 'float2'109// CHECK-NEXT: CXXFunctionalCastExpr110// CHECK-NEXT: InitListExpr111// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.000000e+00112// CHECK-NEXT: FloatingLiteral {{.*}} 'float' 2.000000e+00113 114}115