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