194 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 -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 -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.all = call i1 @llvm.[[TARGET]].all.i1623// NATIVE_HALF: ret i1 %hlsl.all24bool test_all_int16_t(int16_t p0) { return all(p0); }25// NATIVE_HALF: define [[FNATTRS]] i1 @26// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i1627// NATIVE_HALF: ret i1 %hlsl.all28bool test_all_int16_t2(int16_t2 p0) { return all(p0); }29// NATIVE_HALF: define [[FNATTRS]] i1 @30// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i1631// NATIVE_HALF: ret i1 %hlsl.all32bool test_all_int16_t3(int16_t3 p0) { return all(p0); }33// NATIVE_HALF: define [[FNATTRS]] i1 @34// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i1635// NATIVE_HALF: ret i1 %hlsl.all36bool test_all_int16_t4(int16_t4 p0) { return all(p0); }37// NATIVE_HALF: define [[FNATTRS]] i1 @38// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.i1639// NATIVE_HALF: ret i1 %hlsl.all40bool test_all_uint16_t(uint16_t p0) { return all(p0); }41// NATIVE_HALF: define [[FNATTRS]] i1 @42// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i1643// NATIVE_HALF: ret i1 %hlsl.all44bool test_all_uint16_t2(uint16_t2 p0) { return all(p0); }45// NATIVE_HALF: define [[FNATTRS]] i1 @46// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i1647// NATIVE_HALF: ret i1 %hlsl.all48bool test_all_uint16_t3(uint16_t3 p0) { return all(p0); }49// NATIVE_HALF: define [[FNATTRS]] i1 @50// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i1651// NATIVE_HALF: ret i1 %hlsl.all52bool test_all_uint16_t4(uint16_t4 p0) { return all(p0); }53#endif // __HLSL_ENABLE_16_BIT54 55// CHECK: define [[FNATTRS]] i1 @56// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.f1657// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.f3258// CHECK: ret i1 %hlsl.all59bool test_all_half(half p0) { return all(p0); }60// CHECK: define [[FNATTRS]] i1 @61// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f1662// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f3263// CHECK: ret i1 %hlsl.all64bool test_all_half2(half2 p0) { return all(p0); }65// CHECK: define [[FNATTRS]] i1 @66// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f1667// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f3268// CHECK: ret i1 %hlsl.all69bool test_all_half3(half3 p0) { return all(p0); }70// CHECK: define [[FNATTRS]] i1 @71// NATIVE_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f1672// NO_HALF: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f3273// CHECK: ret i1 %hlsl.all74bool test_all_half4(half4 p0) { return all(p0); }75 76// CHECK: define [[FNATTRS]] i1 @77// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.f3278// CHECK: ret i1 %hlsl.all79bool test_all_float(float p0) { return all(p0); }80// CHECK: define [[FNATTRS]] i1 @81// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f3282// CHECK: ret i1 %hlsl.all83bool test_all_float2(float2 p0) { return all(p0); }84// CHECK: define [[FNATTRS]] i1 @85// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f3286// CHECK: ret i1 %hlsl.all87bool test_all_float3(float3 p0) { return all(p0); }88// CHECK: define [[FNATTRS]] i1 @89// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f3290// CHECK: ret i1 %hlsl.all91bool test_all_float4(float4 p0) { return all(p0); }92 93// CHECK: define [[FNATTRS]] i1 @94// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.f6495// CHECK: ret i1 %hlsl.all96bool test_all_double(double p0) { return all(p0); }97// CHECK: define [[FNATTRS]] i1 @98// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2f6499// CHECK: ret i1 %hlsl.all100bool test_all_double2(double2 p0) { return all(p0); }101// CHECK: define [[FNATTRS]] i1 @102// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3f64103// CHECK: ret i1 %hlsl.all104bool test_all_double3(double3 p0) { return all(p0); }105// CHECK: define [[FNATTRS]] i1 @106// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4f64107// CHECK: ret i1 %hlsl.all108bool test_all_double4(double4 p0) { return all(p0); }109 110// CHECK: define [[FNATTRS]] i1 @111// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i32112// CHECK: ret i1 %hlsl.all113bool test_all_int(int p0) { return all(p0); }114// CHECK: define [[FNATTRS]] i1 @115// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i32116// CHECK: ret i1 %hlsl.all117bool test_all_int2(int2 p0) { return all(p0); }118// CHECK: define [[FNATTRS]] i1 @119// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i32120// CHECK: ret i1 %hlsl.all121bool test_all_int3(int3 p0) { return all(p0); }122// CHECK: define [[FNATTRS]] i1 @123// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i32124// CHECK: ret i1 %hlsl.all125bool test_all_int4(int4 p0) { return all(p0); }126 127// CHECK: define [[FNATTRS]] i1 @128// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i32129// CHECK: ret i1 %hlsl.all130bool test_all_uint(uint p0) { return all(p0); }131// CHECK: define [[FNATTRS]] i1 @132// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i32133// CHECK: ret i1 %hlsl.all134bool test_all_uint2(uint2 p0) { return all(p0); }135// CHECK: define [[FNATTRS]] i1 @136// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i32137// CHECK: ret i1 %hlsl.all138bool test_all_uint3(uint3 p0) { return all(p0); }139// CHECK: define [[FNATTRS]] i1 @140// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i32141// CHECK: ret i1 %hlsl.all142bool test_all_uint4(uint4 p0) { return all(p0); }143 144// CHECK: define [[FNATTRS]] i1 @145// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i64146// CHECK: ret i1 %hlsl.all147bool test_all_int64_t(int64_t p0) { return all(p0); }148// CHECK: define [[FNATTRS]] i1 @149// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i64150// CHECK: ret i1 %hlsl.all151bool test_all_int64_t2(int64_t2 p0) { return all(p0); }152// CHECK: define [[FNATTRS]] i1 @153// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i64154// CHECK: ret i1 %hlsl.all155bool test_all_int64_t3(int64_t3 p0) { return all(p0); }156// CHECK: define [[FNATTRS]] i1 @157// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i64158// CHECK: ret i1 %hlsl.all159bool test_all_int64_t4(int64_t4 p0) { return all(p0); }160 161// CHECK: define [[FNATTRS]] i1 @162// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i64163// CHECK: ret i1 %hlsl.all164bool test_all_uint64_t(uint64_t p0) { return all(p0); }165// CHECK: define [[FNATTRS]] i1 @166// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i64167// CHECK: ret i1 %hlsl.all168bool test_all_uint64_t2(uint64_t2 p0) { return all(p0); }169// CHECK: define [[FNATTRS]] i1 @170// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i64171// CHECK: ret i1 %hlsl.all172bool test_all_uint64_t3(uint64_t3 p0) { return all(p0); }173// CHECK: define [[FNATTRS]] i1 @174// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i64175// CHECK: ret i1 %hlsl.all176bool test_all_uint64_t4(uint64_t4 p0) { return all(p0); }177 178// CHECK: define [[FNATTRS]] i1 @179// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.i1180// CHECK: ret i1 %hlsl.all181bool test_all_bool(bool p0) { return all(p0); }182// CHECK: define [[FNATTRS]] i1 @183// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v2i1184// CHECK: ret i1 %hlsl.all185bool test_all_bool2(bool2 p0) { return all(p0); }186// CHECK: define [[FNATTRS]] i1 @187// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v3i1188// CHECK: ret i1 %hlsl.all189bool test_all_bool3(bool3 p0) { return all(p0); }190// CHECK: define [[FNATTRS]] i1 @191// CHECK: %hlsl.all = call i1 @llvm.[[TARGET]].all.v4i1192// CHECK: ret i1 %hlsl.all193bool test_all_bool4(bool4 p0) { return all(p0); }194