1; RUN: opt -S -dxil-intrinsic-expansion < %s | FileCheck %s --check-prefix=CHECK 2; RUN: opt -S -dxil-intrinsic-expansion -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library < %s | FileCheck %s --check-prefix=CHECK 3 4; Make sure dxil operation function calls for step are generated for half/float. 5 6declare half @llvm.dx.step.f16(half, half) 7declare <2 x half> @llvm.dx.step.v2f16(<2 x half>, <2 x half>) 8declare <3 x half> @llvm.dx.step.v3f16(<3 x half>, <3 x half>) 9declare <4 x half> @llvm.dx.step.v4f16(<4 x half>, <4 x half>) 10 11declare float @llvm.dx.step.f32(float, float) 12declare <2 x float> @llvm.dx.step.v2f32(<2 x float>, <2 x float>) 13declare <3 x float> @llvm.dx.step.v3f32(<3 x float>, <3 x float>) 14declare <4 x float> @llvm.dx.step.v4f32(<4 x float>, <4 x float>) 15 16define noundef half @test_step_half(half noundef %p0, half noundef %p1) { 17entry: 18 ; CHECK: %0 = fcmp olt half %p1, %p0 19 ; CHECK: %1 = select i1 %0, half 0xH0000, half 0xH3C00 20 %hlsl.step = call half @llvm.dx.step.f16(half %p0, half %p1) 21 ret half %hlsl.step 22} 23 24define noundef <2 x half> @test_step_half2(<2 x half> noundef %p0, <2 x half> noundef %p1) { 25entry: 26 ; CHECK: %0 = fcmp olt <2 x half> %p1, %p0 27 ; CHECK: %1 = select <2 x i1> %0, <2 x half> zeroinitializer, <2 x half> splat (half 0xH3C00) 28 %hlsl.step = call <2 x half> @llvm.dx.step.v2f16(<2 x half> %p0, <2 x half> %p1) 29 ret <2 x half> %hlsl.step 30} 31 32define noundef <3 x half> @test_step_half3(<3 x half> noundef %p0, <3 x half> noundef %p1) { 33entry: 34 ; CHECK: %0 = fcmp olt <3 x half> %p1, %p0 35 ; CHECK: %1 = select <3 x i1> %0, <3 x half> zeroinitializer, <3 x half> splat (half 0xH3C00) 36 %hlsl.step = call <3 x half> @llvm.dx.step.v3f16(<3 x half> %p0, <3 x half> %p1) 37 ret <3 x half> %hlsl.step 38} 39 40define noundef <4 x half> @test_step_half4(<4 x half> noundef %p0, <4 x half> noundef %p1) { 41entry: 42 ; CHECK: %0 = fcmp olt <4 x half> %p1, %p0 43 ; CHECK: %1 = select <4 x i1> %0, <4 x half> zeroinitializer, <4 x half> splat (half 0xH3C00) 44 %hlsl.step = call <4 x half> @llvm.dx.step.v4f16(<4 x half> %p0, <4 x half> %p1) 45 ret <4 x half> %hlsl.step 46} 47 48define noundef float @test_step_float(float noundef %p0, float noundef %p1) { 49entry: 50 ; CHECK: %0 = fcmp olt float %p1, %p0 51 ; CHECK: %1 = select i1 %0, float 0.000000e+00, float 1.000000e+00 52 %hlsl.step = call float @llvm.dx.step.f32(float %p0, float %p1) 53 ret float %hlsl.step 54} 55 56define noundef <2 x float> @test_step_float2(<2 x float> noundef %p0, <2 x float> noundef %p1) { 57entry: 58 ; CHECK: %0 = fcmp olt <2 x float> %p1, %p0 59 ; CHECK: %1 = select <2 x i1> %0, <2 x float> zeroinitializer, <2 x float> splat (float 1.000000e+00) 60 %hlsl.step = call <2 x float> @llvm.dx.step.v2f32(<2 x float> %p0, <2 x float> %p1) 61 ret <2 x float> %hlsl.step 62} 63 64define noundef <3 x float> @test_step_float3(<3 x float> noundef %p0, <3 x float> noundef %p1) { 65entry: 66 ; CHECK: %0 = fcmp olt <3 x float> %p1, %p0 67 ; CHECK: %1 = select <3 x i1> %0, <3 x float> zeroinitializer, <3 x float> splat (float 1.000000e+00) 68 %hlsl.step = call <3 x float> @llvm.dx.step.v3f32(<3 x float> %p0, <3 x float> %p1) 69 ret <3 x float> %hlsl.step 70} 71 72define noundef <4 x float> @test_step_float4(<4 x float> noundef %p0, <4 x float> noundef %p1) { 73entry: 74 ; CHECK: %0 = fcmp olt <4 x float> %p1, %p0 75 ; CHECK: %1 = select <4 x i1> %0, <4 x float> zeroinitializer, <4 x float> splat (float 1.000000e+00) 76 %hlsl.step = call <4 x float> @llvm.dx.step.v4f32(<4 x float> %p0, <4 x float> %p1) 77 ret <4 x float> %hlsl.step 78} 79