Skip to content

Commit e99029e

Browse files
authored
[HLSL] Remove faceforward SPIRV fast path (#169547)
1 parent 9bd30e2 commit e99029e

File tree

2 files changed

+9
-36
lines changed

2 files changed

+9
-36
lines changed

clang/lib/Headers/hlsl/hlsl_intrinsic_helpers.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,7 @@ template <typename T> constexpr vector<T, 4> lit_impl(T NDotL, T NDotH, T M) {
137137
}
138138

139139
template <typename T> constexpr T faceforward_impl(T N, T I, T Ng) {
140-
#if (__has_builtin(__builtin_spirv_faceforward))
141-
return __builtin_spirv_faceforward(N, I, Ng);
142-
#else
143140
return select(dot(I, Ng) < 0, N, -N);
144-
#endif
145141
}
146142

147143
template <typename T> constexpr T ldexp_impl(T X, T Exp) {
Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,41 @@
11
// RUN: %clang_cc1 -finclude-default-header -triple \
22
// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type -fnative-int16-type \
3-
// RUN: -emit-llvm -o - | FileCheck %s
3+
// RUN: -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,DXCHECK
44
// RUN: %clang_cc1 -finclude-default-header -triple \
55
// RUN: spirv-unknown-vulkan-compute %s -fnative-half-type -fnative-int16-type \
6-
// RUN: -emit-llvm -o - | FileCheck %s --check-prefix=SPVCHECK
6+
// RUN: -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,SPVCHECK
77

88
// CHECK-LABEL: test_faceforward_half
99
// CHECK: %hlsl.dot.i = fmul reassoc nnan ninf nsz arcp afn half %{{.*}}, %{{.*}}
1010
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt half %hlsl.dot.i, 0xH0000
1111
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn half %{{.*}}
1212
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, half %{{.*}}, half %fneg.i
1313
// CHECK: ret half %hlsl.select.i
14-
// SPVCHECK-LABEL: test_faceforward_half
15-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef half @llvm.spv.faceforward.f16(half %{{.*}}, half %{{.*}}, half %{{.*}})
16-
// SPVCHECK: ret half %spv.faceforward.i
1714
half test_faceforward_half(half N, half I, half Ng) { return faceforward(N, I, Ng); }
1815

1916
// CHECK-LABEL: test_faceforward_half2
20-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.dx.fdot.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}})
17+
// DXCHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF:dx]].fdot.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}})
18+
// SPVCHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF:spv]].fdot.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}})
2119
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt half %hlsl.dot.i, 0xH0000
2220
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <2 x half> %{{.*}}
2321
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <2 x half> %{{.*}}, <2 x half> %fneg.i
2422
// CHECK: ret <2 x half> %hlsl.select.i
25-
// SPVCHECK-LABEL: test_faceforward_half2
26-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <2 x half> @llvm.spv.faceforward.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}}, <2 x half> %{{.*}})
27-
// SPVCHECK: ret <2 x half> %spv.faceforward.i
2823
half2 test_faceforward_half2(half2 N, half2 I, half2 Ng) { return faceforward(N, I, Ng); }
2924

3025
// CHECK-LABEL: test_faceforward_half3
31-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.dx.fdot.v3f16(<3 x half> %{{.*}}, <3 x half> %{{.*}})
26+
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF]].fdot.v3f16(<3 x half> %{{.*}}, <3 x half> %{{.*}})
3227
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt half %hlsl.dot.i, 0xH0000
3328
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <3 x half> %{{.*}}
3429
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <3 x half> %{{.*}}, <3 x half> %fneg.i
3530
// CHECK: ret <3 x half> %hlsl.select.i
36-
// SPVCHECK-LABEL: test_faceforward_half3
37-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <3 x half> @llvm.spv.faceforward.v3f16(<3 x half> %{{.*}}, <3 x half> %{{.*}}, <3 x half> %{{.*}})
38-
// SPVCHECK: ret <3 x half> %spv.faceforward.i
3931
half3 test_faceforward_half3(half3 N, half3 I, half3 Ng) { return faceforward(N, I, Ng); }
4032

