X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FUse.cpp;h=cae845d99fe58fe3a943b4d38566f3339c7af805;hb=95d71357275a05a4bfc346f5b513688e26531a91;hp=b6720e5676496789b8eed104663387965daf4d3f;hpb=2bfe24c418f7f5261c4ed4cbcc4c0126e482495d;p=oota-llvm.git diff --git a/lib/IR/Use.cpp b/lib/IR/Use.cpp index b6720e56764..cae845d99fe 100644 --- a/lib/IR/Use.cpp +++ b/lib/IR/Use.cpp @@ -8,33 +8,33 @@ //===----------------------------------------------------------------------===// #include "llvm/IR/Use.h" +#include "llvm/IR/User.h" #include "llvm/IR/Value.h" #include namespace llvm { void Use::swap(Use &RHS) { - Value *V1(Val); - Value *V2(RHS.Val); - if (V1 != V2) { - if (V1) { - removeFromList(); - } + if (Val == RHS.Val) + return; - if (V2) { - RHS.removeFromList(); - Val = V2; - V2->addUse(*this); - } else { - Val = 0; - } + if (Val) + removeFromList(); - if (V1) { - RHS.Val = V1; - V1->addUse(RHS); - } else { - RHS.Val = 0; - } + Value *OldVal = Val; + if (RHS.Val) { + RHS.removeFromList(); + Val = RHS.Val; + Val->addUse(*this); + } else { + Val = nullptr; + } + + if (OldVal) { + RHS.Val = OldVal; + RHS.Val->addUse(RHS); + } else { + RHS.Val = nullptr; } } @@ -45,10 +45,14 @@ User *Use::getUser() const { : reinterpret_cast(const_cast(End)); } -// Sets up the waymarking algoritm's tags for a series of Uses. See the +unsigned Use::getOperandNo() const { + return this - getUser()->op_begin(); +} + +// Sets up the waymarking algorithm's tags for a series of Uses. See the // algorithm details here: // -// http://www.llvm.org/docs/ProgrammersManual.html#UserLayout +// http://www.llvm.org/docs/ProgrammersManual.html#the-waymarking-algorithm // Use *Use::initTags(Use *const Start, Use *Stop) { ptrdiff_t Done = 0;