23 auto & typeGraph = node.GetGraph();
27 || rvsdg::is<PointerType>(
type) || rvsdg::is<FloatingPointType>(
type)
28 || rvsdg::is<VariableArgumentType>(
type) || rvsdg::is<rvsdg::UnitType>(
type)
29 || rvsdg::is<rvsdg::ControlType>(
type))
33 else if (
auto arrayType =
dynamic_cast<const ArrayType *
>(&
type))
35 auto & elementTypeNode = GetOrCreateTypeGraphNode(arrayType->element_type(), typeGraph);
36 typeGraph.CreateDirectedEdge(elementTypeNode, node);
38 else if (
auto structType =
dynamic_cast<const StructType *
>(&
type))
40 for (
size_t n = 0; n < structType->numElements(); n++)
42 auto & elementTypeNode = GetOrCreateTypeGraphNode(*structType->getElementType(n), typeGraph);
43 typeGraph.CreateDirectedEdge(elementTypeNode, node);
46 else if (
const auto vectorType =
dynamic_cast<const VectorType *
>(&
type))
48 auto & elementTypeNode = GetOrCreateTypeGraphNode(vectorType->type(), typeGraph);
49 typeGraph.CreateDirectedEdge(elementTypeNode, node);
53 for (
size_t n = 0; n < functionType->NumArguments(); n++)
55 auto & argumentTypeNode = GetOrCreateTypeGraphNode(functionType->ArgumentType(n), typeGraph);
56 auto & edge = typeGraph.CreateDirectedEdge(argumentTypeNode, node);
59 for (
size_t n = 0; n < functionType->NumResults(); n++)
61 auto & resultTypeNode = GetOrCreateTypeGraphNode(functionType->ResultType(n), typeGraph);
62 auto & edge = typeGraph.CreateDirectedEdge(resultTypeNode, node);
75 if (rvsdg::is<MemoryStateType>(rvsdgInput.
Type()))
77 if (rvsdg::is<IOStateType>(rvsdgInput.
Type()))
96 if (
const auto graphImport =
dynamic_cast<const LlvmGraphImport *
>(&rvsdgArgument))
130 node.
SetAttribute(
"constant", op->constant() ?
"true" :
"false");
~LlvmDotWriter() noexcept override
void AnnotateRegionArgument(const rvsdg::RegionArgument ®ionArgument, util::graph::Node &node, util::graph::Graph *typeGraph) override
void AnnotateEdge(const rvsdg::Input &rvsdgInput, util::graph::Edge &edge) override
void AnnotateGraphNode(const rvsdg::Node &rvsdgNode, util::graph::Node &node, util::graph::Graph *typeGraph) override
util::graph::Node & GetOrCreateTypeGraphNode(const Type &type, util::graph::Graph &typeGraph)
Id GetNodeId() const noexcept
Represents the argument of a region.
void SetAttribute(const std::string &attribute, std::string value)
void SetAttributeGraphElement(const std::string &attribute, const GraphElement &element)
#define JLM_UNREACHABLE(msg)
Global memory state passed between functions.
std::string_view linkageToString(const Linkage linkage)
static std::string type(const Node *n)
@ State
Designate a state type.
static std::string strfmt(Args... args)