| //===- Function.cpp - The Function class of Sandbox IR --------------------===// |
| // |
| // 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/SandboxIR/Function.h" |
| #include "llvm/IR/Value.h" |
| #include "llvm/SandboxIR/Context.h" |
| |
| namespace llvm::sandboxir { |
| |
| FunctionType *Function::getFunctionType() const { |
| return cast<FunctionType>( |
| Ctx.getType(cast<llvm::Function>(Val)->getFunctionType())); |
| } |
| |
| #ifndef NDEBUG |
| void Function::dumpNameAndArgs(raw_ostream &OS) const { |
| auto *F = cast<llvm::Function>(Val); |
| OS << *F->getReturnType() << " @" << F->getName() << "("; |
| interleave( |
| F->args(), |
| [this, &OS](const llvm::Argument &LLVMArg) { |
| auto *SBArg = cast_or_null<Argument>(Ctx.getValue(&LLVMArg)); |
| if (SBArg == nullptr) |
| OS << "NULL"; |
| else |
| SBArg->printAsOperand(OS); |
| }, |
| [&] { OS << ", "; }); |
| OS << ")"; |
| } |
| |
| void Function::dumpOS(raw_ostream &OS) const { |
| dumpNameAndArgs(OS); |
| OS << " {\n"; |
| auto *LLVMF = cast<llvm::Function>(Val); |
| interleave( |
| *LLVMF, |
| [this, &OS](const llvm::BasicBlock &LLVMBB) { |
| auto *BB = cast_or_null<BasicBlock>(Ctx.getValue(&LLVMBB)); |
| if (BB == nullptr) |
| OS << "NULL"; |
| else |
| OS << *BB; |
| }, |
| [&OS] { OS << "\n"; }); |
| OS << "}\n"; |
| } |
| #endif // NDEBUG |
| |
| } // namespace llvm::sandboxir |