Skip to content

Commit

Permalink
Apply the suggestion
Browse files Browse the repository at this point in the history
Signed-off-by: Sidorov, Dmitry <[email protected]>
  • Loading branch information
MrSidims committed Oct 18, 2024
1 parent 0de7ccb commit f562615
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
5 changes: 4 additions & 1 deletion lib/SPIRV/SPIRVWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3084,8 +3084,11 @@ bool LLVMToSPIRVBase::transDecoration(Value *V, SPIRVValue *BV) {
bool ToAddNoNan = RetTest & fcNan;
bool ToAddNoInf = RetTest & fcInf;
if (ToAddNoNan || ToAddNoInf) {
const size_t NumParams = F->getFunctionType()->getNumParams();
const auto *FT = F->getFunctionType();
const size_t NumParams = FT->getNumParams();
for (size_t I = 0; I != NumParams; ++I) {
if (!FT->getParamType(I)->isFloatTy())
continue;
if (!F->hasParamAttribute(I, Attribute::NoFPClass)) {
ToAddNoNan = false;
ToAddNoInf = false;
Expand Down
24 changes: 22 additions & 2 deletions test/transcoding/fast-math-opencl-builtins.ll
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,23 @@

; CHECK-SPIRV: Decorate [[#FPDec1:]] FPFastMathMode 3
; CHECK-SPIRV: Decorate [[#FPDec2:]] FPFastMathMode 2
; CHECK-SPIRV: Decorate [[#FPDec3:]] FPFastMathMode 16
; CHECK-SPIRV: Decorate [[#FPDec3:]] FPFastMathMode 3
; CHECK-SPIRV: Decorate [[#FPDec4:]] FPFastMathMode 16
; CHECK-SPIRV: ExtInst [[#]] [[#FPDec1]] [[#]] fmax [[#]] [[#]]
; CHECK-SPIRV: ExtInst [[#]] [[#FPDec2]] [[#]] fmin [[#]] [[#]]
; CHECK-SPIRV: ExtInst [[#]] [[#FPDec3]] [[#]] fmax [[#]] [[#]]
; CHECK-SPIRV: ExtInst [[#]] [[#FPDec3]] [[#]] ldexp [[#]] [[#]]
; CHECK-SPIRV: ExtInst [[#]] [[#FPDec4]] [[#]] fmax [[#]] [[#]]

; CHECK-SPIRV-NEG-NOT: Decorate [[#]] FPFastMathMode [[#]]

; CHECK-LLVM-OCL: call nnan ninf spir_func float @_Z4fmaxff(float %[[#]], float %[[#]])
; CHECK-LLVM-OCL: call ninf spir_func float @_Z4fminff(float %[[#]], float %[[#]])
; CHECK-LLVM-OCL: call nnan ninf spir_func float @_Z5ldexpfi(float %[[#]], i32 %[[#]])
; CHECK-LLVM-OCL: call fast spir_func float @_Z4fmaxff(float %[[#]], float %[[#]])

; CHECK-LLVM-SPV: call nnan ninf spir_func float @_Z16__spirv_ocl_fmaxff(float %[[#]], float %[[#]])
; CHECK-LLVM-SPV: call ninf spir_func float @_Z16__spirv_ocl_fminff(float %[[#]], float %[[#]])
; CHECK-LLVM-SPV: call nnan ninf spir_func float @_Z17__spirv_ocl_ldexpfi(float %[[#]], i32 %[[#]])
; CHECK-LLVM-SPV: call fast spir_func float @_Z16__spirv_ocl_fmaxff(float %[[#]], float %[[#]])

; ModuleID = 'test.bc'
Expand All @@ -34,6 +38,8 @@ target triple = "spir64-unknown-unknown"
declare dso_local spir_func noundef nofpclass(nan inf) float @_Z16__spirv_ocl_fmaxff(float noundef nofpclass(nan inf), float noundef nofpclass(nan inf)) local_unnamed_addr

declare dso_local spir_func noundef nofpclass(nan inf) float @_Z16__spirv_ocl_fminff(float noundef nofpclass(inf), float noundef nofpclass(nan inf)) local_unnamed_addr

declare dso_local spir_func noundef nofpclass(nan inf) float @_Z17__spirv_ocl_ldexpfi(float noundef nofpclass(nan inf), i32 noundef)

define weak_odr dso_local spir_kernel void @nofpclass_all(ptr addrspace(1) noundef align 4 %_arg_data, ptr addrspace(1) noundef align 4 %_arg_dat1, ptr addrspace(1) noundef align 4 %_arg_dat2) local_unnamed_addr {
entry:
Expand Down Expand Up @@ -63,6 +69,20 @@ entry:
ret void
}

define weak_odr dso_local spir_kernel void @nofpclass_int(ptr addrspace(1) noundef align 4 %_arg_data, ptr addrspace(1) noundef align 4 %_arg_dat1, ptr addrspace(1) noundef align 4 %_arg_dat2) local_unnamed_addr {
entry:
%0 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId, align 32
%arrayidx.i = getelementptr inbounds float, ptr addrspace(1) %_arg_data, i64 %0
%arrayidx3.i = getelementptr inbounds float, ptr addrspace(1) %_arg_dat1, i64 %0
%cmp.i = icmp ult i64 %0, 2147483648
%arrayidx5.i = getelementptr inbounds i32, ptr addrspace(1) %_arg_dat2, i64 %0
%1 = load float, ptr addrspace(1) %arrayidx3.i, align 4
%2 = load i32, ptr addrspace(1) %arrayidx5.i, align 4
%call.i.i = tail call spir_func noundef nofpclass(nan inf) float @_Z17__spirv_ocl_ldexpfi(float noundef nofpclass(inf) %1, i32 noundef %2)
store float %call.i.i, ptr addrspace(1) %arrayidx.i, align 4
ret void
}

define weak_odr dso_local spir_kernel void @nofpclass_fast(ptr addrspace(1) noundef align 4 %_arg_data, ptr addrspace(1) noundef align 4 %_arg_dat1, ptr addrspace(1) noundef align 4 %_arg_dat2) local_unnamed_addr {
entry:
%0 = load i64, ptr addrspace(1) @__spirv_BuiltInGlobalInvocationId, align 32
Expand Down

0 comments on commit f562615

Please sign in to comment.