[PATCH] D134135: [InstCombine] Fix bug when folding x + (x | -x) to x & (x - 1)

Marc Auberer via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 18 07:25:51 PDT 2022


marcauberer created this revision.
marcauberer added reviewers: spatel, nlopes.
Herald added a subscriber: hiraditya.
Herald added a project: All.
marcauberer requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Addresses concern: https://reviews.llvm.org/rG09cdddea0c4d284c2c22f5dfade40a60850c5ea7

There was a copy/paste mistake in the code. Updated code and test ref.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D134135

Files:
  llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
  llvm/test/Transforms/InstCombine/add_or_sub.ll


Index: llvm/test/Transforms/InstCombine/add_or_sub.ll
===================================================================
--- llvm/test/Transforms/InstCombine/add_or_sub.ll
+++ llvm/test/Transforms/InstCombine/add_or_sub.ll
@@ -7,9 +7,7 @@
 
 define i32 @add_or_sub_comb_i32_commuted1_nuw(i32 %x) {
 ; CHECK-LABEL: @add_or_sub_comb_i32_commuted1_nuw(
-; CHECK-NEXT:    [[TMP1:%.*]] = add i32 [[X:%.*]], -1
-; CHECK-NEXT:    [[ADD:%.*]] = and i32 [[TMP1]], [[X]]
-; CHECK-NEXT:    ret i32 [[ADD]]
+; CHECK-NEXT:    ret i32 [[X:%.*]]
 ;
   %sub = sub i32 0, %x
   %or = or i32 %sub, %x
@@ -20,7 +18,9 @@
 define i8 @add_or_sub_comb_i8_commuted2_nsw(i8 %p) {
 ; CHECK-LABEL: @add_or_sub_comb_i8_commuted2_nsw(
 ; CHECK-NEXT:    [[X:%.*]] = mul i8 [[P:%.*]], [[P]]
-; CHECK-NEXT:    ret i8 [[X]]
+; CHECK-NEXT:    [[TMP1:%.*]] = add nsw i8 [[X]], -1
+; CHECK-NEXT:    [[ADD:%.*]] = and i8 [[TMP1]], [[X]]
+; CHECK-NEXT:    ret i8 [[ADD]]
 ;
   %x = mul i8 %p, %p ; thwart complexity-based canonicalization
   %sub = sub i8 0, %x
Index: llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
@@ -1404,7 +1404,7 @@
                                                       m_Deferred(A)))))) {
     Value *Add =
         Builder.CreateAdd(A, Constant::getAllOnesValue(A->getType()), "",
-                          I.hasNoSignedWrap(), I.hasNoSignedWrap());
+                          I.hasNoUnsignedWrap(), I.hasNoSignedWrap());
     return BinaryOperator::CreateAnd(Add, A);
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134135.461073.patch
Type: text/x-patch
Size: 1657 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220918/1284e131/attachment.bin>


More information about the llvm-commits mailing list