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