summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2016-06-02 18:11:54 +0000
committerPete Cooper <peter_cooper@apple.com>2016-06-02 18:11:54 +0000
commitc5f6a9df5f2a9bea3a69cbc01c3724d3cc606246 (patch)
treec61af44e2ce1a8b2522ed34581050b46b1b88d68
parent651cff42c4775c20ae1288b965f841423001a9dc (diff)
downloadbcm5719-llvm-c5f6a9df5f2a9bea3a69cbc01c3724d3cc606246.tar.gz
bcm5719-llvm-c5f6a9df5f2a9bea3a69cbc01c3724d3cc606246.zip
Make APInt negate just do a 2's complement negate instead of subtract. NFC.
This is part of an effort to shave allocations from APInt heavy paths. I'll be moving many of the other operators to r-value references soon and this is a step towards doing that without too much duplication. Saves 15k allocations when doing 'opt -O2 verify-uselistorder.bc'. llvm-svn: 271556
-rw-r--r--llvm/include/llvm/ADT/APInt.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h
index a02ecaa762a..cdb72b95ad7 100644
--- a/llvm/include/llvm/ADT/APInt.h
+++ b/llvm/include/llvm/ADT/APInt.h
@@ -625,7 +625,12 @@ public:
/// Negates *this using two's complement logic.
///
/// \returns An APInt value representing the negation of *this.
- APInt operator-() const { return APInt(BitWidth, 0) - (*this); }
+ APInt operator-() const {
+ APInt Result(*this);
+ Result.flipAllBits();
+ ++Result;
+ return Result;
+ }
/// \brief Logical negation operator.
///
OpenPOWER on IntegriCloud