@@ -3239,11 +3239,14 @@ bool SPIRVInstructionSelector::selectFirstBitSet64Overflow(
3239
3239
// Loops 0, 2, 4, ... but stops one loop early when ComponentCount is odd
3240
3240
unsigned CurrentComponent = 0 ;
3241
3241
for (; CurrentComponent + 1 < ComponentCount; CurrentComponent += 2 ) {
3242
- Register SubVecReg = MRI->createVirtualRegister (GR.getRegClass (I64x2Type));
3242
+ // This register holds the firstbitX result for each of the i64x2 vectors
3243
+ // extracted from SrcReg
3244
+ Register BitSetResult =
3245
+ MRI->createVirtualRegister (GR.getRegClass (I64x2Type));
3243
3246
3244
3247
auto MIB = BuildMI (*I.getParent (), I, I.getDebugLoc (),
3245
3248
TII.get (SPIRV::OpVectorShuffle))
3246
- .addDef (SubVecReg )
3249
+ .addDef (BitSetResult )
3247
3250
.addUse (GR.getSPIRVTypeID (I64x2Type))
3248
3251
.addUse (SrcReg)
3249
3252
// Per the spec, repeat the vector if only one vec is needed
@@ -3258,7 +3261,7 @@ bool SPIRVInstructionSelector::selectFirstBitSet64Overflow(
3258
3261
Register SubVecBitSetReg =
3259
3262
MRI->createVirtualRegister (GR.getRegClass (Vec2ResType));
3260
3263
3261
- if (!selectFirstBitSet64 (SubVecBitSetReg, Vec2ResType, I, SubVecReg ,
3264
+ if (!selectFirstBitSet64 (SubVecBitSetReg, Vec2ResType, I, BitSetResult ,
3262
3265
BitSetOpcode, SwapPrimarySide))
3263
3266
return false ;
3264
3267
0 commit comments