- User Since
- Oct 11 2019, 1:25 AM (112 w, 3 d)
Aug 28 2020
Aug 24 2020
Thanks for the suggestions, I cleaned up the test so it looks a bit nicer now.
Aug 20 2020
I made the NextStride == 2 condition more future proof as requested by Dave's comment. This required to make the MVEMaxSupportedInterleaveFactor from ARMISelLowering non-static.
Aug 17 2020
Widened the range of allowed strides to also include loop invariant expressions.
Aug 13 2020
Added a test that would fail the VecTy && "No scalable vectors expected here" assert without this fix.
Aug 12 2020
Aug 6 2020
Aug 3 2020
Jul 28 2020
Jul 27 2020
Jul 21 2020
Jul 17 2020
Jul 10 2020
Revisited the new test to make it cleaner.
Jul 9 2020
LGTM - Changed should indeed reflect possible changes by that function, too.
Jul 8 2020
Hi, there was a bug concerning the location at which the new getelementptr instruction would be generated, thanks for catching this.
I have fixed the bug and derived a LoopVectorize test case from your C example.
Jul 2 2020
Jun 26 2020
All nitpicks have been addressed.
Jun 5 2020
May 15 2020
May 14 2020
Hi Sam, those tests are checking whether the cost model calculates the costs for zext(gather(...)) and scatter(trunc(..)) correctly, because these can be integrated in the MVE intrinsics.
That calculation relies on I being available. I see that you did integrate I in IntrinsicCostAttributes, as an IntrinsicInst; the gather/scatter cost function was taking an Instruction because when it is called we might either be looking at a gather/scatter intrinsic or still at an LLVM load/store, which I think is no intrinsic?
I can't see where it happens, but my guess is that the instruction that ends up being handed over to getGatherScatterOpCost in BasicTTIImpl::getIntrinsicInstrCost doesn't match what was expected anymore.
May 13 2020
May 7 2020
Last correction: For the incrementing non-writeback gathers, removed the check that the offset only has one use.
May 6 2020
Applied the chances suggested in the comments.
May 4 2020
Made optimisation of offsets independent of the creation of the individual gathers and scatters, such that when looking at transforming those we're not in an environment where some instructions have been optimised but others, which will be optimised too, haven't been yet.
Restructured the code such that the differentiation between writeback and non-writeback gathers is clearer
Apr 29 2020
Fixing a bug in the latest diff: We should always make sure to scale the offsets that the loop is initialised with.
Apr 28 2020
Apr 20 2020
Fixed calculation of the constant in getIfConst, moved isGatherScatter to ARMBaseInstrInfo so it is accessible for other passes, too.
Apr 16 2020
Apr 15 2020
Made some changes suggested in the comments, and also re-ordered the code such that it is easier to follow.
Apr 8 2020
Apr 6 2020
Mar 31 2020
Implemented some changes suggested in comments (see below for details)
Mar 30 2020
Changes addressing most of the comments - see below.
Mar 27 2020
Added scatter tests, and some code changes (see comments).
Mar 25 2020
Mar 24 2020
Mar 11 2020
Mar 9 2020
Moved around some tests and add two more.
Also made sure that extends or truncs to 'incomplete' vector types are not considered valid candidates to be merged into the gather.
Mar 4 2020
Implemented some of the changes suggested in comments.