| //===- Common.h - Shared types for IR2Vec/MIR2Vec tools -----------===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This file contains shared types and constants used by both the IR2Vec |
| /// and MIR2Vec tool implementations. It has no dependency on either the |
| /// LLVM IR or Machine IR APIs, making it safe to include from either side. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_TOOLS_LLVM_IR2VEC_UTILS_COMMON_H |
| #define LLVM_TOOLS_LLVM_IR2VEC_UTILS_COMMON_H |
| |
| #include <string> |
| #include <vector> |
| |
| namespace llvm { |
| |
| /// Tool name for error reporting |
| static const char *ToolName = "llvm-ir2vec"; |
| |
| /// Specifies the granularity at which embeddings are generated. |
| enum EmbeddingLevel { |
| InstructionLevel, // Generate instruction-level embeddings |
| BasicBlockLevel, // Generate basic block-level embeddings |
| FunctionLevel // Generate function-level embeddings |
| }; |
| |
| /// Represents a single knowledge graph triplet (Head, Relation, Tail) |
| /// where indices reference entities in an EntityList |
| struct Triplet { |
| unsigned Head = 0; ///< Index of the head entity in the entity list |
| unsigned Tail = 0; ///< Index of the tail entity in the entity list |
| unsigned Relation = 0; ///< Relation type (see RelationType enum) |
| }; |
| |
| /// Result structure containing all generated triplets and metadata |
| struct TripletResult { |
| unsigned MaxRelation = |
| 0; ///< Highest relation index used (for ArgRelation + N) |
| std::vector<Triplet> Triplets; ///< Collection of all generated triplets |
| }; |
| |
| /// Entity mappings: [entity_name] |
| using EntityList = std::vector<std::string>; |
| |
| } // namespace llvm |
| |
| #endif // LLVM_TOOLS_LLVM_IR2VEC_UTILS_COMMON_H |