A minor iteration enabling more efficient VPT Block code generation: consecutive VPT
predicated statements, predicated on the same condition, will be placed within
the same VPT Block. This essentially is an exercise to write some more tests
for the next step, which should be more generic also merging instructions when
they are not consecutive.
Details
Details
Diff Detail
Diff Detail
- Repository
- rL LLVM
Event Timeline
llvm/lib/Target/ARM/Thumb2ITBlockPass.cpp | ||
---|---|---|
403 ↗ | (On Diff #206202) | Do we need to keep track of LastMI? Looks like it's only used to get an iterator once out of the loop, but it is derived from MBIter anyway... |
llvm/test/CodeGen/ARM/mve-vpt-block5.mir | ||
66 ↗ | (On Diff #206202) | So why do we have two bundles here? I'm missing something... |
llvm/lib/Target/ARM/Thumb2ITBlockPass.cpp | ||
---|---|---|
403 ↗ | (On Diff #206202) | cheers, that looks like a good clean-up, will look into that. |
llvm/test/CodeGen/ARM/mve-vpt-block5.mir | ||
66 ↗ | (On Diff #206202) | because there is a MOV in between the 2nd and 3rd MVE_VMINNMf32 instructions: $q3 = MVE_VORR $q0, $q0, 0, $noreg, undef $q3 |
llvm/lib/Target/ARM/Thumb2ITBlockPass.cpp | ||
---|---|---|
405 ↗ | (On Diff #206209) | I think I see what you mean, you want to see: finalizeBundle(Block, VPSTInsertPos.getInstrIterator(), MBIter); But they are different iterators:
I didn't really investigate the difference to be honest, but must be related to iterating over instructions of blocks or bundles. |