Use APInt operators to calculate the carry bits, remove this loop.
authorZhou Sheng <zhousheng00@gmail.com>
Sat, 31 Mar 2007 02:38:39 +0000 (02:38 +0000)
committerZhou Sheng <zhousheng00@gmail.com>
Sat, 31 Mar 2007 02:38:39 +0000 (02:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35524 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 5bbc90248b480d432d7193d657ac896fcad1b9d3..1d172ced5258cd24d23d299f5fc5b6dc76dafc51 100644 (file)
@@ -1243,22 +1243,8 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, APInt DemandedMask,
       // To compute this, we first compute the potential carry bits.  These are
       // the bits which may be modified.  I'm not aware of a better way to do
       // this scan.
-      APInt RHSVal(RHS->getValue());
-      
-      bool CarryIn = false;
-      APInt CarryBits(BitWidth, 0);
-      const uint64_t *LHSKnownZeroRawVal = LHSKnownZero.getRawData(),
-                     *RHSRawVal = RHSVal.getRawData();
-      for (uint32_t i = 0; i != RHSVal.getNumWords(); ++i) {
-        uint64_t AddVal = ~LHSKnownZeroRawVal[i] + RHSRawVal[i],
-                 XorVal = ~LHSKnownZeroRawVal[i] ^ RHSRawVal[i];
-        uint64_t WordCarryBits = AddVal ^ XorVal + CarryIn;
-        if (AddVal < RHSRawVal[i])
-          CarryIn = true;
-        else
-          CarryIn = false;
-        CarryBits.setWordToValue(i, WordCarryBits);
-      }
+      const APInt& RHSVal = RHS->getValue();
+      APInt CarryBits((~LHSKnownZero + RHSVal) ^ (~LHSKnownZero ^ RHSVal));
       
       // Now that we know which bits have carries, compute the known-1/0 sets.