1//===-- Use.cpp - Implement the Use class ---------------------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "llvm/IR/Use.h" 10#include "llvm/IR/User.h" 11#include "llvm/IR/Value.h" 12#include <new> 13 14namespace llvm { 15 16void Use::swap(Use &RHS) { 17 if (Val == RHS.Val) 18 return; 19 20 if (Val) 21 removeFromList(); 22 23 Value *OldVal = Val; 24 if (RHS.Val) { 25 RHS.removeFromList(); 26 Val = RHS.Val; 27 Val->addUse(*this); 28 } else { 29 Val = nullptr; 30 } 31 32 if (OldVal) { 33 RHS.Val = OldVal; 34 RHS.Val->addUse(RHS); 35 } else { 36 RHS.Val = nullptr; 37 } 38} 39 40unsigned Use::getOperandNo() const { 41 return this - getUser()->op_begin(); 42} 43 44void Use::zap(Use *Start, const Use *Stop, bool del) { 45 while (Start != Stop) 46 (--Stop)->~Use(); 47 if (del) 48 ::operator delete(Start); 49} 50 51} // namespace llvm 52