These code patterns attempt to call isVMOVModifiedImm on a splat of i1 values, leading to an unreachable being hit. I've guarded the call on a more specific set of sizes, as i1 is legal under MVE.
Details
Details
Diff Detail
Diff Detail
Event Timeline
llvm/test/CodeGen/Thumb2/mve-vmovimm.ll | ||
---|---|---|
549 | Hi! // FIXME: This does not work for vectors with elements less than 8 bits. while (VecWidth > 8) { unsigned HalfSize = VecWidth / 2; with VT being v4i1. VecWidth is 4 so the loop won't do anything in this case. |
Comment Actions
Thanks for the info! That does sound like something that's worth avoiding. I'll try and change things around so that it never gets called on an i1 vector.
Hi!
I've no idea if this might be a real problem or not, but I noticed when I ran this testcase that we end up in this code in BuildVectorSDNode::isConstantSplat (SelectionDAG.cpp line 9660):
with VT being v4i1. VecWidth is 4 so the loop won't do anything in this case.
At least according to the FIXME it doesn't seem good, but perhaps the comment is overly cautious.
(I just thought I'd share this since in our downstream clone we have an assert there that suddenly failed on this testcase.)