96 lines · plain
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 62// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -disable-llvm-passes -emit-llvm -finclude-default-header -o - %s | FileCheck %s3 4// CHECK-LABEL: define hidden noundef nofpclass(nan inf) <6 x float> @_Z5case1v(5// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {6// CHECK-NEXT: [[ENTRY:.*:]]7// CHECK-NEXT: ret <6 x float> <float 0.000000e+00, float 2.000000e+00, float 4.000000e+00, float 1.000000e+00, float 3.000000e+00, float 5.000000e+00>8//9float3x2 case1() {10 // vec[0] = 011 // vec[1] = 212 // vec[2] = 413 // vec[3] = 114 // vec[4] = 315 // vec[5] = 516 return float3x2(0, 1, 17 2, 3,18 4, 5);19}20 21 22RWStructuredBuffer<float> In;23 24// CHECK-LABEL: define hidden noundef nofpclass(nan inf) <6 x float> @_Z5case2v(25// CHECK-SAME: ) #[[ATTR0]] {26// CHECK-NEXT: [[ENTRY:.*:]]27// CHECK-NEXT: [[CALL:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 0) #[[ATTR3:[0-9]+]]28// CHECK-NEXT: [[CALL1:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 1) #[[ATTR3]]29// CHECK-NEXT: [[CALL2:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 2) #[[ATTR3]]30// CHECK-NEXT: [[CALL3:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 3) #[[ATTR3]]31// CHECK-NEXT: [[CALL4:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 4) #[[ATTR3]]32// CHECK-NEXT: [[CALL5:%.*]] = call noundef nonnull align 4 dereferenceable(4) ptr @_ZN4hlsl18RWStructuredBufferIfEixEj(ptr noundef nonnull align 4 dereferenceable(8) @_ZL2In, i32 noundef 5) #[[ATTR3]]33// CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[CALL]], align 434// CHECK-NEXT: [[VECINIT:%.*]] = insertelement <6 x float> poison, float [[TMP0]], i32 035// CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[CALL2]], align 436// CHECK-NEXT: [[VECINIT6:%.*]] = insertelement <6 x float> [[VECINIT]], float [[TMP1]], i32 137// CHECK-NEXT: [[TMP2:%.*]] = load float, ptr [[CALL4]], align 438// CHECK-NEXT: [[VECINIT7:%.*]] = insertelement <6 x float> [[VECINIT6]], float [[TMP2]], i32 239// CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[CALL1]], align 440// CHECK-NEXT: [[VECINIT8:%.*]] = insertelement <6 x float> [[VECINIT7]], float [[TMP3]], i32 341// CHECK-NEXT: [[TMP4:%.*]] = load float, ptr [[CALL3]], align 442// CHECK-NEXT: [[VECINIT9:%.*]] = insertelement <6 x float> [[VECINIT8]], float [[TMP4]], i32 443// CHECK-NEXT: [[TMP5:%.*]] = load float, ptr [[CALL5]], align 444// CHECK-NEXT: [[VECINIT10:%.*]] = insertelement <6 x float> [[VECINIT9]], float [[TMP5]], i32 545// CHECK-NEXT: ret <6 x float> [[VECINIT10]]46//47float3x2 case2() {48 // vec[0] = Call49 // vec[1] = Call250 // vec[2] = Call451 // vec[3] = Call152 // vec[4] = Call353 // vec[5] = Call554 return float3x2(In[0], In[1], 55 In[2], In[3],56 In[4], In[5]);57}58 59 60// CHECK-LABEL: define hidden noundef nofpclass(nan inf) <6 x float> @_Z5case3Dv3_fS_(61// CHECK-SAME: <3 x float> noundef nofpclass(nan inf) [[A:%.*]], <3 x float> noundef nofpclass(nan inf) [[B:%.*]]) #[[ATTR0]] {62// CHECK-NEXT: [[ENTRY:.*:]]63// CHECK-NEXT: [[A_ADDR:%.*]] = alloca <3 x float>, align 1664// CHECK-NEXT: [[B_ADDR:%.*]] = alloca <3 x float>, align 1665// CHECK-NEXT: store <3 x float> [[A]], ptr [[A_ADDR]], align 1666// CHECK-NEXT: store <3 x float> [[B]], ptr [[B_ADDR]], align 1667// CHECK-NEXT: [[TMP0:%.*]] = load <3 x float>, ptr [[A_ADDR]], align 1668// CHECK-NEXT: [[VECEXT:%.*]] = extractelement <3 x float> [[TMP0]], i64 069// CHECK-NEXT: [[VECINIT:%.*]] = insertelement <6 x float> poison, float [[VECEXT]], i32 070// CHECK-NEXT: [[TMP1:%.*]] = load <3 x float>, ptr [[A_ADDR]], align 1671// CHECK-NEXT: [[VECEXT1:%.*]] = extractelement <3 x float> [[TMP1]], i64 272// CHECK-NEXT: [[VECINIT2:%.*]] = insertelement <6 x float> [[VECINIT]], float [[VECEXT1]], i32 173// CHECK-NEXT: [[TMP2:%.*]] = load <3 x float>, ptr [[B_ADDR]], align 1674// CHECK-NEXT: [[VECEXT3:%.*]] = extractelement <3 x float> [[TMP2]], i64 175// CHECK-NEXT: [[VECINIT4:%.*]] = insertelement <6 x float> [[VECINIT2]], float [[VECEXT3]], i32 276// CHECK-NEXT: [[TMP3:%.*]] = load <3 x float>, ptr [[A_ADDR]], align 1677// CHECK-NEXT: [[VECEXT5:%.*]] = extractelement <3 x float> [[TMP3]], i64 178// CHECK-NEXT: [[VECINIT6:%.*]] = insertelement <6 x float> [[VECINIT4]], float [[VECEXT5]], i32 379// CHECK-NEXT: [[TMP4:%.*]] = load <3 x float>, ptr [[B_ADDR]], align 1680// CHECK-NEXT: [[VECEXT7:%.*]] = extractelement <3 x float> [[TMP4]], i64 081// CHECK-NEXT: [[VECINIT8:%.*]] = insertelement <6 x float> [[VECINIT6]], float [[VECEXT7]], i32 482// CHECK-NEXT: [[TMP5:%.*]] = load <3 x float>, ptr [[B_ADDR]], align 1683// CHECK-NEXT: [[VECEXT9:%.*]] = extractelement <3 x float> [[TMP5]], i64 284// CHECK-NEXT: [[VECINIT10:%.*]] = insertelement <6 x float> [[VECINIT8]], float [[VECEXT9]], i32 585// CHECK-NEXT: ret <6 x float> [[VECINIT10]]86//87float3x2 case3(float3 a, float3 b) {88 // vec[0] = A[0]89 // vec[1] = A[2]90 // vec[2] = B[1]91 // vec[3] = A[1]92 // vec[4] = B[0]93 // vec[5] = B[2]94 return float3x2(a,b);95}96