Skip to content

Commit 05dd187

Browse files
committed
address pr comments
1 parent 8c087cf commit 05dd187

File tree

3 files changed

+23
-29
lines changed

3 files changed

+23
-29
lines changed

llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -449,15 +449,6 @@ Register SPIRVGlobalRegistry::getOrCreateCompositeOrNull(
449449
return Res;
450450
}
451451

452-
Register SPIRVGlobalRegistry::getOrCreateConstScalarOrVector(
453-
uint64_t Val, MachineInstr &I, SPIRVType *SpvType,
454-
const SPIRVInstrInfo &TII, bool ZeroAsNull) {
455-
if (SpvType->getOpcode() == SPIRV::OpTypeVector)
456-
return getOrCreateConstVector(Val, I, SpvType, TII, ZeroAsNull);
457-
else
458-
return getOrCreateConstInt(Val, I, SpvType, TII, ZeroAsNull);
459-
}
460-
461452
Register SPIRVGlobalRegistry::getOrCreateConstVector(uint64_t Val,
462453
MachineInstr &I,
463454
SPIRVType *SpvType,

llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,10 +492,6 @@ class SPIRVGlobalRegistry {
492492
Register buildConstantFP(APFloat Val, MachineIRBuilder &MIRBuilder,
493493
SPIRVType *SpvType = nullptr);
494494

495-
Register getOrCreateConstScalarOrVector(uint64_t Val, MachineInstr &I,
496-
SPIRVType *SpvType,
497-
const SPIRVInstrInfo &TII,
498-
bool ZeroAsNull = true);
499495
Register getOrCreateConstVector(uint64_t Val, MachineInstr &I,
500496
SPIRVType *SpvType, const SPIRVInstrInfo &TII,
501497
bool ZeroAsNull = true);

llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2840,7 +2840,7 @@ bool SPIRVInstructionSelector::selectFirstBitHigh16(Register ResVReg,
28402840
Register ExtReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
28412841
bool Result =
28422842
selectUnOpWithSrc(ExtReg, ResType, I, I.getOperand(2).getReg(), Opcode);
2843-
return Result & selectFirstBitHigh32(ResVReg, ResType, I, ExtReg, IsSigned);
2843+
return Result && selectFirstBitHigh32(ResVReg, ResType, I, ExtReg, IsSigned);
28442844
}
28452845

28462846
bool SPIRVInstructionSelector::selectFirstBitHigh32(Register ResVReg,
@@ -2923,36 +2923,43 @@ bool SPIRVInstructionSelector::selectFirstBitHigh64(Register ResVReg,
29232923

29242924
// 4. check if result of each top 32 bits is == -1
29252925
SPIRVType *BoolType = GR.getOrCreateSPIRVBoolType(I, TII);
2926-
if (!isScalarRes)
2926+
Register NegOneReg;
2927+
Register Reg0;
2928+
Register Reg32;
2929+
unsigned selectOp;
2930+
unsigned addOp;
2931+
if (isScalarRes) {
2932+
NegOneReg = GR.getOrCreateConstInt(-1, I, ResType, TII, ZeroAsNull);
2933+
Reg0 = GR.getOrCreateConstInt(0, I, ResType, TII, ZeroAsNull);
2934+
Reg32 = GR.getOrCreateConstInt(32, I, ResType, TII, ZeroAsNull);
2935+
selectOp = SPIRV::OpSelectSISCond;
2936+
addOp = SPIRV::OpIAddS;
2937+
} else {
29272938
BoolType = GR.getOrCreateSPIRVVectorType(BoolType, count, MIRBuilder);
2928-
2929-
// check if the high bits are == -1;
2930-
Register NegOneReg =
2931-
GR.getOrCreateConstScalarOrVector(-1, I, ResType, TII, ZeroAsNull);
2932-
// true if -1
2939+
NegOneReg = GR.getOrCreateConstVector(-1, I, ResType, TII, ZeroAsNull);
2940+
Reg0 = GR.getOrCreateConstVector(0, I, ResType, TII, ZeroAsNull);
2941+
Reg32 = GR.getOrCreateConstVector(32, I, ResType, TII, ZeroAsNull);
2942+
selectOp = SPIRV::OpSelectVIVCond;
2943+
addOp = SPIRV::OpIAddV;
2944+
}
2945+
2946+
// check if the high bits are == -1; true if -1
29332947
Register BReg = MRI->createVirtualRegister(GR.getRegClass(BoolType));
29342948
Result &= selectNAryOpWithSrcs(BReg, BoolType, I, {HighReg, NegOneReg},
29352949
SPIRV::OpIEqual);
29362950

29372951
// Select low bits if true in BReg, otherwise high bits
2938-
unsigned selectOp =
2939-
isScalarRes ? SPIRV::OpSelectSISCond : SPIRV::OpSelectVIVCond;
29402952
Register TmpReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
29412953
Result &= selectNAryOpWithSrcs(TmpReg, ResType, I, {BReg, LowReg, HighReg},
29422954
selectOp);
29432955

29442956
// Add 32 for high bits, 0 for low bits
29452957
Register ValReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
2946-
Register Reg0 =
2947-
GR.getOrCreateConstScalarOrVector(0, I, ResType, TII, ZeroAsNull);
2948-
Register Reg32 =
2949-
GR.getOrCreateConstScalarOrVector(32, I, ResType, TII, ZeroAsNull);
29502958
Result &=
29512959
selectNAryOpWithSrcs(ValReg, ResType, I, {BReg, Reg0, Reg32}, selectOp);
29522960

2953-
return Result &=
2954-
selectNAryOpWithSrcs(ResVReg, ResType, I, {ValReg, TmpReg},
2955-
isScalarRes ? SPIRV::OpIAddS : SPIRV::OpIAddV);
2961+
return Result &&
2962+
selectNAryOpWithSrcs(ResVReg, ResType, I, {ValReg, TmpReg}, addOp);
29562963
}
29572964

29582965
bool SPIRVInstructionSelector::selectFirstBitHigh(Register ResVReg,

0 commit comments

Comments
 (0)