1 //===- Function.cpp - The Function class of Sandbox IR --------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/SandboxIR/Function.h"
10 #include "llvm/IR/Value.h"
11 #include "llvm/SandboxIR/Context.h"
13 namespace llvm::sandboxir
{
15 FunctionType
*Function::getFunctionType() const {
16 return cast
<FunctionType
>(
17 Ctx
.getType(cast
<llvm::Function
>(Val
)->getFunctionType()));
21 void Function::dumpNameAndArgs(raw_ostream
&OS
) const {
22 auto *F
= cast
<llvm::Function
>(Val
);
23 OS
<< *F
->getReturnType() << " @" << F
->getName() << "(";
26 [this, &OS
](const llvm::Argument
&LLVMArg
) {
27 auto *SBArg
= cast_or_null
<Argument
>(Ctx
.getValue(&LLVMArg
));
31 SBArg
->printAsOperand(OS
);
37 void Function::dumpOS(raw_ostream
&OS
) const {
40 auto *LLVMF
= cast
<llvm::Function
>(Val
);
43 [this, &OS
](const llvm::BasicBlock
&LLVMBB
) {
44 auto *BB
= cast_or_null
<BasicBlock
>(Ctx
.getValue(&LLVMBB
));
50 [&OS
] { OS
<< "\n"; });
55 } // namespace llvm::sandboxir