xref: /llvm-project/llvm/lib/SandboxIR/Use.cpp (revision 3723946146db07a7114cf998f2f9884e720748ff)
1*37239461Svporpo //===- Use.cpp ------------------------------------------------------------===//
2*37239461Svporpo //
3*37239461Svporpo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*37239461Svporpo // See https://llvm.org/LICENSE.txt for license information.
5*37239461Svporpo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*37239461Svporpo //
7*37239461Svporpo //===----------------------------------------------------------------------===//
8*37239461Svporpo 
9*37239461Svporpo #include "llvm/SandboxIR/Use.h"
10*37239461Svporpo #include "llvm/SandboxIR/Context.h"
11*37239461Svporpo #include "llvm/SandboxIR/User.h"
12*37239461Svporpo 
13*37239461Svporpo namespace llvm::sandboxir {
14*37239461Svporpo 
15*37239461Svporpo Value *Use::get() const { return Ctx->getValue(LLVMUse->get()); }
16*37239461Svporpo 
17*37239461Svporpo void Use::set(Value *V) {
18*37239461Svporpo   Ctx->getTracker().emplaceIfTracking<UseSet>(*this);
19*37239461Svporpo   LLVMUse->set(V->Val);
20*37239461Svporpo }
21*37239461Svporpo 
22*37239461Svporpo unsigned Use::getOperandNo() const { return Usr->getUseOperandNo(*this); }
23*37239461Svporpo 
24*37239461Svporpo void Use::swap(Use &OtherUse) {
25*37239461Svporpo   Ctx->getTracker().emplaceIfTracking<UseSwap>(*this, OtherUse);
26*37239461Svporpo   LLVMUse->swap(*OtherUse.LLVMUse);
27*37239461Svporpo }
28*37239461Svporpo 
29*37239461Svporpo #ifndef NDEBUG
30*37239461Svporpo void Use::dumpOS(raw_ostream &OS) const {
31*37239461Svporpo   Value *Def = nullptr;
32*37239461Svporpo   if (LLVMUse == nullptr)
33*37239461Svporpo     OS << "<null> LLVM Use! ";
34*37239461Svporpo   else
35*37239461Svporpo     Def = Ctx->getValue(LLVMUse->get());
36*37239461Svporpo   OS << "Def:  ";
37*37239461Svporpo   if (Def == nullptr)
38*37239461Svporpo     OS << "NULL";
39*37239461Svporpo   else
40*37239461Svporpo     OS << *Def;
41*37239461Svporpo   OS << "\n";
42*37239461Svporpo 
43*37239461Svporpo   OS << "User: ";
44*37239461Svporpo   if (Usr == nullptr)
45*37239461Svporpo     OS << "NULL";
46*37239461Svporpo   else
47*37239461Svporpo     OS << *Usr;
48*37239461Svporpo   OS << "\n";
49*37239461Svporpo 
50*37239461Svporpo   OS << "OperandNo: ";
51*37239461Svporpo   if (Usr == nullptr)
52*37239461Svporpo     OS << "N/A";
53*37239461Svporpo   else
54*37239461Svporpo     OS << getOperandNo();
55*37239461Svporpo   OS << "\n";
56*37239461Svporpo }
57*37239461Svporpo 
58*37239461Svporpo void Use::dump() const { dumpOS(dbgs()); }
59*37239461Svporpo #endif // NDEBUG
60*37239461Svporpo 
61*37239461Svporpo } // namespace llvm::sandboxir
62