xref: /llvm-project/llvm/lib/SandboxIR/Use.cpp (revision 3723946146db07a7114cf998f2f9884e720748ff)
1 //===- Use.cpp ------------------------------------------------------------===//
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/SandboxIR/Use.h"
10 #include "llvm/SandboxIR/Context.h"
11 #include "llvm/SandboxIR/User.h"
12 
13 namespace llvm::sandboxir {
14 
15 Value *Use::get() const { return Ctx->getValue(LLVMUse->get()); }
16 
17 void Use::set(Value *V) {
18   Ctx->getTracker().emplaceIfTracking<UseSet>(*this);
19   LLVMUse->set(V->Val);
20 }
21 
22 unsigned Use::getOperandNo() const { return Usr->getUseOperandNo(*this); }
23 
24 void Use::swap(Use &OtherUse) {
25   Ctx->getTracker().emplaceIfTracking<UseSwap>(*this, OtherUse);
26   LLVMUse->swap(*OtherUse.LLVMUse);
27 }
28 
29 #ifndef NDEBUG
30 void Use::dumpOS(raw_ostream &OS) const {
31   Value *Def = nullptr;
32   if (LLVMUse == nullptr)
33     OS << "<null> LLVM Use! ";
34   else
35     Def = Ctx->getValue(LLVMUse->get());
36   OS << "Def:  ";
37   if (Def == nullptr)
38     OS << "NULL";
39   else
40     OS << *Def;
41   OS << "\n";
42 
43   OS << "User: ";
44   if (Usr == nullptr)
45     OS << "NULL";
46   else
47     OS << *Usr;
48   OS << "\n";
49 
50   OS << "OperandNo: ";
51   if (Usr == nullptr)
52     OS << "N/A";
53   else
54     OS << getOperandNo();
55   OS << "\n";
56 }
57 
58 void Use::dump() const { dumpOS(dbgs()); }
59 #endif // NDEBUG
60 
61 } // namespace llvm::sandboxir
62