154 lines · plain
1// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple \2// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \3// RUN: -o - | FileCheck %s --check-prefixes=CHECK \4// RUN: -DFNATTRS="hidden noundef nofpclass(nan inf)" -DTARGET=dx5// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple \6// RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \7// RUN: -o - | FileCheck %s --check-prefixes=CHECK \8// RUN: -DFNATTRS="hidden spir_func noundef nofpclass(nan inf)" -DTARGET=spv9 10// CHECK: define [[FNATTRS]] float @11// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float12// CHECK: ret float13float test_step_double(double p0, double p1)14{15 return step(p0, p1);16}17// CHECK: define [[FNATTRS]] <2 x float> @18// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(19// CHECK: ret <2 x float> %hlsl.step20float2 test_step_double2(double2 p0, double2 p1)21{22 return step(p0, p1);23}24// CHECK: define [[FNATTRS]] <3 x float> @25// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(26// CHECK: ret <3 x float> %hlsl.step27float3 test_step_double3(double3 p0, double3 p1)28{29 return step(p0, p1);30}31// CHECK: define [[FNATTRS]] <4 x float> @32// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(33// CHECK: ret <4 x float> %hlsl.step34float4 test_step_double4(double4 p0, double4 p1)35{36 return step(p0, p1);37}38 39// CHECK: define [[FNATTRS]] float @40// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float41// CHECK: ret float42float test_step_int(int p0, int p1)43{44 return step(p0, p1);45}46// CHECK: define [[FNATTRS]] <2 x float> @47// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(48// CHECK: ret <2 x float> %hlsl.step49float2 test_step_int2(int2 p0, int2 p1)50{51 return step(p0, p1);52}53// CHECK: define [[FNATTRS]] <3 x float> @54// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(55// CHECK: ret <3 x float> %hlsl.step56float3 test_step_int3(int3 p0, int3 p1)57{58 return step(p0, p1);59}60// CHECK: define [[FNATTRS]] <4 x float> @61// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(62// CHECK: ret <4 x float> %hlsl.step63float4 test_step_int4(int4 p0, int4 p1)64{65 return step(p0, p1);66}67 68// CHECK: define [[FNATTRS]] float @69// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float70// CHECK: ret float71float test_step_uint(uint p0, uint p1)72{73 return step(p0, p1);74}75// CHECK: define [[FNATTRS]] <2 x float> @76// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(77// CHECK: ret <2 x float> %hlsl.step78float2 test_step_uint2(uint2 p0, uint2 p1)79{80 return step(p0, p1);81}82// CHECK: define [[FNATTRS]] <3 x float> @83// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(84// CHECK: ret <3 x float> %hlsl.step85float3 test_step_uint3(uint3 p0, uint3 p1)86{87 return step(p0, p1);88}89// CHECK: define [[FNATTRS]] <4 x float> @90// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(91// CHECK: ret <4 x float> %hlsl.step92float4 test_step_uint4(uint4 p0, uint4 p1)93{94 return step(p0, p1);95}96 97// CHECK: define [[FNATTRS]] float @98// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float99// CHECK: ret float100float test_step_int64_t(int64_t p0, int64_t p1)101{102 return step(p0, p1);103}104// CHECK: define [[FNATTRS]] <2 x float> @105// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(106// CHECK: ret <2 x float> %hlsl.step107float2 test_step_int64_t2(int64_t2 p0, int64_t2 p1)108{109 return step(p0, p1);110}111// CHECK: define [[FNATTRS]] <3 x float> @112// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(113// CHECK: ret <3 x float> %hlsl.step114float3 test_step_int64_t3(int64_t3 p0, int64_t3 p1)115{116 return step(p0, p1);117}118// CHECK: define [[FNATTRS]] <4 x float> @119// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(120// CHECK: ret <4 x float> %hlsl.step121float4 test_step_int64_t4(int64_t4 p0, int64_t4 p1)122{123 return step(p0, p1);124}125 126// CHECK: define [[FNATTRS]] float @127// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float128// CHECK: ret float129float test_step_uint64_t(uint64_t p0, uint64_t p1)130{131 return step(p0, p1);132}133// CHECK: define [[FNATTRS]] <2 x float> @134// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(135// CHECK: ret <2 x float> %hlsl.step136float2 test_step_uint64_t2(uint64_t2 p0, uint64_t2 p1)137{138 return step(p0, p1);139}140// CHECK: define [[FNATTRS]] <3 x float> @141// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(142// CHECK: ret <3 x float> %hlsl.step143float3 test_step_uint64_t3(uint64_t3 p0, uint64_t3 p1)144{145 return step(p0, p1);146}147// CHECK: define [[FNATTRS]] <4 x float> @148// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(149// CHECK: ret <4 x float> %hlsl.step150float4 test_step_uint64_t4(uint64_t4 p0, uint64_t4 p1)151{152 return step(p0, p1);153}154