]> granicus.if.org Git - llvm/commitdiff
[InstCombine] use isSubsetOf() for efficiency
authorSanjay Patel <spatel@rotateright.com>
Fri, 21 Apr 2017 19:16:52 +0000 (19:16 +0000)
committerSanjay Patel <spatel@rotateright.com>
Fri, 21 Apr 2017 19:16:52 +0000 (19:16 +0000)
C | ~D == -1
~(C | ~D) == 0
~C & D == 0
D & ~C == 0
D.isSubsetOf(C)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301021 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp

index d7e709c9cca1a06f44b8ed2c61c97e7de02b9b19..10faf4786764bd39ec294056bab7881588d6e54a 100644 (file)
@@ -282,7 +282,7 @@ Value *InstCombiner::SimplifyDemandedUseBits(Value *V, APInt DemandedMask,
     // combining, SCEV, and codegen.
     const APInt *C;
     if (match(I->getOperand(1), m_APInt(C)) && !C->isAllOnesValue()) {
-      if ((*C | ~DemandedMask).isAllOnesValue()) {
+      if (DemandedMask.isSubsetOf(*C)) {
         // Force bits to 1 to create a 'not' op.
         I->setOperand(1, ConstantInt::getAllOnesValue(VTy));
         return I;