[llvm] r301035 - [InstCombine] revert r300977 and r301021

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 21 13:29:17 PDT 2017


Author: spatel
Date: Fri Apr 21 15:29:17 2017
New Revision: 301035

URL: http://llvm.org/viewvc/llvm-project?rev=301035&view=rev
Log:
[InstCombine] revert r300977 and r301021

This can cause an inf-loop. Investigating...

Modified:
    llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
    llvm/trunk/test/Transforms/InstCombine/xor.ll
    llvm/trunk/test/Transforms/InstCombine/zext.ll

Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp?rev=301035&r1=301034&r2=301035&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp Fri Apr 21 15:29:17 2017
@@ -277,20 +277,10 @@ Value *InstCombiner::SimplifyDemandedUse
       return InsertNewInstWith(And, *I);
     }
 
-    // If the RHS is a constant, see if we can change it. Don't alter a -1
-    // constant because that's a canonical 'not' op, and that is better for
-    // combining, SCEV, and codegen.
-    const APInt *C;
-    if (match(I->getOperand(1), m_APInt(C)) && !C->isAllOnesValue()) {
-      if (DemandedMask.isSubsetOf(*C)) {
-        // Force bits to 1 to create a 'not' op.
-        I->setOperand(1, ConstantInt::getAllOnesValue(VTy));
-        return I;
-      }
-      // If we can't turn this into a 'not', try to shrink the constant.
-      if (ShrinkDemandedConstant(I, 1, DemandedMask))
-        return I;
-    }
+    // If the RHS is a constant, see if we can simplify it.
+    // FIXME: for XOR, we prefer to force bits to 1 if they will make a -1.
+    if (ShrinkDemandedConstant(I, 1, DemandedMask))
+      return I;
 
     // If our LHS is an 'and' and if it has one use, and if any of the bits we
     // are flipping are known to be set, then the xor is just resetting those

Modified: llvm/trunk/test/Transforms/InstCombine/xor.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/xor.ll?rev=301035&r1=301034&r2=301035&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/xor.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/xor.ll Fri Apr 21 15:29:17 2017
@@ -536,20 +536,3 @@ define i32 @test38(i32 %A, i32 %B) {
   %xor = xor i32 %and, %B
   ret i32 %xor
 }
-
-; PR32706 - https://bugs.llvm.org/show_bug.cgi?id=32706
-; Pin an xor constant operand to -1 if possible because 'not' is better for SCEV and codegen.
-
-define i32 @not_is_canonical(i32 %x, i32 %y) {
-; CHECK-LABEL: @not_is_canonical(
-; CHECK-NEXT:    [[SUB:%.*]] = xor i32 %x, -1
-; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[SUB]], %y
-; CHECK-NEXT:    [[MUL:%.*]] = shl i32 [[ADD]], 2
-; CHECK-NEXT:    ret i32 [[MUL]]
-;
-  %sub = xor i32 %x, 1073741823
-  %add = add i32 %sub, %y
-  %mul = shl i32 %add, 2
-  ret i32 %mul
-}
-

Modified: llvm/trunk/test/Transforms/InstCombine/zext.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/zext.ll?rev=301035&r1=301034&r2=301035&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/zext.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/zext.ll Fri Apr 21 15:29:17 2017
@@ -35,7 +35,7 @@ define <2 x i64> @test3(<2 x i64> %A) {
 
 define <2 x i64> @test4(<2 x i64> %A) {
 ; CHECK-LABEL: @test4(
-; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i64> %A, <i64 -1, i64 -1>
+; CHECK-NEXT:    [[TMP1:%.*]] = xor <2 x i64> %A, <i64 63, i64 63>
 ; CHECK-NEXT:    [[XOR:%.*]] = and <2 x i64> [[TMP1]], <i64 23, i64 42>
 ; CHECK-NEXT:    ret <2 x i64> [[XOR]]
 ;




More information about the llvm-commits mailing list