Files
clang-p2996/llvm/test/CodeGen/DirectX/isinf.ll
S. Bharadwaj Yadavalli 3f39571228 [DirectX][DXIL] Distinguish return type for overload type resolution. (#85646)
Return type of DXIL Ops may be different from valid overload type of the
parameters, if any. Such DXIL Ops are correctly represented in DXIL.td.
However, DXILEmitter assumes the return type to be the same as parameter
overload type, if one exists. This results in generation in incorrect
overload index value in DXILOperation.inc for the DXIL Op and incorrect
DXIL operation function call in DXILOpLowering pass.

This change distinguishes return types correctly from parameter overload
types in DXILEmitter backend to handle such DXIL ops.

Add specification for DXIL Op `isinf` and corresponding tests to verify
the above change.

Fixes issue #85125
2024-03-20 14:48:16 -04:00

26 lines
846 B
LLVM

; RUN: opt -S -dxil-op-lower < %s | FileCheck %s
; Make sure dxil operation function calls for isinf are generated for float and half.
; CHECK: call i1 @dx.op.isSpecialFloat.f32(i32 9, float %{{.*}})
; CHECK: call i1 @dx.op.isSpecialFloat.f16(i32 9, half %{{.*}})
; Function Attrs: noinline nounwind optnone
define noundef i1 @isinf_float(float noundef %a) #0 {
entry:
%a.addr = alloca float, align 4
store float %a, ptr %a.addr, align 4
%0 = load float, ptr %a.addr, align 4
%dx.isinf = call i1 @llvm.dx.isinf.f32(float %0)
ret i1 %dx.isinf
}
; Function Attrs: noinline nounwind optnone
define noundef i1 @isinf_half(half noundef %p0) #0 {
entry:
%p0.addr = alloca half, align 2
store half %p0, ptr %p0.addr, align 2
%0 = load half, ptr %p0.addr, align 2
%dx.isinf = call i1 @llvm.dx.isinf.f16(half %0)
ret i1 %dx.isinf
}