[PATCH] D99912: Look through invertible recurrences in isKnownNonEqual

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 14 13:44:20 PDT 2021


nikic added a comment.

I think you're missing an important precondition here: You need that `Step1 == Step2`. Otherwise you could have `<0,+,2>` and `<1,+,1>`, which have non-equal start values, but are still equal on the second iteration.

Something the implementation does account for, but doesn't appear to be tested, is if the second operand is invertible rather than the first.



================
Comment at: llvm/test/Analysis/ValueTracking/known-non-equal.ll:890
 
 define i1 @recurrence_mul_noflags(i8 %A, i8 %B) {
 ; CHECK-LABEL: @recurrence_mul_noflags(
----------------
This doesn't test what you want it to because %A/%B are unknown. You need to make them non-equal so that the nowrap flags are the *only* thing that prevents the fold.


================
Comment at: llvm/test/Analysis/ValueTracking/known-non-equal.ll:1024
 
 define i1 @recurrence_shl_noflags(i8 %A, i8 %B) {
 ; CHECK-LABEL: @recurrence_shl_noflags(
----------------
Same here.


================
Comment at: llvm/test/Analysis/ValueTracking/known-non-equal.ll:1158
 
 define i1 @recurrence_lshr_noflags(i8 %A, i8 %B) {
 ; CHECK-LABEL: @recurrence_lshr_noflags(
----------------
Same here.


================
Comment at: llvm/test/Analysis/ValueTracking/known-non-equal.ll:1292
 
 define i1 @recurrence_ashr_noflags(i8 %A, i8 %B) {
 ; CHECK-LABEL: @recurrence_ashr_noflags(
----------------
Same here.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99912/new/

https://reviews.llvm.org/D99912



More information about the llvm-commits mailing list