@@ -2908,7 +2908,6 @@ bool SPIRVInstructionSelector::selectIntrinsic(Register ResVReg,
29082908 case Intrinsic::spv_firstbitshigh: // There is no CL equivalent of FindSMsb
29092909 return selectFirstBitHigh (ResVReg, ResType, I, /* IsSigned=*/ true );
29102910 case Intrinsic::spv_firstbitlow: // There is no CL equivlent of FindILsb
2911- // (true?)
29122911 return selectFirstBitLow (ResVReg, ResType, I);
29132912 case Intrinsic::spv_group_memory_barrier_with_group_sync: {
29142913 bool Result = true ;
@@ -3382,7 +3381,7 @@ bool SPIRVInstructionSelector::selectFirstBitLow64(Register ResVReg,
33823381 // Per the spec, repeat the vector if only one vec is needed
33833382 .addUse (FBLReg);
33843383
3385- // high bits are store in even indexes. Extract them from FBLReg
3384+ // high bits are stored in even indexes. Extract them from FBLReg
33863385 for (unsigned j = 0 ; j < ComponentCount * 2 ; j += 2 ) {
33873386 MIB.addImm (j);
33883387 }
@@ -3396,14 +3395,14 @@ bool SPIRVInstructionSelector::selectFirstBitLow64(Register ResVReg,
33963395 // Per the spec, repeat the vector if only one vec is needed
33973396 .addUse (FBLReg);
33983397
3399- // low bits are store in odd indexes. Extract them from FBLReg
3398+ // low bits are stored in odd indexes. Extract them from FBLReg
34003399 for (unsigned j = 1 ; j < ComponentCount * 2 ; j += 2 ) {
34013400 MIB.addImm (j);
34023401 }
34033402 Result = Result && MIB.constrainAllUses (TII, TRI, RBI);
34043403 }
34053404
3406- // 4. Check if result of each bottom 32 bits is == -1
3405+ // 4. Check the result. When low bits == -1 use high, otherwise use low
34073406 SPIRVType *BoolType = GR.getOrCreateSPIRVBoolType (I, TII);
34083407 Register NegOneReg;
34093408 Register Reg0;
@@ -3429,7 +3428,7 @@ bool SPIRVInstructionSelector::selectFirstBitLow64(Register ResVReg,
34293428 AddOp = SPIRV::OpIAddV;
34303429 }
34313430
3432- // Check if the low bits are == -1; true if -1
3431+ // Check if the low bits are == -1
34333432 Register BReg = MRI->createVirtualRegister (GR.getRegClass (BoolType));
34343433 Result = Result && selectNAryOpWithSrcs (BReg, BoolType, I,
34353434 {LowReg, NegOneReg}, SPIRV::OpIEqual);
@@ -3439,7 +3438,7 @@ bool SPIRVInstructionSelector::selectFirstBitLow64(Register ResVReg,
34393438 Result = Result && selectNAryOpWithSrcs (TmpReg, ResType, I,
34403439 {BReg, HighReg, LowReg}, SelectOp);
34413440
3442- // Add 32 for high bits, 0 for low bits
3441+ // 5. Add 32 when high bits are used, otherwise 0 for low bits
34433442 Register ValReg = MRI->createVirtualRegister (GR.getRegClass (ResType));
34443443 Result = Result && selectNAryOpWithSrcs (ValReg, ResType, I,
34453444 {BReg, Reg32, Reg0}, SelectOp);
0 commit comments