X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FUse.cpp;h=047861c2586fa178656158d643a5145a55b51ce2;hb=049ffbbdf2a43d5529cb56b6bb696d20d28ff217;hp=b6720e5676496789b8eed104663387965daf4d3f;hpb=2bfe24c418f7f5261c4ed4cbcc4c0126e482495d;p=oota-llvm.git diff --git a/lib/IR/Use.cpp b/lib/IR/Use.cpp index b6720e56764..047861c2586 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,7 +45,11 @@ 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