|  | //===- 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())); | 
|  | } | 
|  |  | 
|  | void Function::setAlignment(MaybeAlign Align) { | 
|  | Ctx.getTracker() | 
|  | .emplaceIfTracking< | 
|  | GenericSetter<&Function::getAlign, &Function::setAlignment>>(this); | 
|  | cast<llvm::Function>(Val)->setAlignment(Align); | 
|  | } | 
|  |  | 
|  | #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 |