Skip to content

Commit db3cc55

Browse files
committed
[SPIRV] Audit select Result in SPIRVInstructionSelector
- as per the definition of `select` in GlobalISel/InstructionSelector.h the return value is a boolean denoting if the select was successful - doing `Result |=` is incorrect as all inserted instructions should be succesful, hence we change to using `Result &=`
1 parent 3cdac06 commit db3cc55

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,16 +1041,16 @@ bool SPIRVInstructionSelector::selectAtomicRMW(Register ResVReg,
10411041
uint32_t MemSem = static_cast<uint32_t>(getMemSemantics(AO));
10421042
Register MemSemReg = buildI32Constant(MemSem /*| ScSem*/, I);
10431043

1044-
bool Result = false;
1044+
bool Result = true;
10451045
Register ValueReg = I.getOperand(2).getReg();
10461046
if (NegateOpcode != 0) {
10471047
// Translation with negative value operand is requested
10481048
Register TmpReg = MRI->createVirtualRegister(&SPIRV::iIDRegClass);
1049-
Result |= selectUnOpWithSrc(TmpReg, ResType, I, ValueReg, NegateOpcode);
1049+
Result &= selectUnOpWithSrc(TmpReg, ResType, I, ValueReg, NegateOpcode);
10501050
ValueReg = TmpReg;
10511051
}
10521052

1053-
Result |= BuildMI(*I.getParent(), I, I.getDebugLoc(), TII.get(NewOpcode))
1053+
Result &= BuildMI(*I.getParent(), I, I.getDebugLoc(), TII.get(NewOpcode))
10541054
.addDef(ResVReg)
10551055
.addUse(GR.getSPIRVTypeID(ResType))
10561056
.addUse(Ptr)
@@ -1223,21 +1223,21 @@ bool SPIRVInstructionSelector::selectAtomicCmpXchg(Register ResVReg,
12231223
.constrainAllUses(TII, TRI, RBI);
12241224
Register CmpSuccReg = MRI->createVirtualRegister(&SPIRV::iIDRegClass);
12251225
SPIRVType *BoolTy = GR.getOrCreateSPIRVBoolType(I, TII);
1226-
Result |= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpIEqual))
1226+
Result &= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpIEqual))
12271227
.addDef(CmpSuccReg)
12281228
.addUse(GR.getSPIRVTypeID(BoolTy))
12291229
.addUse(ACmpRes)
12301230
.addUse(Cmp)
12311231
.constrainAllUses(TII, TRI, RBI);
12321232
Register TmpReg = MRI->createVirtualRegister(&SPIRV::iIDRegClass);
1233-
Result |= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpCompositeInsert))
1233+
Result &= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpCompositeInsert))
12341234
.addDef(TmpReg)
12351235
.addUse(GR.getSPIRVTypeID(ResType))
12361236
.addUse(ACmpRes)
12371237
.addUse(GR.getOrCreateUndef(I, ResType, TII))
12381238
.addImm(0)
12391239
.constrainAllUses(TII, TRI, RBI);
1240-
Result |= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpCompositeInsert))
1240+
Result &= BuildMI(*I.getParent(), I, DL, TII.get(SPIRV::OpCompositeInsert))
12411241
.addDef(ResVReg)
12421242
.addUse(GR.getSPIRVTypeID(ResType))
12431243
.addUse(CmpSuccReg)
@@ -1743,7 +1743,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17431743
assert(I.getOperand(4).isReg());
17441744
MachineBasicBlock &BB = *I.getParent();
17451745

1746-
bool Result = false;
1746+
bool Result = true;
17471747

17481748
// Acc = C
17491749
Register Acc = I.getOperand(4).getReg();
@@ -1755,7 +1755,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17551755
for (unsigned i = 0; i < 4; i++) {
17561756
// A[i]
17571757
Register AElt = MRI->createVirtualRegister(&SPIRV::IDRegClass);
1758-
Result |= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
1758+
Result &= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
17591759
.addDef(AElt)
17601760
.addUse(GR.getSPIRVTypeID(ResType))
17611761
.addUse(I.getOperand(2).getReg())
@@ -1765,7 +1765,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17651765

17661766
// B[i]
17671767
Register BElt = MRI->createVirtualRegister(&SPIRV::IDRegClass);
1768-
Result |= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
1768+
Result &= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
17691769
.addDef(BElt)
17701770
.addUse(GR.getSPIRVTypeID(ResType))
17711771
.addUse(I.getOperand(3).getReg())
@@ -1775,7 +1775,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17751775

17761776
// A[i] * B[i]
17771777
Register Mul = MRI->createVirtualRegister(&SPIRV::IDRegClass);
1778-
Result |= BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpIMulS))
1778+
Result &= BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpIMulS))
17791779
.addDef(Mul)
17801780
.addUse(GR.getSPIRVTypeID(ResType))
17811781
.addUse(AElt)
@@ -1784,7 +1784,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17841784

17851785
// Discard 24 highest-bits so that stored i32 register is i8 equivalent
17861786
Register MaskMul = MRI->createVirtualRegister(&SPIRV::IDRegClass);
1787-
Result |= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
1787+
Result &= BuildMI(BB, I, I.getDebugLoc(), TII.get(ExtractOp))
17881788
.addDef(MaskMul)
17891789
.addUse(GR.getSPIRVTypeID(ResType))
17901790
.addUse(Mul)
@@ -1795,7 +1795,7 @@ bool SPIRVInstructionSelector::selectDot4AddPackedExpansion(
17951795
// Acc = Acc + A[i] * B[i]
17961796
Register Sum =
17971797
i < 3 ? MRI->createVirtualRegister(&SPIRV::IDRegClass) : ResVReg;
1798-
Result |= BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpIAddS))
1798+
Result &= BuildMI(BB, I, I.getDebugLoc(), TII.get(SPIRV::OpIAddS))
17991799
.addDef(Sum)
18001800
.addUse(GR.getSPIRVTypeID(ResType))
18011801
.addUse(Acc)
@@ -1866,7 +1866,7 @@ bool SPIRVInstructionSelector::selectSign(Register ResVReg,
18661866

18671867
if (NeedsConversion) {
18681868
auto ConvertOpcode = IsFloatTy ? SPIRV::OpConvertFToS : SPIRV::OpSConvert;
1869-
Result |= BuildMI(*I.getParent(), I, DL, TII.get(ConvertOpcode))
1869+
Result &= BuildMI(*I.getParent(), I, DL, TII.get(ConvertOpcode))
18701870
.addDef(ResVReg)
18711871
.addUse(GR.getSPIRVTypeID(ResType))
18721872
.addUse(SignReg)

0 commit comments

Comments
 (0)