Skip to content

Commit a10c012

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 20bcfe8 commit a10c012

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
@@ -600,7 +600,7 @@ SPIRVToLLVM::transValue(const std::vector<SPIRVValue *> &BV, Function *F,
600600

601601
bool SPIRVToLLVM::isSPIRVCmpInstTransToLLVMInst(SPIRVInstruction *BI) const {
602602
auto OC = BI->getOpCode();
603-
return isCmpOpCode(OC) && !(OC >= OpLessOrGreater && OC <= OpUnordered);
603+
return isCmpOpCode(OC) && OC != OpLessOrGreater;
604604
}
605605

606606
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)