summaryrefslogtreecommitdiff
path: root/lib/VMCore/Use.cpp
diff options
context:
space:
mode:
authorJay Foad <jay.foad@gmail.com>2011-01-16 15:30:52 +0000
committerJay Foad <jay.foad@gmail.com>2011-01-16 15:30:52 +0000
commit1ed26acc58a13f125bc9e1d5e5aa22fd479654ff (patch)
tree0f1bc09ea94435780419763db1c49d5dd21a5f29 /lib/VMCore/Use.cpp
parent29c8419f91ff87ebaee7d275aa709a3bbfc13614 (diff)
downloadllvm-1ed26acc58a13f125bc9e1d5e5aa22fd479654ff.tar.gz
llvm-1ed26acc58a13f125bc9e1d5e5aa22fd479654ff.tar.bz2
llvm-1ed26acc58a13f125bc9e1d5e5aa22fd479654ff.tar.xz
Simplify the construction and destruction of Uses. Simplify
User::dropHungOffUses(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123580 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Use.cpp')
-rw-r--r--lib/VMCore/Use.cpp24
1 files changed, 8 insertions, 16 deletions
diff --git a/lib/VMCore/Use.cpp b/lib/VMCore/Use.cpp
index 32cf954ac6..4e959a516c 100644
--- a/lib/VMCore/Use.cpp
+++ b/lib/VMCore/Use.cpp
@@ -85,7 +85,8 @@ const Use *Use::getImpliedUser() const {
// Use initTags Implementation
//===----------------------------------------------------------------------===//
-Use *Use::initTags(Use * const Start, Use *Stop, ptrdiff_t Done) {
+Use *Use::initTags(Use * const Start, Use *Stop) {
+ ptrdiff_t Done = 0;
while (Done < 20) {
if (Start == Stop--)
return Start;
@@ -97,20 +98,18 @@ Use *Use::initTags(Use * const Start, Use *Stop, ptrdiff_t Done) {
oneDigitTag, oneDigitTag, oneDigitTag,
oneDigitTag, stopTag
};
- Stop->Prev.setFromOpaqueValue(reinterpret_cast<Use**>(tags[Done++]));
- Stop->Val = 0;
+ new(Stop) Use(tags[Done++]);
}
ptrdiff_t Count = Done;
while (Start != Stop) {
--Stop;
- Stop->Val = 0;
if (!Count) {
- Stop->Prev.setFromOpaqueValue(reinterpret_cast<Use**>(stopTag));
+ new(Stop) Use(stopTag);
++Done;
Count = Done;
} else {
- Stop->Prev.setFromOpaqueValue(reinterpret_cast<Use**>(Count & 1));
+ new(Stop) Use(PrevPtrTag(Count & 1));
Count >>= 1;
++Done;
}
@@ -124,17 +123,10 @@ Use *Use::initTags(Use * const Start, Use *Stop, ptrdiff_t Done) {
//===----------------------------------------------------------------------===//
void Use::zap(Use *Start, const Use *Stop, bool del) {
- if (del) {
- while (Start != Stop) {
- (--Stop)->~Use();
- }
+ while (Start != Stop)
+ (--Stop)->~Use();
+ if (del)
::operator delete(Start);
- return;
- }
-
- while (Start != Stop) {
- (Start++)->set(0);
- }
}
//===----------------------------------------------------------------------===//