Skip to content

Commit 3c2c6b8

Browse files
committed
Fix v3bf16 cases + improve testing
1 parent 6409bf5 commit 3c2c6b8

File tree

2 files changed

+13761
-61
lines changed

2 files changed

+13761
-61
lines changed

llvm/lib/CodeGen/GlobalISel/CallLowering.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ static void buildCopyFromRegs(MachineIRBuilder &B, ArrayRef<Register> OrigRegs,
492492
// e.g. we have a <4 x s16> but 2 x s32 in regs.
493493
assert(NumElts > Regs.size());
494494
LLT SrcEltTy = MRI.getType(Regs[0]);
495+
495496
LLT OriginalEltTy = MRI.getType(OrigRegs[0]).getElementType();
496497

497498
// Input registers contain packed elements.
@@ -505,7 +506,12 @@ static void buildCopyFromRegs(MachineIRBuilder &B, ArrayRef<Register> OrigRegs,
505506
for (unsigned K = 0; K < EltPerReg; ++K)
506507
BVRegs.push_back(B.buildAnyExt(PartLLT, Unmerge.getReg(K)).getReg(0));
507508
}
508-
assert(BVRegs.size() == NumElts);
509+
510+
// We may have some more elements in BVRegs, e.g. if we have 2 s32 pieces for a <3 x s16> vector. We should have less than EltPerReg extra items.
511+
if(BVRegs.size() > NumElts) {
512+
assert((BVRegs.size() - NumElts) < EltPerReg);
513+
BVRegs.truncate(NumElts);
514+
}
509515
BuildVec = B.buildBuildVector(BVType, BVRegs).getReg(0);
510516
}
511517
B.buildTrunc(OrigRegs[0], BuildVec);

0 commit comments

Comments
 (0)