4133
// CHECK-LABEL: test_faceforward_half4
42-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.dx.fdot.v4f16(<4 x half> %{{.*}}, <4 x half> %{{.*}})
34+
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF]].fdot.v4f16(<4 x half> %{{.*}}, <4 x half> %{{.*}})
4335
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt half %hlsl.dot.i, 0xH0000
4436
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <4 x half> %{{.*}}
4537
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <4 x half> %{{.*}}, <4 x half> %fneg.i
4638
// CHECK: ret <4 x half> %hlsl.select.i
47-
// SPVCHECK-LABEL: test_faceforward_half4
48-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <4 x half> @llvm.spv.faceforward.v4f16(<4 x half> %{{.*}}, <4 x half> %{{.*}}, <4 x half> %{{.*}})
49-
// SPVCHECK: ret <4 x half> %spv.faceforward.i
5039
half4 test_faceforward_half4(half4 N, half4 I, half4 Ng) { return faceforward(N, I, Ng); }
5140

5241
// CHECK-LABEL: test_faceforward_float
@@ -55,40 +44,28 @@ half4 test_faceforward_half4(half4 N, half4 I, half4 Ng) { return faceforward(N,
5544
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn float %{{.*}}
5645
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, float %{{.*}}, float %fneg.i
5746
// CHECK: ret float %hlsl.select.i
58-
// SPVCHECK-LABEL: test_faceforward_float
59-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef float @llvm.spv.faceforward.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})
60-
// SPVCHECK: ret float %spv.faceforward.i
6147
float test_faceforward_float(float N, float I, float Ng) { return faceforward(N, I, Ng); }
6248

6349
// CHECK-LABEL: test_faceforward_float2
64-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.dx.fdot.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}})
50+
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}})
6551
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %hlsl.dot.i, 0.000000e+00
6652
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <2 x float> %{{.*}}
6753
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <2 x float> %{{.*}}, <2 x float> %fneg.i
6854
// CHECK: ret <2 x float> %hlsl.select.i
69-
// SPVCHECK-LABEL: test_faceforward_float2
70-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <2 x float> @llvm.spv.faceforward.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})
71-
// SPVCHECK: ret <2 x float> %spv.faceforward.i
7255
float2 test_faceforward_float2(float2 N, float2 I, float2 Ng) { return faceforward(N, I, Ng); }
7356

7457
// CHECK-LABEL: test_faceforward_float3
75-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.dx.fdot.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}})
58+
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}})
7659
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %hlsl.dot.i, 0.000000e+00
7760
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <3 x float> %{{.*}}
7861
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <3 x float> %{{.*}}, <3 x float> %fneg.i
7962
// CHECK: ret <3 x float> %hlsl.select.i
80-
// SPVCHECK-LABEL: test_faceforward_float3
81-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <3 x float> @llvm.spv.faceforward.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})
82-
// SPVCHECK: ret <3 x float> %spv.faceforward.i
8363
float3 test_faceforward_float3(float3 N, float3 I, float3 Ng) { return faceforward(N, I, Ng); }
8464

8565
// CHECK-LABEL: test_faceforward_float4
86-
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.dx.fdot.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}})
66+
// CHECK: %hlsl.dot.i = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}})
8767
// CHECK: %cmp.i = fcmp reassoc nnan ninf nsz arcp afn olt float %hlsl.dot.i, 0.000000e+00
8868
// CHECK: %fneg.i = fneg reassoc nnan ninf nsz arcp afn <4 x float> %{{.*}}
8969
// CHECK: %hlsl.select.i = select reassoc nnan ninf nsz arcp afn i1 %cmp.i, <4 x float> %{{.*}}, <4 x float> %fneg.i
9070
// CHECK: ret <4 x float> %hlsl.select.i
91-
// SPVCHECK-LABEL: test_faceforward_float4
92-
// SPVCHECK: %spv.faceforward.i = call reassoc nnan ninf nsz arcp afn noundef <4 x float> @llvm.spv.faceforward.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
93-
// SPVCHECK: ret <4 x float> %spv.faceforward.i
9471
float4 test_faceforward_float4(float4 N, float4 I, float4 Ng) { return faceforward(N, I, Ng); }

0 commit comments

Comments
 (0)