diff options
| author | Pete Cooper <peter_cooper@apple.com> | 2016-06-02 18:11:54 +0000 |
|---|---|---|
| committer | Pete Cooper <peter_cooper@apple.com> | 2016-06-02 18:11:54 +0000 |
| commit | c5f6a9df5f2a9bea3a69cbc01c3724d3cc606246 (patch) | |
| tree | c61af44e2ce1a8b2522ed34581050b46b1b88d68 | |
| parent | 651cff42c4775c20ae1288b965f841423001a9dc (diff) | |
| download | bcm5719-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.h | 7 |
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. /// |

