Skip to content

Commit 2a1af50

Browse files
authored
[DirectX] scalarize the dx.isinf intrinsic (#140638)
The DXIL IsInf op only takes scalars. Closes #140577
1 parent 0cf6b4f commit 2a1af50

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

llvm/lib/Target/DirectX/DirectXTargetTransformInfo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ bool DirectXTTIImpl::isTargetIntrinsicWithOverloadTypeAtArg(Intrinsic::ID ID,
2929
int OpdIdx) const {
3030
switch (ID) {
3131
case Intrinsic::dx_asdouble:
32+
case Intrinsic::dx_isinf:
3233
return OpdIdx == 0;
3334
default:
3435
return OpdIdx == -1;
@@ -43,6 +44,7 @@ bool DirectXTTIImpl::isTargetIntrinsicTriviallyScalarizable(
4344
case Intrinsic::dx_firstbitshigh:
4445
case Intrinsic::dx_firstbituhigh:
4546
case Intrinsic::dx_frac:
47+
case Intrinsic::dx_isinf:
4648
case Intrinsic::dx_rsqrt:
4749
case Intrinsic::dx_saturate:
4850
case Intrinsic::dx_splitdouble:

llvm/test/CodeGen/DirectX/isinf.ll

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt -S -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s
1+
; RUN: opt -S -scalarizer -dxil-op-lower -mtriple=dxil-pc-shadermodel6.3-library %s | FileCheck %s
22

33
; Make sure dxil operation function calls for isinf are generated for float and half.
44

@@ -16,7 +16,23 @@ entry:
1616
ret i1 %dx.isinf
1717
}
1818

19-
; CHECK: attributes #[[#ATTR]] = {{{.*}} memory(none) {{.*}}}
19+
define noundef <4 x i1> @isinf_half4(<4 x half> noundef %p0) {
20+
entry:
21+
; CHECK: call i1 @dx.op.isSpecialFloat.f16(i32 9, half
22+
; CHECK: call i1 @dx.op.isSpecialFloat.f16(i32 9, half
23+
; CHECK: call i1 @dx.op.isSpecialFloat.f16(i32 9, half
24+
; CHECK: call i1 @dx.op.isSpecialFloat.f16(i32 9, half
25+
%hlsl.isinf = call <4 x i1> @llvm.dx.isinf.v4f16(<4 x half> %p0)
26+
ret <4 x i1> %hlsl.isinf
27+
}
2028

21-
declare i1 @llvm.dx.isinf.f16(half)
22-
declare i1 @llvm.dx.isinf.f32(float)
29+
define noundef <3 x i1> @isinf_float3(<3 x float> noundef %p0) {
30+
entry:
31+
; CHECK: call i1 @dx.op.isSpecialFloat.f32(i32 9, float
32+
; CHECK: call i1 @dx.op.isSpecialFloat.f32(i32 9, float
33+
; CHECK: call i1 @dx.op.isSpecialFloat.f32(i32 9, float
34+
%hlsl.isinf = call <3 x i1> @llvm.dx.isinf.v3f32(<3 x float> %p0)
35+
ret <3 x i1> %hlsl.isinf
36+
}
37+
38+
; CHECK: attributes #[[#ATTR]] = {{{.*}} memory(none) {{.*}}}

0 commit comments

Comments
 (0)