Skip to content

Commit 49e92c0

Browse files
DmitryBushevAlexeySotkin
authored andcommitted
Translate OpOrdered and OpUnordered to fcmp instructions
Instead of translating this instructions to OCL builtin calls, use core llvm fcmp instructions for better code preservation during translation. fixed tests separated fcmp test from OCL builtins
1 parent 098034e commit 49e92c0

File tree

4 files changed

+15
-15
lines changed

4 files changed

+15
-15
lines changed

lib/SPIRV/SPIRVReader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ SPIRVToLLVM::transValue(const std::vector<SPIRVValue *> &BV, Function *F,
583583

584584
bool SPIRVToLLVM::isSPIRVCmpInstTransToLLVMInst(SPIRVInstruction *BI) const {
585585
auto OC = BI->getOpCode();
586-
return isCmpOpCode(OC) && !(OC >= OpLessOrGreater && OC <= OpUnordered);
586+
return isCmpOpCode(OC) && OC != OpLessOrGreater;
587587
}
588588

589589
void SPIRVToLLVM::setName(llvm::Value *V, SPIRVValue *BV) {

test/transcoding/fcmp.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@
229229
; CHECK-LLVM: %r40 = fcmp oge float %a, %b
230230
; CHECK-LLVM: %r41 = fcmp oge float %a, %b
231231
; CHECK-LLVM: %r42 = fcmp oge float %a, %b
232-
; CHECK-LLVM: %r43 = call spir_func i32 @_Z9isorderedff(float %a, float %b)
233-
; CHECK-LLVM: %r44 = call spir_func i32 @_Z9isorderedff(float %a, float %b)
234-
; CHECK-LLVM: %r45 = call spir_func i32 @_Z9isorderedff(float %a, float %b)
232+
; CHECK-LLVM: %r43 = fcmp ord float %a, %b
233+
; CHECK-LLVM: %r44 = fcmp ord float %a, %b
234+
; CHECK-LLVM: %r45 = fcmp ord float %a, %b
235235
; CHECK-LLVM: %r46 = fcmp ueq float %a, %b
236236
; CHECK-LLVM: %r47 = fcmp ueq float %a, %b
237237
; CHECK-LLVM: %r48 = fcmp ueq float %a, %b
@@ -274,9 +274,9 @@
274274
; CHECK-LLVM: %r85 = fcmp uge float %a, %b
275275
; CHECK-LLVM: %r86 = fcmp uge float %a, %b
276276
; CHECK-LLVM: %r87 = fcmp uge float %a, %b
277-
; CHECK-LLVM: %r88 = call spir_func i32 @_Z11isunorderedff(float %a, float %b)
278-
; CHECK-LLVM: %r89 = call spir_func i32 @_Z11isunorderedff(float %a, float %b)
279-
; CHECK-LLVM: %r90 = call spir_func i32 @_Z11isunorderedff(float %a, float %b)
277+
; CHECK-LLVM: %r88 = fcmp uno float %a, %b
278+
; CHECK-LLVM: %r89 = fcmp uno float %a, %b
279+
; CHECK-LLVM: %r90 = fcmp uno float %a, %b
280280

281281
target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
282282
target triple = "spir-unknown-unknown"

test/transcoding/relationals_float.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212
; CHECK-LLVM: call spir_func i32 @_Z8isnormalf(
1313
; CHECK-LLVM: call spir_func i32 @_Z7signbitf(
1414
; CHECK-LLVM: call spir_func i32 @_Z13islessgreaterff(
15-
; CHECK-LLVM: call spir_func i32 @_Z9isorderedff(
16-
; CHECK-LLVM: call spir_func i32 @_Z11isunorderedff(
15+
; CHECK-LLVM: fcmp ord float
16+
; CHECK-LLVM: fcmp uno float
1717

1818
; CHECK-LLVM: call spir_func <2 x i32> @_Z8isfiniteDv2_f(
1919
; CHECK-LLVM: call spir_func <2 x i32> @_Z5isnanDv2_f(
2020
; CHECK-LLVM: call spir_func <2 x i32> @_Z5isinfDv2_f(
2121
; CHECK-LLVM: call spir_func <2 x i32> @_Z8isnormalDv2_f(
2222
; CHECK-LLVM: call spir_func <2 x i32> @_Z13islessgreaterDv2_fS_(
23-
; CHECK-LLVM: call spir_func <2 x i32> @_Z9isorderedDv2_fS_(
24-
; CHECK-LLVM: call spir_func <2 x i32> @_Z11isunorderedDv2_fS_(
23+
; CHECK-LLVM: fcmp ord <2 x float>
24+
; CHECK-LLVM: fcmp uno <2 x float>
2525

2626
; CHECK-SPIRV: 2 TypeBool [[BoolTypeID:[0-9]+]]
2727
; CHECK-SPIRV: 4 TypeVector [[BoolVectorTypeID:[0-9]+]] [[BoolTypeID]] 2

test/transcoding/relationals_half.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212
; CHECK-LLVM: call spir_func i32 @_Z8isnormalDh(
1313
; CHECK-LLVM: call spir_func i32 @_Z7signbitDh(
1414
; CHECK-LLVM: call spir_func i32 @_Z13islessgreaterDhDh(
15-
; CHECK-LLVM: call spir_func i32 @_Z9isorderedDhDh(
16-
; CHECK-LLVM: call spir_func i32 @_Z11isunorderedDhDh(
15+
; CHECK-LLVM: fcmp ord half
16+
; CHECK-LLVM: fcmp uno half
1717

1818
; CHECK-LLVM: call spir_func <2 x i16> @_Z8isfiniteDv2_Dh(
1919
; CHECK-LLVM: call spir_func <2 x i16> @_Z5isnanDv2_Dh(
2020
; CHECK-LLVM: call spir_func <2 x i16> @_Z5isinfDv2_Dh(
2121
; CHECK-LLVM: call spir_func <2 x i16> @_Z8isnormalDv2_Dh(
2222
; CHECK-LLVM: call spir_func <2 x i16> @_Z13islessgreaterDv2_DhS_(
23-
; CHECK-LLVM: call spir_func <2 x i16> @_Z9isorderedDv2_DhS_(
24-
; CHECK-LLVM: call spir_func <2 x i16> @_Z11isunorderedDv2_DhS_(
23+
; CHECK-LLVM: fcmp ord <2 x half>
24+
; CHECK-LLVM: fcmp uno <2 x half>
2525

2626
; CHECK-SPIRV: 2 TypeBool [[BoolTypeID:[0-9]+]]
2727
; CHECK-SPIRV: 4 TypeVector [[BoolVectorTypeID:[0-9]+]] [[BoolTypeID]] 2

0 commit comments

Comments
 (0)