225 lines · plain
1// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \2// RUN: spirv-unknown-vulkan-compute %s -fnative-half-type -fnative-int16-type \3// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ 4// RUN: --check-prefixes=CHECK,NATIVE_HALF \5// RUN: -DFNATTRS="hidden spir_func noundef" -DTARGET=spv6// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \7// RUN: spirv-unknown-vulkan-compute %s -fnative-int16-type -emit-llvm -disable-llvm-passes \8// RUN: -o - | FileCheck %s --check-prefixes=CHECK \9// RUN: -DFNATTRS="hidden spir_func noundef" -DTARGET=spv10// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \11// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type -fnative-int16-type \12// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ 13// RUN: --check-prefixes=CHECK,NATIVE_HALF \14// RUN: -DFNATTRS="hidden noundef" -DTARGET=dx15// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \16// RUN: dxil-pc-shadermodel6.3-library %s -fnative-int16-type -emit-llvm -disable-llvm-passes \17// RUN: -o - | FileCheck %s --check-prefixes=CHECK \18// RUN: -DFNATTRS="hidden noundef" -DTARGET=dx19 20#ifdef __HLSL_ENABLE_16_BIT21// NATIVE_HALF: define [[FNATTRS]] i1 @22// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.i1623// NATIVE_HALF: ret i1 %hlsl.any24bool test_any_int16_t(int16_t p0) { return any(p0); }25 26// NATIVE_HALF: define [[FNATTRS]] i1 @27// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i1628// NATIVE_HALF: ret i1 %hlsl.any29bool test_any_int16_t2(int16_t2 p0) { return any(p0); }30 31// NATIVE_HALF: define [[FNATTRS]] i1 @32// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i1633// NATIVE_HALF: ret i1 %hlsl.any34bool test_any_int16_t3(int16_t3 p0) { return any(p0); }35 36// NATIVE_HALF: define [[FNATTRS]] i1 @37// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i1638// NATIVE_HALF: ret i1 %hlsl.any39bool test_any_int16_t4(int16_t4 p0) { return any(p0); }40 41// NATIVE_HALF: define [[FNATTRS]] i1 @42// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.i1643// NATIVE_HALF: ret i1 %hlsl.any44bool test_any_uint16_t(uint16_t p0) { return any(p0); }45 46// NATIVE_HALF: define [[FNATTRS]] i1 @47// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i1648// NATIVE_HALF: ret i1 %hlsl.any49bool test_any_uint16_t2(uint16_t2 p0) { return any(p0); }50 51// NATIVE_HALF: define [[FNATTRS]] i1 @52// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i1653// NATIVE_HALF: ret i1 %hlsl.any54bool test_any_uint16_t3(uint16_t3 p0) { return any(p0); }55 56// NATIVE_HALF: define [[FNATTRS]] i1 @57// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i1658// NATIVE_HALF: ret i1 %hlsl.any59bool test_any_uint16_t4(uint16_t4 p0) { return any(p0); }60#endif // __HLSL_ENABLE_16_BIT61 62// CHECK: define [[FNATTRS]] i1 @63// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.f1664// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.f3265// CHECK: ret i1 %hlsl.any66bool test_any_half(half p0) { return any(p0); }67 68// CHECK: define [[FNATTRS]] i1 @69// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f1670// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f3271// CHECK: ret i1 %hlsl.any72bool test_any_half2(half2 p0) { return any(p0); }73 74// CHECK: define [[FNATTRS]] i1 @75// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f1676// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f3277// CHECK: ret i1 %hlsl.any78bool test_any_half3(half3 p0) { return any(p0); }79 80// CHECK: define [[FNATTRS]] i1 @81// NATIVE_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f1682// NO_HALF: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f3283// CHECK: ret i1 %hlsl.any84bool test_any_half4(half4 p0) { return any(p0); }85 86// CHECK: define [[FNATTRS]] i1 @87// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.f3288// CHECK: ret i1 %hlsl.any89bool test_any_float(float p0) { return any(p0); }90 91// CHECK: define [[FNATTRS]] i1 @92// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f3293// CHECK: ret i1 %hlsl.any94bool test_any_float2(float2 p0) { return any(p0); }95 96// CHECK: define [[FNATTRS]] i1 @97// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f3298// CHECK: ret i1 %hlsl.any99bool test_any_float3(float3 p0) { return any(p0); }100 101// CHECK: define [[FNATTRS]] i1 @102// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f32103// CHECK: ret i1 %hlsl.any104bool test_any_float4(float4 p0) { return any(p0); }105 106// CHECK: define [[FNATTRS]] i1 @107// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.f64108// CHECK: ret i1 %hlsl.any109bool test_any_double(double p0) { return any(p0); }110 111// CHECK: define [[FNATTRS]] i1 @112// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2f64113// CHECK: ret i1 %hlsl.any114bool test_any_double2(double2 p0) { return any(p0); }115 116// CHECK: define [[FNATTRS]] i1 @117// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3f64118// CHECK: ret i1 %hlsl.any119bool test_any_double3(double3 p0) { return any(p0); }120 121// CHECK: define [[FNATTRS]] i1 @122// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4f64123// CHECK: ret i1 %hlsl.any124bool test_any_double4(double4 p0) { return any(p0); }125 126// CHECK: define [[FNATTRS]] i1 @127// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i32128// CHECK: ret i1 %hlsl.any129bool test_any_int(int p0) { return any(p0); }130 131// CHECK: define [[FNATTRS]] i1 @132// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i32133// CHECK: ret i1 %hlsl.any134bool test_any_int2(int2 p0) { return any(p0); }135 136// CHECK: define [[FNATTRS]] i1 @137// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i32138// CHECK: ret i1 %hlsl.any139bool test_any_int3(int3 p0) { return any(p0); }140 141// CHECK: define [[FNATTRS]] i1 @142// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i32143// CHECK: ret i1 %hlsl.any144bool test_any_int4(int4 p0) { return any(p0); }145 146// CHECK: define [[FNATTRS]] i1 @147// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i32148// CHECK: ret i1 %hlsl.any149bool test_any_uint(uint p0) { return any(p0); }150 151// CHECK: define [[FNATTRS]] i1 @152// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i32153// CHECK: ret i1 %hlsl.any154bool test_any_uint2(uint2 p0) { return any(p0); }155 156// CHECK: define [[FNATTRS]] i1 @157// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i32158// CHECK: ret i1 %hlsl.any159bool test_any_uint3(uint3 p0) { return any(p0); }160 161// CHECK: define [[FNATTRS]] i1 @162// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i32163// CHECK: ret i1 %hlsl.any164bool test_any_uint4(uint4 p0) { return any(p0); }165 166// CHECK: define [[FNATTRS]] i1 @167// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i64168// CHECK: ret i1 %hlsl.any169bool test_any_int64_t(int64_t p0) { return any(p0); }170 171// CHECK: define [[FNATTRS]] i1 @172// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i64173// CHECK: ret i1 %hlsl.any174bool test_any_int64_t2(int64_t2 p0) { return any(p0); }175 176// CHECK: define [[FNATTRS]] i1 @177// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i64178// CHECK: ret i1 %hlsl.any179bool test_any_int64_t3(int64_t3 p0) { return any(p0); }180 181// CHECK: define [[FNATTRS]] i1 @182// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i64183// CHECK: ret i1 %hlsl.any184bool test_any_int64_t4(int64_t4 p0) { return any(p0); }185 186// CHECK: define [[FNATTRS]] i1 @187// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i64188// CHECK: ret i1 %hlsl.any189bool test_any_uint64_t(uint64_t p0) { return any(p0); }190 191// CHECK: define [[FNATTRS]] i1 @192// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i64193// CHECK: ret i1 %hlsl.any194bool test_any_uint64_t2(uint64_t2 p0) { return any(p0); }195 196// CHECK: define [[FNATTRS]] i1 @197// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i64198// CHECK: ret i1 %hlsl.any199bool test_any_uint64_t3(uint64_t3 p0) { return any(p0); }200 201// CHECK: define [[FNATTRS]] i1 @202// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i64203// CHECK: ret i1 %hlsl.any204bool test_any_uint64_t4(uint64_t4 p0) { return any(p0); }205 206// CHECK: define [[FNATTRS]] i1 @207// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.i1208// CHECK: ret i1 %hlsl.any209bool test_any_bool(bool p0) { return any(p0); }210 211// CHECK: define [[FNATTRS]] i1 @212// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v2i1213// CHECK: ret i1 %hlsl.any214bool test_any_bool2(bool2 p0) { return any(p0); }215 216// CHECK: define [[FNATTRS]] i1 @217// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v3i1218// CHECK: ret i1 %hlsl.any219bool test_any_bool3(bool3 p0) { return any(p0); }220 221// CHECK: define [[FNATTRS]] i1 @222// CHECK: %hlsl.any = call i1 @llvm.[[TARGET]].any.v4i1223// CHECK: ret i1 %hlsl.any224bool test_any_bool4(bool4 p0) { return any(p0); }225