Skip to content

Commit be3ac5c

Browse files
StuartDBradyvmaksimo
authored andcommitted
Clean up translation of islessgreater() and OpLessOrGreater
Translate islessgreater() to OpFOrdNotEqual instead of OpLessOrGreater, which is deprecated as of SPIR-V 1.5 revision 2, and has identical semantics. Translate OpLessOrGreater to 'fcmp one' instead of islessgreater(), which has identical semantics. Original commit: KhronosGroup/SPIRV-LLVM-Translator@08884df
1 parent c4ad868 commit be3ac5c

File tree

5 files changed

+13
-16
lines changed

5 files changed

+13
-16
lines changed

llvm-spirv/lib/SPIRV/OCLUtil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ template <> void SPIRVMap<std::string, Op, SPIRVInstruction>::init() {
293293
_SPIRV_OP(isgreaterequal, FOrdGreaterThanEqual)
294294
_SPIRV_OP(isless, FOrdLessThan)
295295
_SPIRV_OP(islessequal, FOrdLessThanEqual)
296-
_SPIRV_OP(islessgreater, LessOrGreater)
296+
_SPIRV_OP(islessgreater, FOrdNotEqual)
297297
_SPIRV_OP(isordered, Ordered)
298298
_SPIRV_OP(isunordered, Unordered)
299299
_SPIRV_OP(isfinite, IsFinite)

llvm-spirv/lib/SPIRV/SPIRVReader.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -598,11 +598,6 @@ SPIRVToLLVM::transValue(const std::vector<SPIRVValue *> &BV, Function *F,
598598
return V;
599599
}
600600

601-
bool SPIRVToLLVM::isSPIRVCmpInstTransToLLVMInst(SPIRVInstruction *BI) const {
602-
auto OC = BI->getOpCode();
603-
return isCmpOpCode(OC) && OC != OpLessOrGreater;
604-
}
605-
606601
void SPIRVToLLVM::setName(llvm::Value *V, SPIRVValue *BV) {
607602
auto Name = BV->getName();
608603
if (!Name.empty() && (!V->hasName() || Name != V->getName()))
@@ -1114,6 +1109,9 @@ Value *SPIRVToLLVM::transCmpInst(SPIRVValue *BV, BasicBlock *BB, Function *F) {
11141109
Builder.SetInsertPoint(BB);
11151110
}
11161111

1112+
if (OP == OpLessOrGreater)
1113+
OP = OpFOrdNotEqual;
1114+
11171115
if (BT->isTypeVectorOrScalarInt() || BT->isTypeVectorOrScalarBool() ||
11181116
BT->isTypePointer())
11191117
Inst = Builder.CreateICmp(CmpMap::rmap(OP), Op0, Op1);
@@ -2491,7 +2489,7 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
24912489

24922490
default: {
24932491
auto OC = BV->getOpCode();
2494-
if (isSPIRVCmpInstTransToLLVMInst(static_cast<SPIRVInstruction *>(BV)))
2492+
if (isCmpOpCode(OC))
24952493
return mapValue(BV, transCmpInst(BV, BB, F));
24962494

24972495
if (OCLSPIRVBuiltinMap::rfind(OC, nullptr))

llvm-spirv/lib/SPIRV/SPIRVReader.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ class SPIRVToLLVM {
194194
return BuiltInConstFunc.count(Name);
195195
}
196196

197-
bool isSPIRVCmpInstTransToLLVMInst(SPIRVInstruction *BI) const;
198197
bool isDirectlyTranslatedToOCL(Op OpCode) const;
199198
MDString *transOCLKernelArgTypeName(SPIRVFunctionParameter *);
200199
Value *mapFunction(SPIRVFunction *BF, Function *F);

llvm-spirv/test/transcoding/relationals_float.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
; CHECK-LLVM: call spir_func i32 @_Z5isinff(
1212
; CHECK-LLVM: call spir_func i32 @_Z8isnormalf(
1313
; CHECK-LLVM: call spir_func i32 @_Z7signbitf(
14-
; CHECK-LLVM: call spir_func i32 @_Z13islessgreaterff(
14+
; CHECK-LLVM: fcmp one float
1515
; CHECK-LLVM: fcmp ord float
1616
; 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(
22-
; CHECK-LLVM: call spir_func <2 x i32> @_Z13islessgreaterDv2_fS_(
22+
; CHECK-LLVM: fcmp one <2 x float>
2323
; CHECK-LLVM: fcmp ord <2 x float>
2424
; CHECK-LLVM: fcmp uno <2 x float>
2525

@@ -31,15 +31,15 @@
3131
; CHECK-SPIRV: 4 IsInf [[BoolTypeID]]
3232
; CHECK-SPIRV: 4 IsNormal [[BoolTypeID]]
3333
; CHECK-SPIRV: 4 SignBitSet [[BoolTypeID]]
34-
; CHECK-SPIRV: 5 LessOrGreater [[BoolTypeID]]
34+
; CHECK-SPIRV: 5 FOrdNotEqual [[BoolTypeID]]
3535
; CHECK-SPIRV: 5 Ordered [[BoolTypeID]]
3636
; CHECK-SPIRV: 5 Unordered [[BoolTypeID]]
3737

3838
; CHECK-SPIRV: 4 IsFinite [[BoolVectorTypeID]]
3939
; CHECK-SPIRV: 4 IsNan [[BoolVectorTypeID]]
4040
; CHECK-SPIRV: 4 IsInf [[BoolVectorTypeID]]
4141
; CHECK-SPIRV: 4 IsNormal [[BoolVectorTypeID]]
42-
; CHECK-SPIRV: 5 LessOrGreater [[BoolVectorTypeID]]
42+
; CHECK-SPIRV: 5 FOrdNotEqual [[BoolVectorTypeID]]
4343
; CHECK-SPIRV: 5 Ordered [[BoolVectorTypeID]]
4444
; CHECK-SPIRV: 5 Unordered [[BoolVectorTypeID]]
4545

llvm-spirv/test/transcoding/relationals_half.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
; CHECK-LLVM: call spir_func i32 @_Z5isinfDh(
1212
; CHECK-LLVM: call spir_func i32 @_Z8isnormalDh(
1313
; CHECK-LLVM: call spir_func i32 @_Z7signbitDh(
14-
; CHECK-LLVM: call spir_func i32 @_Z13islessgreaterDhDh(
14+
; CHECK-LLVM: fcmp one half
1515
; CHECK-LLVM: fcmp ord half
1616
; 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(
22-
; CHECK-LLVM: call spir_func <2 x i16> @_Z13islessgreaterDv2_DhS_(
22+
; CHECK-LLVM: fcmp one <2 x half>
2323
; CHECK-LLVM: fcmp ord <2 x half>
2424
; CHECK-LLVM: fcmp uno <2 x half>
2525

@@ -31,15 +31,15 @@
3131
; CHECK-SPIRV: 4 IsInf [[BoolTypeID]]
3232
; CHECK-SPIRV: 4 IsNormal [[BoolTypeID]]
3333
; CHECK-SPIRV: 4 SignBitSet [[BoolTypeID]]
34-
; CHECK-SPIRV: 5 LessOrGreater [[BoolTypeID]]
34+
; CHECK-SPIRV: 5 FOrdNotEqual [[BoolTypeID]]
3535
; CHECK-SPIRV: 5 Ordered [[BoolTypeID]]
3636
; CHECK-SPIRV: 5 Unordered [[BoolTypeID]]
3737

3838
; CHECK-SPIRV: 4 IsFinite [[BoolVectorTypeID]]
3939
; CHECK-SPIRV: 4 IsNan [[BoolVectorTypeID]]
4040
; CHECK-SPIRV: 4 IsInf [[BoolVectorTypeID]]
4141
; CHECK-SPIRV: 4 IsNormal [[BoolVectorTypeID]]
42-
; CHECK-SPIRV: 5 LessOrGreater [[BoolVectorTypeID]]
42+
; CHECK-SPIRV: 5 FOrdNotEqual [[BoolVectorTypeID]]
4343
; CHECK-SPIRV: 5 Ordered [[BoolVectorTypeID]]
4444
; CHECK-SPIRV: 5 Unordered [[BoolVectorTypeID]]
4545

0 commit comments

Comments
 (0)