[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
Chris Lattner
clattner at apple.com
Fri Mar 30 19:59:16 PDT 2007
> Use APInt operators to calculate the carry bits, remove this loop.
Nice :)
-Chris
>
>
> ---
> Diffs of the changes: (+2 -16)
>
> InstructionCombining.cpp | 18 ++----------------
> 1 files changed, 2 insertions(+), 16 deletions(-)
>
>
> Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
> diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.712
> llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.713
> --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.712 Fri
> Mar 30 12:20:39 2007
> +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Fri Mar 30
> 21:38:39 2007
> @@ -1243,22 +1243,8 @@
> // 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.
>
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list