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