@@ -5580,6 +5580,7 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5580
5580
return false ;
5581
5581
5582
5582
LLT PartialResTy = LLT::scalar (SplitSize);
5583
+ bool NeedsBitcast = false ;
5583
5584
if (Ty.isVector ()) {
5584
5585
LLT EltTy = Ty.getElementType ();
5585
5586
unsigned EltSize = EltTy.getSizeInBits ();
@@ -5588,8 +5589,10 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5588
5589
} else if (EltSize == 16 || EltSize == 32 ) {
5589
5590
unsigned NElem = SplitSize / EltSize;
5590
5591
PartialResTy = Ty.changeElementCount (ElementCount::getFixed (NElem));
5592
+ } else {
5593
+ // Handle all other cases via S32/S64 pieces
5594
+ NeedsBitcast = true ;
5591
5595
}
5592
- // Handle all other cases via S32/S64 pieces;
5593
5596
}
5594
5597
5595
5598
SmallVector<Register, 4 > PartialRes;
@@ -5615,7 +5618,12 @@ bool AMDGPULegalizerInfo::legalizeLaneOp(LegalizerHelper &Helper,
5615
5618
PartialRes.push_back (createLaneOp (Src0, Src1, Src2, PartialResTy));
5616
5619
}
5617
5620
5618
- B.buildMergeLikeInstr (DstReg, PartialRes);
5621
+ if (NeedsBitcast)
5622
+ B.buildBitcast (DstReg, B.buildMergeLikeInstr (
5623
+ LLT::scalar (Ty.getSizeInBits ()), PartialRes));
5624
+ else
5625
+ B.buildMergeLikeInstr (DstReg, PartialRes);
5626
+
5619
5627
MI.eraseFromParent ();
5620
5628
return true ;
5621
5629
}
0 commit comments