//===- 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 #include 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 Triplets; ///< Collection of all generated triplets }; /// Entity mappings: [entity_name] using EntityList = std::vector; } // namespace llvm #endif // LLVM_TOOLS_LLVM_IR2VEC_UTILS_COMMON_H