https://github.com/pow2clk created https://github.com/llvm/llvm-project/pull/176609
The LABEL CHECKS intended to correspond to the CHECK-SPIRV directives were misformed such that they had no effect. Given the similarity of the output for SPIRV and DXIL, I've replaced them with common checks using variables to match the parts that differ. >From fc6a1cfd5b4d52c3870c8590c04642bd47a70280 Mon Sep 17 00:00:00 2001 From: Gregory Roth <[email protected]> Date: Sat, 17 Jan 2026 14:23:05 -0800 Subject: [PATCH] [HLSL] Correct SPIRV CHECKs in derivative tests The LABEL CHECKS intended to correspond to the CHECK-SPIRV directives were misformed such that they had no effect. Given the similarity of the output for SPIRV and DXIL, I've replaced them with common checks using variables to match the parts that differ. --- .../builtins/ddx-coarse-builtin.hlsl | 14 ++--- .../test/CodeGenHLSL/builtins/ddx-coarse.hlsl | 44 ++++---------- .../builtins/ddx-fine-builtin.hlsl | 14 ++--- clang/test/CodeGenHLSL/builtins/ddx-fine.hlsl | 44 ++++---------- clang/test/CodeGenHLSL/builtins/ddx.hlsl | 60 ++++++------------- .../builtins/ddy-coarse-builtin.hlsl | 14 ++--- .../test/CodeGenHLSL/builtins/ddy-coarse.hlsl | 44 ++++---------- .../builtins/ddy-fine-builtin.hlsl | 14 ++--- clang/test/CodeGenHLSL/builtins/ddy-fine.hlsl | 44 ++++---------- clang/test/CodeGenHLSL/builtins/ddy.hlsl | 60 ++++++------------- 10 files changed, 92 insertions(+), 260 deletions(-) diff --git a/clang/test/CodeGenHLSL/builtins/ddx-coarse-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/ddx-coarse-builtin.hlsl index 01216eefadba2..e79fcf266833e 100644 --- a/clang/test/CodeGenHLSL/builtins/ddx-coarse-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddx-coarse-builtin.hlsl @@ -1,26 +1,20 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z19test_f16_ddx_coarseDh -// CHECK: %hlsl.ddx.coarse = call {{.*}} half @llvm.dx.ddx.coarse.f16(half %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} half @llvm.[[TGT]].ddx.coarse.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: half @_Z19test_f16_ddx_coarseDh -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} half @llvm.spv.ddx.coarse.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddx.coarse half test_f16_ddx_coarse(half val) { return __builtin_hlsl_elementwise_ddx_coarse(val); } // CHECK-LABEL: float @_Z19test_f32_ddx_coarsef -// CHECK: %hlsl.ddx.coarse = call {{.*}} float @llvm.dx.ddx.coarse.f32(float %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} float @llvm.[[TGT]].ddx.coarse.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: float @_Z19test_f32_ddx_coarsef -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} float @llvm.spv.ddx.coarse.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddx.coarse float test_f32_ddx_coarse(float val) { return __builtin_hlsl_elementwise_ddx_coarse(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddx-coarse.hlsl b/clang/test/CodeGenHLSL/builtins/ddx-coarse.hlsl index c200d4715629e..e7cd4c71cb405 100644 --- a/clang/test/CodeGenHLSL/builtins/ddx-coarse.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddx-coarse.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z19test_f16_ddx_coarseDh -// CHECK: %hlsl.ddx.coarse = call {{.*}} half @llvm.dx.ddx.coarse.f16(half %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} half @llvm.[[TGT]].ddx.coarse.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: half @_Z19test_f16_ddx_coarseDh -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} half @llvm.spv.ddx.coarse.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddx.coarse half test_f16_ddx_coarse(half val) { return ddx_coarse(val); } // CHECK-LABEL: <2 x half> @_Z20test_f16_ddx_coarse2Dv2_Dh -// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x half> @llvm.dx.ddx.coarse.v2f16(<2 x half> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x half> @llvm.[[TGT]].ddx.coarse.v2f16(<2 x half> %{{.*}}) // CHECK: ret <2 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <2 x half> @_Z20test_f16_ddx_coarse2Dv2_Dh -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <2 x half> @llvm.spv.ddx.coarse.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %hlsl.ddx.coarse half2 test_f16_ddx_coarse2(half2 val) { return ddx_coarse(val); } // CHECK-LABEL: <3 x half> @_Z20test_f16_ddx_coarse3Dv3_Dh -// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x half> @llvm.dx.ddx.coarse.v3f16(<3 x half> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x half> @llvm.[[TGT]].ddx.coarse.v3f16(<3 x half> %{{.*}}) // CHECK: ret <3 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <3 x half> @_Z20test_f16_ddx_coarse3Dv3_Dh -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <3 x half> @llvm.spv.ddx.coarse.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %hlsl.ddx.coarse half3 test_f16_ddx_coarse3(half3 val) { return ddx_coarse(val); } // CHECK-LABEL: <4 x half> @_Z20test_f16_ddx_coarse4Dv4_Dh -// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x half> @llvm.dx.ddx.coarse.v4f16(<4 x half> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x half> @llvm.[[TGT]].ddx.coarse.v4f16(<4 x half> %{{.*}}) // CHECK: ret <4 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <4 x half> @_Z20test_f16_ddx_coarse4Dv4_Dh -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <4 x half> @llvm.spv.ddx.coarse.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %hlsl.ddx.coarse half4 test_f16_ddx_coarse4(half4 val) { return ddx_coarse(val); } // CHECK-LABEL: float @_Z19test_f32_ddx_coarsef -// CHECK: %hlsl.ddx.coarse = call {{.*}} float @llvm.dx.ddx.coarse.f32(float %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} float @llvm.[[TGT]].ddx.coarse.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: float @_Z19test_f32_ddx_coarsef -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} float @llvm.spv.ddx.coarse.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddx.coarse float test_f32_ddx_coarse(float val) { return ddx_coarse(val); } // CHECK-LABEL: <2 x float> @_Z20test_f32_ddx_coarse2Dv2_f -// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x float> @llvm.dx.ddx.coarse.v2f32(<2 x float> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x float> @llvm.[[TGT]].ddx.coarse.v2f32(<2 x float> %{{.*}}) // CHECK: ret <2 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <2 x float> @_Z20test_f32_ddx_coarse2Dv2_f -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <2 x float> @llvm.spv.ddx.coarse.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %hlsl.ddx.coarse float2 test_f32_ddx_coarse2(float2 val) { return ddx_coarse(val); } // CHECK-LABEL: <3 x float> @_Z20test_f32_ddx_coarse3Dv3_f -// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x float> @llvm.dx.ddx.coarse.v3f32(<3 x float> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x float> @llvm.[[TGT]].ddx.coarse.v3f32(<3 x float> %{{.*}}) // CHECK: ret <3 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <3 x float> @_Z20test_f32_ddx_coarse3Dv3_f -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <3 x float> @llvm.spv.ddx.coarse.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %hlsl.ddx.coarse float3 test_f32_ddx_coarse3(float3 val) { return ddx_coarse(val); } // CHECK-LABEL: <4 x float> @_Z20test_f32_ddx_coarse4Dv4_f -// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x float> @llvm.dx.ddx.coarse.v4f32(<4 x float> %{{.*}}) +// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x float> @llvm.[[TGT]].ddx.coarse.v4f32(<4 x float> %{{.*}}) // CHECK: ret <4 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <4 x float> @_Z20test_f32_ddx_coarse4Dv4_f -// CHECK-SPIRV: %hlsl.ddx.coarse = call {{.*}} <4 x float> @llvm.spv.ddx.coarse.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %hlsl.ddx.coarse float4 test_f32_ddx_coarse4(float4 val) { return ddx_coarse(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddx-fine-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/ddx-fine-builtin.hlsl index 69f7ab3c6ce62..ef8d4d0770a26 100644 --- a/clang/test/CodeGenHLSL/builtins/ddx-fine-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddx-fine-builtin.hlsl @@ -1,26 +1,20 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z17test_f16_ddx_fineDh -// CHECK: %hlsl.ddx.fine = call {{.*}} half @llvm.dx.ddx.fine.f16(half %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} half @llvm.[[TGT]].ddx.fine.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: half @_Z17test_f16_ddx_fineDh -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} half @llvm.spv.ddx.fine.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddx.fine half test_f16_ddx_fine(half val) { return __builtin_hlsl_elementwise_ddx_fine(val); } // CHECK-LABEL: float @_Z17test_f32_ddx_finef -// CHECK: %hlsl.ddx.fine = call {{.*}} float @llvm.dx.ddx.fine.f32(float %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} float @llvm.[[TGT]].ddx.fine.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: float @_Z17test_f32_ddx_finef -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} float @llvm.spv.ddx.fine.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddx.fine float test_f32_ddx_fine(float val) { return __builtin_hlsl_elementwise_ddx_fine(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddx-fine.hlsl b/clang/test/CodeGenHLSL/builtins/ddx-fine.hlsl index 2630260abcb43..68e8223a3e8ab 100644 --- a/clang/test/CodeGenHLSL/builtins/ddx-fine.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddx-fine.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z17test_f16_ddx_fineDh -// CHECK: %hlsl.ddx.fine = call {{.*}} half @llvm.dx.ddx.fine.f16(half %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} half @llvm.[[TGT]].ddx.fine.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: half @_Z17test_f16_ddx_fineDh -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} half @llvm.spv.ddx.fine.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddx.fine half test_f16_ddx_fine(half val) { return ddx_fine(val); } // CHECK-LABEL: <2 x half> @_Z18test_f16_ddx_fine2Dv2_Dh -// CHECK: %hlsl.ddx.fine = call {{.*}} <2 x half> @llvm.dx.ddx.fine.v2f16(<2 x half> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <2 x half> @llvm.[[TGT]].ddx.fine.v2f16(<2 x half> %{{.*}}) // CHECK: ret <2 x half> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <2 x half> @_Z18test_f16_ddx_fine2Dv2_Dh -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <2 x half> @llvm.spv.ddx.fine.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %hlsl.ddx.fine half2 test_f16_ddx_fine2(half2 val) { return ddx_fine(val); } // CHECK-LABEL: <3 x half> @_Z18test_f16_ddx_fine3Dv3_Dh -// CHECK: %hlsl.ddx.fine = call {{.*}} <3 x half> @llvm.dx.ddx.fine.v3f16(<3 x half> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <3 x half> @llvm.[[TGT]].ddx.fine.v3f16(<3 x half> %{{.*}}) // CHECK: ret <3 x half> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <3 x half> @_Z18test_f16_ddx_fine3Dv3_Dh -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <3 x half> @llvm.spv.ddx.fine.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %hlsl.ddx.fine half3 test_f16_ddx_fine3(half3 val) { return ddx_fine(val); } // CHECK-LABEL: <4 x half> @_Z18test_f16_ddx_fine4Dv4_Dh -// CHECK: %hlsl.ddx.fine = call {{.*}} <4 x half> @llvm.dx.ddx.fine.v4f16(<4 x half> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <4 x half> @llvm.[[TGT]].ddx.fine.v4f16(<4 x half> %{{.*}}) // CHECK: ret <4 x half> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <4 x half> @_Z18test_f16_ddx_fine4Dv4_Dh -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <4 x half> @llvm.spv.ddx.fine.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %hlsl.ddx.fine half4 test_f16_ddx_fine4(half4 val) { return ddx_fine(val); } // CHECK-LABEL: float @_Z17test_f32_ddx_finef -// CHECK: %hlsl.ddx.fine = call {{.*}} float @llvm.dx.ddx.fine.f32(float %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} float @llvm.[[TGT]].ddx.fine.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: float @_Z17test_f32_ddx_finef -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} float @llvm.spv.ddx.fine.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddx.fine float test_f32_ddx_fine(float val) { return ddx_fine(val); } // CHECK-LABEL: <2 x float> @_Z18test_f32_ddx_fine2Dv2_f -// CHECK: %hlsl.ddx.fine = call {{.*}} <2 x float> @llvm.dx.ddx.fine.v2f32(<2 x float> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <2 x float> @llvm.[[TGT]].ddx.fine.v2f32(<2 x float> %{{.*}}) // CHECK: ret <2 x float> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <2 x float> @_Z18test_f32_ddx_fine2Dv2_f -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <2 x float> @llvm.spv.ddx.fine.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %hlsl.ddx.fine float2 test_f32_ddx_fine2(float2 val) { return ddx_fine(val); } // CHECK-LABEL: <3 x float> @_Z18test_f32_ddx_fine3Dv3_f -// CHECK: %hlsl.ddx.fine = call {{.*}} <3 x float> @llvm.dx.ddx.fine.v3f32(<3 x float> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <3 x float> @llvm.[[TGT]].ddx.fine.v3f32(<3 x float> %{{.*}}) // CHECK: ret <3 x float> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <3 x float> @_Z18test_f32_ddx_fine3Dv3_f -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <3 x float> @llvm.spv.ddx.fine.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %hlsl.ddx.fine float3 test_f32_ddx_fine3(float3 val) { return ddx_fine(val); } // CHECK-LABEL: <4 x float> @_Z18test_f32_ddx_fine4Dv4_f -// CHECK: %hlsl.ddx.fine = call {{.*}} <4 x float> @llvm.dx.ddx.fine.v4f32(<4 x float> %{{.*}}) +// CHECK: %hlsl.ddx.fine = call {{.*}} <4 x float> @llvm.[[TGT]].ddx.fine.v4f32(<4 x float> %{{.*}}) // CHECK: ret <4 x float> %hlsl.ddx.fine -// CHECK-LABEL-SPIRV: <4 x float> @_Z18test_f32_ddx_fine4Dv4_f -// CHECK-SPIRV: %hlsl.ddx.fine = call {{.*}} <4 x float> @llvm.spv.ddx.fine.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %hlsl.ddx.fine float4 test_f32_ddx_fine4(float4 val) { return ddx_fine(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddx.hlsl b/clang/test/CodeGenHLSL/builtins/ddx.hlsl index 1a736e20c47ae..26597317f1368 100644 --- a/clang/test/CodeGenHLSL/builtins/ddx.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddx.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DCALL=dx.ddx.coarse -DVAR=hlsl.ddx.coarse // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-pixel %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DCALL=spv.ddx -DVAR=spv.ddx // CHECK-LABEL: define {{.*}} half @_ZN4hlsl8__detail8ddx_implIDhEET_S2_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} half @llvm.dx.ddx.coarse.f16(half %{{.*}}) -// CHECK: ret half %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: half @_ZN4hlsl8__detail8ddx_implIDhEET_S2_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} half @llvm.spv.ddx.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} half @llvm.[[CALL]].f16(half %{{.*}}) +// CHECK: ret half %[[VAR]] half test_f16_ddx(half val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <2 x half> @_ZN4hlsl8__detail8ddx_implIDv2_DhEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x half> @llvm.dx.ddx.coarse.v2f16(<2 x half> %{{.*}}) -// CHECK: ret <2 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <2 x half> @_ZN4hlsl8__detail8ddx_implIDv2_DhEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <2 x half> @llvm.spv.ddx.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <2 x half> @llvm.[[CALL]].v2f16(<2 x half> %{{.*}}) +// CHECK: ret <2 x half> %[[VAR]] half2 test_f16_ddx2(half2 val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <3 x half> @_ZN4hlsl8__detail8ddx_implIDv3_DhEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x half> @llvm.dx.ddx.coarse.v3f16(<3 x half> %{{.*}}) -// CHECK: ret <3 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <3 x half> @_ZN4hlsl8__detail8ddx_implIDv3_DhEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <3 x half> @llvm.spv.ddx.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <3 x half> @llvm.[[CALL]].v3f16(<3 x half> %{{.*}}) +// CHECK: ret <3 x half> %[[VAR]] half3 test_f16_ddx3(half3 val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <4 x half> @_ZN4hlsl8__detail8ddx_implIDv4_DhEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x half> @llvm.dx.ddx.coarse.v4f16(<4 x half> %{{.*}}) -// CHECK: ret <4 x half> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <4 x half> @_ZN4hlsl8__detail8ddx_implIDv4_DhEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <4 x half> @llvm.spv.ddx.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <4 x half> @llvm.[[CALL]].v4f16(<4 x half> %{{.*}}) +// CHECK: ret <4 x half> %[[VAR]] half4 test_f16_ddx4(half4 val) { return ddx(val); } // CHECK-LABEL: define {{.*}} float @_ZN4hlsl8__detail8ddx_implIfEET_S2_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} float @llvm.dx.ddx.coarse.f32(float %{{.*}}) -// CHECK: ret float %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: float @_ZN4hlsl8__detail8ddx_implIfEET_S2_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} float @llvm.spv.ddx.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} float @llvm.[[CALL]].f32(float %{{.*}}) +// CHECK: ret float %[[VAR]] float test_f32_ddx(float val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <2 x float> @_ZN4hlsl8__detail8ddx_implIDv2_fEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <2 x float> @llvm.dx.ddx.coarse.v2f32(<2 x float> %{{.*}}) -// CHECK: ret <2 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <2 x float> @_ZN4hlsl8__detail8ddx_implIDv2_fEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <2 x float> @llvm.spv.ddx.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <2 x float> @llvm.[[CALL]].v2f32(<2 x float> %{{.*}}) +// CHECK: ret <2 x float> %[[VAR]] float2 test_f32_ddx2(float2 val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <3 x float> @_ZN4hlsl8__detail8ddx_implIDv3_fEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <3 x float> @llvm.dx.ddx.coarse.v3f32(<3 x float> %{{.*}}) -// CHECK: ret <3 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <3 x float> @_ZN4hlsl8__detail8ddx_implIDv3_fEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <3 x float> @llvm.spv.ddx.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <3 x float> @llvm.[[CALL]].v3f32(<3 x float> %{{.*}}) +// CHECK: ret <3 x float> %[[VAR]] float3 test_f32_ddx3(float3 val) { return ddx(val); } // CHECK-LABEL: define {{.*}} <4 x float> @_ZN4hlsl8__detail8ddx_implIDv4_fEET_S3_ -// CHECK: %hlsl.ddx.coarse = call {{.*}} <4 x float> @llvm.dx.ddx.coarse.v4f32(<4 x float> %{{.*}}) -// CHECK: ret <4 x float> %hlsl.ddx.coarse -// CHECK-LABEL-SPIRV: <4 x float> @_ZN4hlsl8__detail8ddx_implIDv4_fEET_S3_ -// CHECK-SPIRV: %spv.ddx = call {{.*}} <4 x float> @llvm.spv.ddx.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %spv.ddx +// CHECK: %[[VAR]] = call {{.*}} <4 x float> @llvm.[[CALL]].v4f32(<4 x float> %{{.*}}) +// CHECK: ret <4 x float> %[[VAR]] float4 test_f32_ddx4(float4 val) { return ddx(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddy-coarse-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/ddy-coarse-builtin.hlsl index 2967deb75031f..3ab84a1343eaf 100644 --- a/clang/test/CodeGenHLSL/builtins/ddy-coarse-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddy-coarse-builtin.hlsl @@ -1,26 +1,20 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z19test_f16_ddy_coarseDh -// CHECK: %hlsl.ddy.coarse = call {{.*}} half @llvm.dx.ddy.coarse.f16(half %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} half @llvm.[[TGT]].ddy.coarse.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: half @_Z19test_f16_ddy_coarseDh -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} half @llvm.spv.ddy.coarse.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddy.coarse half test_f16_ddy_coarse(half val) { return __builtin_hlsl_elementwise_ddy_coarse(val); } // CHECK-LABEL: float @_Z19test_f32_ddy_coarsef -// CHECK: %hlsl.ddy.coarse = call {{.*}} float @llvm.dx.ddy.coarse.f32(float %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} float @llvm.[[TGT]].ddy.coarse.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: float @_Z19test_f32_ddy_coarsef -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} float @llvm.spv.ddy.coarse.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddy.coarse float test_f32_ddy_coarse(float val) { return __builtin_hlsl_elementwise_ddy_coarse(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddy-coarse.hlsl b/clang/test/CodeGenHLSL/builtins/ddy-coarse.hlsl index faa972a1be326..7a0cafa20079a 100644 --- a/clang/test/CodeGenHLSL/builtins/ddy-coarse.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddy-coarse.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z19test_f16_ddy_coarseDh -// CHECK: %hlsl.ddy.coarse = call {{.*}} half @llvm.dx.ddy.coarse.f16(half %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} half @llvm.[[TGT]].ddy.coarse.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: half @_Z19test_f16_ddy_coarseDh -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} half @llvm.spv.ddy.coarse.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddy.coarse half test_f16_ddy_coarse(half val) { return ddy_coarse(val); } // CHECK-LABEL: <2 x half> @_Z20test_f16_ddy_coarse2Dv2_Dh -// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x half> @llvm.dx.ddy.coarse.v2f16(<2 x half> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x half> @llvm.[[TGT]].ddy.coarse.v2f16(<2 x half> %{{.*}}) // CHECK: ret <2 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <2 x half> @_Z20test_f16_ddy_coarse2Dv2_Dh -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <2 x half> @llvm.spv.ddy.coarse.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %hlsl.ddy.coarse half2 test_f16_ddy_coarse2(half2 val) { return ddy_coarse(val); } // CHECK-LABEL: <3 x half> @_Z20test_f16_ddy_coarse3Dv3_Dh -// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x half> @llvm.dx.ddy.coarse.v3f16(<3 x half> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x half> @llvm.[[TGT]].ddy.coarse.v3f16(<3 x half> %{{.*}}) // CHECK: ret <3 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <3 x half> @_Z20test_f16_ddy_coarse3Dv3_Dh -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <3 x half> @llvm.spv.ddy.coarse.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %hlsl.ddy.coarse half3 test_f16_ddy_coarse3(half3 val) { return ddy_coarse(val); } // CHECK-LABEL: <4 x half> @_Z20test_f16_ddy_coarse4Dv4_Dh -// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x half> @llvm.dx.ddy.coarse.v4f16(<4 x half> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x half> @llvm.[[TGT]].ddy.coarse.v4f16(<4 x half> %{{.*}}) // CHECK: ret <4 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <4 x half> @_Z20test_f16_ddy_coarse4Dv4_Dh -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <4 x half> @llvm.spv.ddy.coarse.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %hlsl.ddy.coarse half4 test_f16_ddy_coarse4(half4 val) { return ddy_coarse(val); } // CHECK-LABEL: float @_Z19test_f32_ddy_coarsef -// CHECK: %hlsl.ddy.coarse = call {{.*}} float @llvm.dx.ddy.coarse.f32(float %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} float @llvm.[[TGT]].ddy.coarse.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: float @_Z19test_f32_ddy_coarsef -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} float @llvm.spv.ddy.coarse.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddy.coarse float test_f32_ddy_coarse(float val) { return ddy_coarse(val); } // CHECK-LABEL: <2 x float> @_Z20test_f32_ddy_coarse2Dv2_f -// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x float> @llvm.dx.ddy.coarse.v2f32(<2 x float> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x float> @llvm.[[TGT]].ddy.coarse.v2f32(<2 x float> %{{.*}}) // CHECK: ret <2 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <2 x float> @_Z20test_f32_ddy_coarse2Dv2_f -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <2 x float> @llvm.spv.ddy.coarse.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %hlsl.ddy.coarse float2 test_f32_ddy_coarse2(float2 val) { return ddy_coarse(val); } // CHECK-LABEL: <3 x float> @_Z20test_f32_ddy_coarse3Dv3_f -// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x float> @llvm.dx.ddy.coarse.v3f32(<3 x float> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x float> @llvm.[[TGT]].ddy.coarse.v3f32(<3 x float> %{{.*}}) // CHECK: ret <3 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <3 x float> @_Z20test_f32_ddy_coarse3Dv3_f -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <3 x float> @llvm.spv.ddy.coarse.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %hlsl.ddy.coarse float3 test_f32_ddy_coarse3(float3 val) { return ddy_coarse(val); } // CHECK-LABEL: <4 x float> @_Z20test_f32_ddy_coarse4Dv4_f -// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x float> @llvm.dx.ddy.coarse.v4f32(<4 x float> %{{.*}}) +// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x float> @llvm.[[TGT]].ddy.coarse.v4f32(<4 x float> %{{.*}}) // CHECK: ret <4 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <4 x float> @_Z20test_f32_ddy_coarse4Dv4_f -// CHECK-SPIRV: %hlsl.ddy.coarse = call {{.*}} <4 x float> @llvm.spv.ddy.coarse.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %hlsl.ddy.coarse float4 test_f32_ddy_coarse4(float4 val) { return ddy_coarse(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddy-fine-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/ddy-fine-builtin.hlsl index 00630721ceb66..6629c9e462f12 100644 --- a/clang/test/CodeGenHLSL/builtins/ddy-fine-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddy-fine-builtin.hlsl @@ -1,26 +1,20 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z17test_f16_ddy_fineDh -// CHECK: %hlsl.ddy.fine = call {{.*}} half @llvm.dx.ddy.fine.f16(half %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} half @llvm.[[TGT]].ddy.fine.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: half @_Z17test_f16_ddy_fineDh -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} half @llvm.spv.ddy.fine.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddy.fine half test_f16_ddy_fine(half val) { return __builtin_hlsl_elementwise_ddy_fine(val); } // CHECK-LABEL: float @_Z17test_f32_ddy_finef -// CHECK: %hlsl.ddy.fine = call {{.*}} float @llvm.dx.ddy.fine.f32(float %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} float @llvm.[[TGT]].ddy.fine.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: float @_Z17test_f32_ddy_finef -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} float @llvm.spv.ddy.fine.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddy.fine float test_f32_ddy_fine(float val) { return __builtin_hlsl_elementwise_ddy_fine(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddy-fine.hlsl b/clang/test/CodeGenHLSL/builtins/ddy-fine.hlsl index 7e32ee29e767d..c20a29866f972 100644 --- a/clang/test/CodeGenHLSL/builtins/ddy-fine.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddy-fine.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DTGT=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DTGT=spv // CHECK-LABEL: half @_Z17test_f16_ddy_fineDh -// CHECK: %hlsl.ddy.fine = call {{.*}} half @llvm.dx.ddy.fine.f16(half %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} half @llvm.[[TGT]].ddy.fine.f16(half %{{.*}}) // CHECK: ret half %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: half @_Z17test_f16_ddy_fineDh -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} half @llvm.spv.ddy.fine.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %hlsl.ddy.fine half test_f16_ddy_fine(half val) { return ddy_fine(val); } // CHECK-LABEL: <2 x half> @_Z18test_f16_ddy_fine2Dv2_Dh -// CHECK: %hlsl.ddy.fine = call {{.*}} <2 x half> @llvm.dx.ddy.fine.v2f16(<2 x half> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <2 x half> @llvm.[[TGT]].ddy.fine.v2f16(<2 x half> %{{.*}}) // CHECK: ret <2 x half> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <2 x half> @_Z18test_f16_ddy_fine2Dv2_Dh -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <2 x half> @llvm.spv.ddy.fine.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %hlsl.ddy.fine half2 test_f16_ddy_fine2(half2 val) { return ddy_fine(val); } // CHECK-LABEL: <3 x half> @_Z18test_f16_ddy_fine3Dv3_Dh -// CHECK: %hlsl.ddy.fine = call {{.*}} <3 x half> @llvm.dx.ddy.fine.v3f16(<3 x half> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <3 x half> @llvm.[[TGT]].ddy.fine.v3f16(<3 x half> %{{.*}}) // CHECK: ret <3 x half> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <3 x half> @_Z18test_f16_ddy_fine3Dv3_Dh -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <3 x half> @llvm.spv.ddy.fine.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %hlsl.ddy.fine half3 test_f16_ddy_fine3(half3 val) { return ddy_fine(val); } // CHECK-LABEL: <4 x half> @_Z18test_f16_ddy_fine4Dv4_Dh -// CHECK: %hlsl.ddy.fine = call {{.*}} <4 x half> @llvm.dx.ddy.fine.v4f16(<4 x half> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <4 x half> @llvm.[[TGT]].ddy.fine.v4f16(<4 x half> %{{.*}}) // CHECK: ret <4 x half> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <4 x half> @_Z18test_f16_ddy_fine4Dv4_Dh -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <4 x half> @llvm.spv.ddy.fine.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %hlsl.ddy.fine half4 test_f16_ddy_fine4(half4 val) { return ddy_fine(val); } // CHECK-LABEL: float @_Z17test_f32_ddy_finef -// CHECK: %hlsl.ddy.fine = call {{.*}} float @llvm.dx.ddy.fine.f32(float %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} float @llvm.[[TGT]].ddy.fine.f32(float %{{.*}}) // CHECK: ret float %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: float @_Z17test_f32_ddy_finef -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} float @llvm.spv.ddy.fine.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %hlsl.ddy.fine float test_f32_ddy_fine(float val) { return ddy_fine(val); } // CHECK-LABEL: <2 x float> @_Z18test_f32_ddy_fine2Dv2_f -// CHECK: %hlsl.ddy.fine = call {{.*}} <2 x float> @llvm.dx.ddy.fine.v2f32(<2 x float> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <2 x float> @llvm.[[TGT]].ddy.fine.v2f32(<2 x float> %{{.*}}) // CHECK: ret <2 x float> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <2 x float> @_Z18test_f32_ddy_fine2Dv2_f -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <2 x float> @llvm.spv.ddy.fine.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %hlsl.ddy.fine float2 test_f32_ddy_fine2(float2 val) { return ddy_fine(val); } // CHECK-LABEL: <3 x float> @_Z18test_f32_ddy_fine3Dv3_f -// CHECK: %hlsl.ddy.fine = call {{.*}} <3 x float> @llvm.dx.ddy.fine.v3f32(<3 x float> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <3 x float> @llvm.[[TGT]].ddy.fine.v3f32(<3 x float> %{{.*}}) // CHECK: ret <3 x float> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <3 x float> @_Z18test_f32_ddy_fine3Dv3_f -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <3 x float> @llvm.spv.ddy.fine.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %hlsl.ddy.fine float3 test_f32_ddy_fine3(float3 val) { return ddy_fine(val); } // CHECK-LABEL: <4 x float> @_Z18test_f32_ddy_fine4Dv4_f -// CHECK: %hlsl.ddy.fine = call {{.*}} <4 x float> @llvm.dx.ddy.fine.v4f32(<4 x float> %{{.*}}) +// CHECK: %hlsl.ddy.fine = call {{.*}} <4 x float> @llvm.[[TGT]].ddy.fine.v4f32(<4 x float> %{{.*}}) // CHECK: ret <4 x float> %hlsl.ddy.fine -// CHECK-LABEL-SPIRV: <4 x float> @_Z18test_f32_ddy_fine4Dv4_f -// CHECK-SPIRV: %hlsl.ddy.fine = call {{.*}} <4 x float> @llvm.spv.ddy.fine.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %hlsl.ddy.fine float4 test_f32_ddy_fine4(float4 val) { return ddy_fine(val); } diff --git a/clang/test/CodeGenHLSL/builtins/ddy.hlsl b/clang/test/CodeGenHLSL/builtins/ddy.hlsl index 635838327dc1f..f07e086c4d655 100644 --- a/clang/test/CodeGenHLSL/builtins/ddy.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ddy.hlsl @@ -1,86 +1,62 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK +// RUN: FileCheck %s -DCALL=dx.ddy.coarse -DVAR=hlsl.ddy.coarse // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple spirv-pc-vulkan-pixel %s \ // RUN: -emit-llvm -disable-llvm-passes -fnative-half-type -o - | \ -// RUN: FileCheck %s --check-prefixes=CHECK-SPIRV +// RUN: FileCheck %s -DCALL=spv.ddy -DVAR=spv.ddy // CHECK-LABEL: define {{.*}} half @_ZN4hlsl8__detail8ddy_implIDhEET_S2_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} half @llvm.dx.ddy.coarse.f16(half %{{.*}}) -// CHECK: ret half %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: half @_ZN4hlsl8__detail8ddy_implIDhEET_S2_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} half @llvm.spv.ddy.f16(half %{{.*}}) -// CHECK-SPIRV: ret half %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} half @llvm.[[CALL]].f16(half %{{.*}}) +// CHECK: ret half %[[VAR]] half test_f16_ddy(half val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <2 x half> @_ZN4hlsl8__detail8ddy_implIDv2_DhEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x half> @llvm.dx.ddy.coarse.v2f16(<2 x half> %{{.*}}) -// CHECK: ret <2 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <2 x half> @_ZN4hlsl8__detail8ddy_implIDv2_DhEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <2 x half> @llvm.spv.ddy.v2f16(<2 x half> %{{.*}}) -// CHECK-SPIRV: ret <2 x half> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <2 x half> @llvm.[[CALL]].v2f16(<2 x half> %{{.*}}) +// CHECK: ret <2 x half> %[[VAR]] half2 test_f16_ddy2(half2 val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <3 x half> @_ZN4hlsl8__detail8ddy_implIDv3_DhEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x half> @llvm.dx.ddy.coarse.v3f16(<3 x half> %{{.*}}) -// CHECK: ret <3 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <3 x half> @_ZN4hlsl8__detail8ddy_implIDv3_DhEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <3 x half> @llvm.spv.ddy.v3f16(<3 x half> %{{.*}}) -// CHECK-SPIRV: ret <3 x half> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <3 x half> @llvm.[[CALL]].v3f16(<3 x half> %{{.*}}) +// CHECK: ret <3 x half> %[[VAR]] half3 test_f16_ddy3(half3 val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <4 x half> @_ZN4hlsl8__detail8ddy_implIDv4_DhEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x half> @llvm.dx.ddy.coarse.v4f16(<4 x half> %{{.*}}) -// CHECK: ret <4 x half> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <4 x half> @_ZN4hlsl8__detail8ddy_implIDv4_DhEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <4 x half> @llvm.spv.ddy.v4f16(<4 x half> %{{.*}}) -// CHECK-SPIRV: ret <4 x half> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <4 x half> @llvm.[[CALL]].v4f16(<4 x half> %{{.*}}) +// CHECK: ret <4 x half> %[[VAR]] half4 test_f16_ddy4(half4 val) { return ddy(val); } // CHECK-LABEL: define {{.*}} float @_ZN4hlsl8__detail8ddy_implIfEET_S2_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} float @llvm.dx.ddy.coarse.f32(float %{{.*}}) -// CHECK: ret float %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: float @_ZN4hlsl8__detail8ddy_implIfEET_S2_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} float @llvm.spv.ddy.f32(float %{{.*}}) -// CHECK-SPIRV: ret float %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} float @llvm.[[CALL]].f32(float %{{.*}}) +// CHECK: ret float %[[VAR]] float test_f32_ddy(float val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <2 x float> @_ZN4hlsl8__detail8ddy_implIDv2_fEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <2 x float> @llvm.dx.ddy.coarse.v2f32(<2 x float> %{{.*}}) -// CHECK: ret <2 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <2 x float> @_ZN4hlsl8__detail8ddy_implIDv2_fEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <2 x float> @llvm.spv.ddy.v2f32(<2 x float> %{{.*}}) -// CHECK-SPIRV: ret <2 x float> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <2 x float> @llvm.[[CALL]].v2f32(<2 x float> %{{.*}}) +// CHECK: ret <2 x float> %[[VAR]] float2 test_f32_ddy2(float2 val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <3 x float> @_ZN4hlsl8__detail8ddy_implIDv3_fEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <3 x float> @llvm.dx.ddy.coarse.v3f32(<3 x float> %{{.*}}) -// CHECK: ret <3 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <3 x float> @_ZN4hlsl8__detail8ddy_implIDv3_fEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <3 x float> @llvm.spv.ddy.v3f32(<3 x float> %{{.*}}) -// CHECK-SPIRV: ret <3 x float> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <3 x float> @llvm.[[CALL]].v3f32(<3 x float> %{{.*}}) +// CHECK: ret <3 x float> %[[VAR]] float3 test_f32_ddy3(float3 val) { return ddy(val); } // CHECK-LABEL: define {{.*}} <4 x float> @_ZN4hlsl8__detail8ddy_implIDv4_fEET_S3_ -// CHECK: %hlsl.ddy.coarse = call {{.*}} <4 x float> @llvm.dx.ddy.coarse.v4f32(<4 x float> %{{.*}}) -// CHECK: ret <4 x float> %hlsl.ddy.coarse -// CHECK-LABEL-SPIRV: <4 x float> @_ZN4hlsl8__detail8ddy_implIDv4_fEET_S3_ -// CHECK-SPIRV: %spv.ddy = call {{.*}} <4 x float> @llvm.spv.ddy.v4f32(<4 x float> %{{.*}}) -// CHECK-SPIRV: ret <4 x float> %spv.ddy +// CHECK: %[[VAR]] = call {{.*}} <4 x float> @llvm.[[CALL]].v4f32(<4 x float> %{{.*}}) +// CHECK: ret <4 x float> %[[VAR]] float4 test_f32_ddy4(float4 val) { return ddy(val); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
