[llvm-commits] [llvm] r56457 - /llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp
Gabor Greif
ggreif at gmail.com
Mon Sep 22 13:08:26 PDT 2008
Author: ggreif
Date: Mon Sep 22 15:08:20 2008
New Revision: 56457
URL: http://llvm.org/viewvc/llvm-project?rev=56457&view=rev
Log:
first (untested but performant) implementation of Use::swap
Modified:
llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp
Modified: llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp?rev=56457&r1=56456&r2=56457&view=diff
==============================================================================
--- llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp (original)
+++ llvm/branches/ggreif/use-diet/lib/VMCore/Use.cpp Mon Sep 22 15:08:20 2008
@@ -20,7 +20,30 @@
//===----------------------------------------------------------------------===//
void Use::swap(Use &RHS) {
- Value *V1(Val1);
+ ptrdiff_t dist((char*)&RHS - (char*)this);
+
+ if (dist) {
+ Use *valid1(stripTag<tagMaskN>(Next));
+ Use *valid2(stripTag<tagMaskN>(RHS.Next));
+ if (valid1 && valid2) {
+ bool real1(fullStopTagN != extractTag<NextPtrTag, tagMaskN>(Next));
+ bool real2(fullStopTagN != extractTag<NextPtrTag, tagMaskN>(RHS.Next));
+ (char*&)*stripTag<tagMask>(Prev) += dist;
+ (char*&)*stripTag<tagMask>(RHS.Prev) -= dist;
+ if (real1)
+ (char*&)valid1->Next += dist;
+ if (real2)
+ (char*&)valid2->Next -= dist;
+
+ }
+
+ // swap the members
+ std::swap(Next, RHS.Next);
+ Use** Prev1 = transferTag<tagMask>(Prev, stripTag<tagMask>(RHS.Prev));
+ RHS.Prev = transferTag<tagMask>(RHS.Prev, stripTag<tagMask>(Prev));
+ Prev = Prev1;
+ }
+ /* Value *V1(Val1);
Value *V2(RHS.Val1);
if (V1 != V2) {
if (V1) {
@@ -42,6 +65,7 @@
RHS.Val1 = 0;
}
}
+ */
}
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list