A vpt block that just contains either VPST;VCTP or VPT;VCTP, once the VCTP is removed will become invalid. This fixed the first by removing the now empty block and bails out for the second, as we have no simple way of converting a VPT to a VCMP.
Details
Details
Diff Detail
Diff Detail
Event Timeline
llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp | ||
---|---|---|
316 | Perhaps I am confused, but should this: Insts.front()->getOpcode() != ARM::MVE_VPST not be be ==? |
llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp | ||
---|---|---|
316 | The block should start with either a VPST or a VPT. This is checking that it's a VPT, by proxy of it not being a VPST. (There are many VPT opcodes, so that is more difficult to check). |
llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp | ||
---|---|---|
316 | There is a isVPTOpcode function that you could use to make the check more precise. |
Comment Actions
I've added an assert that checks isVPTOpcode (which I think may already be checked but it's not a bad check to add again if we are relying on it here).
Perhaps I am confused, but should this:
not be be ==?