[PATCH] D154937: [InstCombine] Generalize foldAndOrOfICmpEqZeroAndICmp

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 11 03:32:17 PDT 2023


nikic added inline comments.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:3001
 
+  Constant *C = ConstantInt::get(LHS0->getType(), *CInt);
+
----------------
Move this lower, not needed here yet.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:3022
+      Builder.CreateSub(
+          LHS0, Builder.CreateAdd(C, ConstantInt::get(LHS0->getType(), 1))),
       Other);
----------------
Create the constant directly from `*CInt + 1`, no need for CreateAdd.


================
Comment at: llvm/test/Transforms/InstCombine/and-or-icmp-const-icmp.ll:84
 ;
   %sub = sub i8 %x, 5
   %c1 = icmp eq i8 %x, 6
----------------
Write this in canonical form (add -5) or drop the test if redundant with the next.


================
Comment at: llvm/test/Transforms/InstCombine/and-or-icmp-const-icmp.ll:259
-; CHECK-NEXT:    [[C1:%.*]] = icmp eq i8 [[X]], -1
-; CHECK-NEXT:    [[C2:%.*]] = icmp ugt i8 [[ADD]], [[Y]]
-; CHECK-NEXT:    [[OR:%.*]] = or i1 [[C1]], [[C2]]
----------------
Not actually commuted. Grep for `thwart complexity-based canonicalization` in tests.


================
Comment at: llvm/test/Transforms/InstCombine/and-or-icmp-const-icmp.ll:270
 
 define <2 x i1> @eq_vetor_commuted(<2 x i8> %x, <2 x i8> %y) {
 ; CHECK-LABEL: define <2 x i1> @eq_vetor_commuted
----------------
No need for separate commuted vector tests.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154937



More information about the llvm-commits mailing list