LLVM 20.0.0git
Function.cpp
Go to the documentation of this file.
1//===- Function.cpp - The Function class of Sandbox IR --------------------===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8
10#include "llvm/IR/Value.h"
12
13namespace llvm::sandboxir {
14
16 return cast<FunctionType>(
17 Ctx.getType(cast<llvm::Function>(Val)->getFunctionType()));
18}
19
20#ifndef NDEBUG
22 auto *F = cast<llvm::Function>(Val);
23 OS << *F->getReturnType() << " @" << F->getName() << "(";
25 F->args(),
26 [this, &OS](const llvm::Argument &LLVMArg) {
27 auto *SBArg = cast_or_null<Argument>(Ctx.getValue(&LLVMArg));
28 if (SBArg == nullptr)
29 OS << "NULL";
30 else
31 SBArg->printAsOperand(OS);
32 },
33 [&] { OS << ", "; });
34 OS << ")";
35}
36
39 OS << " {\n";
40 auto *LLVMF = cast<llvm::Function>(Val);
42 *LLVMF,
43 [this, &OS](const llvm::BasicBlock &LLVMBB) {
44 auto *BB = cast_or_null<BasicBlock>(Ctx.getValue(&LLVMBB));
45 if (BB == nullptr)
46 OS << "NULL";
47 else
48 OS << *BB;
49 },
50 [&OS] { OS << "\n"; });
51 OS << "}\n";
52}
53#endif // NDEBUG
54
55} // namespace llvm::sandboxir
#define F(x, y, z)
Definition: MD5.cpp:55
raw_pwrite_stream & OS
This class represents an incoming formal argument to a Function.
Definition: Argument.h:31
LLVM Basic Block Representation.
Definition: BasicBlock.h:61
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
sandboxir::Value * getValue(llvm::Value *V) const
Definition: Context.cpp:601
Type * getType(llvm::Type *LLVMTy)
Definition: Context.h:220
FunctionType * getFunctionType() const
Definition: Function.cpp:15
void dumpOS(raw_ostream &OS) const final
Definition: Function.cpp:37
void dumpNameAndArgs(raw_ostream &OS) const
Definition: Function.cpp:21
llvm::Value * Val
The LLVM Value that corresponds to this SandboxIR Value.
Definition: Value.h:103
Context & Ctx
All values point to the context.
Definition: Value.h:172
void interleave(ForwardIterator begin, ForwardIterator end, UnaryFunctor each_fn, NullaryFunctor between_fn)
An STL-style algorithm similar to std::for_each that applies a second functor between every pair of e...
Definition: STLExtras.h:2169