@@ -5565,6 +5565,7 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5565
5565
return false ;
5566
5566
5567
5567
LLT PartialResTy = LLT::scalar (SplitSize);
5568
+ bool NeedsBitcast = false ;
5568
5569
if (Ty.isVector ()) {
5569
5570
LLT EltTy = Ty.getElementType ();
5570
5571
unsigned EltSize = EltTy.getSizeInBits ();
@@ -5573,8 +5574,10 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5573
5574
} else if (EltSize == 16 || EltSize == 32 ) {
5574
5575
unsigned NElem = SplitSize / EltSize;
5575
5576
PartialResTy = Ty.changeElementCount (ElementCount::getFixed (NElem));
5577
+ } else {
5578
+ // Handle all other cases via S32/S64 pieces
5579
+ NeedsBitcast = true ;
5576
5580
}
5577
- // Handle all other cases via S32/S64 pieces;
5578
5581
}
5579
5582
5580
5583
SmallVector<Register, 4 > PartialRes;
@@ -5600,7 +5603,12 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5600
5603
PartialRes.push_back (createLaneOp (Src0, Src1, Src2, PartialResTy));
5601
5604
}
5602
5605
5603
- B.buildMergeLikeInstr (DstReg, PartialRes);
5606
+ if (NeedsBitcast)
5607
+ B.buildBitcast (DstReg, B.buildMergeLikeInstr (
5608
+ LLT::scalar (Ty.getSizeInBits ()), PartialRes));
5609
+ else
5610
+ B.buildMergeLikeInstr (DstReg, PartialRes);
5611
+
5604
5612
MI.eraseFromParent ();
5605
5613
return true ;
5606
5614
}
0 commit comments