- User Since
- May 11 2015, 7:59 AM (162 w, 2 d)
Tue, Jun 19
I am not suggesting that I will ask you to refactor by the way! I just want to spend some more time looking at these functions and having a play with your other two patches.
Many thanks Eli!
Mon, Jun 18
Thu, Jun 14
Wed, Jun 13
Mon, Jun 11
Fri, Jun 8
Thu, Jun 7
Thanks for the feedback. I've removed my new test and updated the existed one. Also modified the code style.
May 21 2018
May 16 2018
May 10 2018
May 9 2018
May 4 2018
LGTM, thanks Max!
May 2 2018
May 1 2018
I had missed that the output operands where not the same, indeed it's not convenient and readability is also a valid reason.
Apr 30 2018
Ah, thanks for clearing that up for me.
Ok, for my sanity, I don't think the document descriptions match up, do you agree? The useful link you pointed me to only shows Xm as the scalar index, but 5.2.2 of the PDF supplement shows that the index can be scaled with LSL.
Apr 27 2018
Great stuff, LGTM.
Apr 18 2018
Apr 17 2018
I think you're fine to commit tests without review.
Apr 16 2018
Apr 13 2018
Now that we're only looking for nsw with equality predicates, we should now be able to use nuw as well as nsw. HasNoSignedWrap has been renamed and queries hasNoSelfWrap, while still attempting to also search for nsw.
Sure Max, thanks for doing the testing.
Apr 12 2018
After starting and playing around for the day, I've got to the root question of: why do we do the wrap checks anyway? Aren't the following range checks in the IsIncreasing/Decreasing blocks enough?
Apr 10 2018
Split the helper function out to D45481 and rebased.
Apr 9 2018
Thanks. Yes, I will do.
Apr 6 2018
The trunc_i64_mask_srl test has been added. This example showed that I had a typo in my patch, I was checking the user of N and not 'N0'! So I've also renamed some variables to reduce the chance of possible confusion again.
I kindly got a reproducer from @nemanjai so now I've, hopefully, sorted out the issue that was causing big endian stage two builders to fail.
Apr 4 2018
Apr 3 2018
Sorry for the delay, LGTM. Thanks.
Mar 26 2018
Makes sense, LGTM.
Committed in https://reviews.llvm.org/rL328480
Mar 22 2018
Thanks for the review and your help. I'll make the changes and commit at the start of next week. I'll also prepare the patch for the decreasing case.
Mar 21 2018
Mar 20 2018
Slight format change and added AvailableAtLoopEntry check in CannotBeMinInLoop.
Thanks Max, I've now:
- corrected the loop guard logic, including using the entry instead of backedge guard.
- extracted the bound checking into one function, merging the Max check into it.
Mar 19 2018
I've replaced SumCanReachMax with SumCannotBeMaxInLoop, which uses similar logic to the new CannotBeMinInLoop, querying SCEV's LoopBackedgeGuardedBy. These two updated checks are need together to get this to work. Other changes:
- Removed whitespace.
- re-inserted the range metadata into test.
- bracket style changes
Mar 16 2018
Thanks for the comments, I've made these changes:
- CanBeMin has now been replaced with CannotBeMinInLoop.
- The function arguments have been renamed and reordered.
- KnownNonNegative check removed.
- debug comments removed.
Mar 15 2018
Hi Sjoerd, this LGTM.
Added forgotten test.
I'm happy to see this! LGTM with just one small comment, no need to re-review. Thanks!
Mar 13 2018
Mar 12 2018
Could you provide me with an example to illustrate your concern please? I keep going around in circles and I just see either the number of instructions or register pressure being reduced. Could the codegen of my new tests be improved?
Mar 8 2018
Yes, this is a really nice approach for lower constant bounds. My transform selects a region of conditionally executed blocks and then attempts to hoist conditional statements into the head block of that region. Currently I can find loop unrolled induction variable idioms as well as finding a connected path of conditional values. From there I can produce a fast path free of compares and branches, as well as leaving the original code as a fallback. I also split and remove selects because performing conditional moves is still expensive on our small cores as well as the increased register pressure they create.
Just FYI, I am also currently working on a pass to handle slightly more generic cases within the loop body, such like:
Mar 7 2018
Thanks John, I'll try those changes.
Mar 6 2018
Mar 5 2018
Feb 23 2018