Skip to content

Commit eb75995

Browse files
committed
address pr comments
1 parent d8b9af7 commit eb75995

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
@@ -2722,7 +2722,7 @@ bool SPIRVInstructionSelector::selectFirstBitHigh16(Register ResVReg,
27222722
Register ExtReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
27232723
bool Result =
27242724
selectUnOpWithSrc(ExtReg, ResType, I, I.getOperand(2).getReg(), Opcode);
2725-
return Result & selectFirstBitHigh32(ResVReg, ResType, I, ExtReg, IsSigned);
2725+
return Result && selectFirstBitHigh32(ResVReg, ResType, I, ExtReg, IsSigned);
27262726
}
27272727

27282728
bool SPIRVInstructionSelector::selectFirstBitHigh32(Register ResVReg,
@@ -2805,36 +2805,43 @@ bool SPIRVInstructionSelector::selectFirstBitHigh64(Register ResVReg,
28052805

28062806
// 4. check if result of each top 32 bits is == -1
28072807
SPIRVType *BoolType = GR.getOrCreateSPIRVBoolType(I, TII);
2808-
if (!isScalarRes)
2808+
Register NegOneReg;
2809+
Register Reg0;
2810+
Register Reg32;
2811+
unsigned selectOp;
2812+
unsigned addOp;
2813+
if (isScalarRes) {
2814+
NegOneReg = GR.getOrCreateConstInt(-1, I, ResType, TII, ZeroAsNull);
2815+
Reg0 = GR.getOrCreateConstInt(0, I, ResType, TII, ZeroAsNull);
2816+
Reg32 = GR.getOrCreateConstInt(32, I, ResType, TII, ZeroAsNull);
2817+
selectOp = SPIRV::OpSelectSISCond;
2818+
addOp = SPIRV::OpIAddS;
2819+
} else {
28092820
BoolType = GR.getOrCreateSPIRVVectorType(BoolType, count, MIRBuilder);
2810-
2811-
// check if the high bits are == -1;
2812-
Register NegOneReg =
2813-
GR.getOrCreateConstScalarOrVector(-1, I, ResType, TII, ZeroAsNull);
2814-
// true if -1
2821+
NegOneReg = GR.getOrCreateConstVector(-1, I, ResType, TII, ZeroAsNull);
2822+
Reg0 = GR.getOrCreateConstVector(0, I, ResType, TII, ZeroAsNull);
2823+
Reg32 = GR.getOrCreateConstVector(32, I, ResType, TII, ZeroAsNull);
2824+
selectOp = SPIRV::OpSelectVIVCond;
2825+
addOp = SPIRV::OpIAddV;
2826+
}
2827+
2828+
// check if the high bits are == -1; true if -1
28152829
Register BReg = MRI->createVirtualRegister(GR.getRegClass(BoolType));
28162830
Result &= selectNAryOpWithSrcs(BReg, BoolType, I, {HighReg, NegOneReg},
28172831
SPIRV::OpIEqual);
28182832

28192833
// Select low bits if true in BReg, otherwise high bits
2820-
unsigned selectOp =
2821-
isScalarRes ? SPIRV::OpSelectSISCond : SPIRV::OpSelectVIVCond;
28222834
Register TmpReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
28232835
Result &= selectNAryOpWithSrcs(TmpReg, ResType, I, {BReg, LowReg, HighReg},
28242836
selectOp);
28252837

28262838
// Add 32 for high bits, 0 for low bits
28272839
Register ValReg = MRI->createVirtualRegister(GR.getRegClass(ResType));
2828-
Register Reg0 =
2829-
GR.getOrCreateConstScalarOrVector(0, I, ResType, TII, ZeroAsNull);
2830-
Register Reg32 =
2831-
GR.getOrCreateConstScalarOrVector(32, I, ResType, TII, ZeroAsNull);
28322840
Result &=
28332841
selectNAryOpWithSrcs(ValReg, ResType, I, {BReg, Reg0, Reg32}, selectOp);
28342842

2835-
return Result &=
2836-
selectNAryOpWithSrcs(ResVReg, ResType, I, {ValReg, TmpReg},
2837-
isScalarRes ? SPIRV::OpIAddS : SPIRV::OpIAddV);
2843+
return Result &&
2844+
selectNAryOpWithSrcs(ResVReg, ResType, I, {ValReg, TmpReg}, addOp);
28382845
}
28392846

28402847
bool SPIRVInstructionSelector::selectFirstBitHigh(Register ResVReg,

0 commit comments

Comments
 (0)