21LlvmDotWriter::AnnotateTypeGraphNode(const rvsdg::Type & type, util::graph::Node & node)
23 auto & typeGraph = node.GetGraph();
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);