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