xref: /freebsd/contrib/llvm-project/llvm/lib/IR/Use.cpp (revision 5ffd83dbcc34f10e07f6d3e968ae6365869615f4)
10b57cec5SDimitry Andric //===-- Use.cpp - Implement the Use class ---------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "llvm/IR/Use.h"
100b57cec5SDimitry Andric #include "llvm/IR/User.h"
110b57cec5SDimitry Andric #include "llvm/IR/Value.h"
120b57cec5SDimitry Andric #include <new>
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric namespace llvm {
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric void Use::swap(Use &RHS) {
170b57cec5SDimitry Andric   if (Val == RHS.Val)
180b57cec5SDimitry Andric     return;
190b57cec5SDimitry Andric 
200b57cec5SDimitry Andric   if (Val)
210b57cec5SDimitry Andric     removeFromList();
220b57cec5SDimitry Andric 
230b57cec5SDimitry Andric   Value *OldVal = Val;
240b57cec5SDimitry Andric   if (RHS.Val) {
250b57cec5SDimitry Andric     RHS.removeFromList();
260b57cec5SDimitry Andric     Val = RHS.Val;
270b57cec5SDimitry Andric     Val->addUse(*this);
280b57cec5SDimitry Andric   } else {
290b57cec5SDimitry Andric     Val = nullptr;
300b57cec5SDimitry Andric   }
310b57cec5SDimitry Andric 
320b57cec5SDimitry Andric   if (OldVal) {
330b57cec5SDimitry Andric     RHS.Val = OldVal;
340b57cec5SDimitry Andric     RHS.Val->addUse(RHS);
350b57cec5SDimitry Andric   } else {
360b57cec5SDimitry Andric     RHS.Val = nullptr;
370b57cec5SDimitry Andric   }
380b57cec5SDimitry Andric }
390b57cec5SDimitry Andric 
400b57cec5SDimitry Andric unsigned Use::getOperandNo() const {
410b57cec5SDimitry Andric   return this - getUser()->op_begin();
420b57cec5SDimitry Andric }
430b57cec5SDimitry Andric 
440b57cec5SDimitry Andric void Use::zap(Use *Start, const Use *Stop, bool del) {
450b57cec5SDimitry Andric   while (Start != Stop)
460b57cec5SDimitry Andric     (--Stop)->~Use();
470b57cec5SDimitry Andric   if (del)
480b57cec5SDimitry Andric     ::operator delete(Start);
490b57cec5SDimitry Andric }
500b57cec5SDimitry Andric 
51*5ffd83dbSDimitry Andric } // namespace llvm
52