MLIR 22.0.0git
Encoding.h
Go to the documentation of this file.
1//===- Encoding.h - MLIR binary format encoding information -----*- C++ -*-===//
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//
9// This header defines enum values describing the structure of MLIR bytecode
10// files.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MLIR_BYTECODE_ENCODING_H
15#define MLIR_BYTECODE_ENCODING_H
16
17#include "mlir/IR/Value.h"
18#include <cstdint>
19#include <type_traits>
20
21namespace mlir {
22namespace bytecode {
23//===----------------------------------------------------------------------===//
24// General constants
25//===----------------------------------------------------------------------===//
26
28 /// The minimum supported version of the bytecode.
30
31 /// Dialects versioning was added in version 1.
33
34 /// Support for lazy-loading of isolated region was added in version 2.
36
37 /// Use-list ordering started to be encoded in version 3.
39
40 /// Avoid recording unknown locations on block arguments (compression) started
41 /// in version 4.
43
44 /// Support for encoding properties natively in bytecode instead of merged
45 /// with the discardable attributes.
47
48 /// ODS emits operand/result segment_size as native properties instead of
49 /// an attribute.
51
52 /// The current bytecode version.
54
55 /// An arbitrary value used to fill alignment padding.
57};
58
59//===----------------------------------------------------------------------===//
60// Sections
61//===----------------------------------------------------------------------===//
62
63namespace Section {
64enum ID : uint8_t {
65 /// This section contains strings referenced within the bytecode.
67
68 /// This section contains the dialects referenced within an IR module.
70
71 /// This section contains the attributes and types referenced within an IR
72 /// module.
74
75 /// This section contains the offsets for the attribute and types within the
76 /// AttrType section.
78
79 /// This section contains the list of operations serialized into the bytecode,
80 /// and their nested regions/operations.
81 kIR = 4,
82
83 /// This section contains the resources of the bytecode.
85
86 /// This section contains the offsets of resources within the Resource
87 /// section.
89
90 /// This section contains the versions of each dialect.
92
93 /// This section contains the properties for the operations.
95
96 /// The total number of section types.
98};
99} // namespace Section
100
101//===----------------------------------------------------------------------===//
102// IR Section
103//===----------------------------------------------------------------------===//
104
105/// This enum represents a mask of all of the potential components of an
106/// operation. This mask is used when encoding an operation to indicate which
107/// components are present in the bytecode.
108namespace OpEncodingMask {
109enum : uint8_t {
110 // clang-format off
111 kHasAttrs = 0b00000001,
112 kHasResults = 0b00000010,
113 kHasOperands = 0b00000100,
114 kHasSuccessors = 0b00001000,
115 kHasInlineRegions = 0b00010000,
116 kHasUseListOrders = 0b00100000,
117 kHasProperties = 0b01000000,
118 // clang-format on
119};
120} // namespace OpEncodingMask
121
122/// Get the unique ID of a value use. We encode the unique ID combining an owner
123/// number and the argument number such as if ownerID(op1) < ownerID(op2), then
124/// useID(op1) < useID(op2). If uses have the same owner, then argNumber(op1) <
125/// argNumber(op2) implies useID(op1) < useID(op2).
126template <typename OperandT>
127static inline uint64_t getUseID(OperandT &val, unsigned ownerID) {
128 uint32_t operandNumberID;
129 if constexpr (std::is_same_v<OpOperand, OperandT>)
130 operandNumberID = val.getOperandNumber();
131 else if constexpr (std::is_same_v<BlockArgument, OperandT>)
132 operandNumberID = val.getArgNumber();
133 else
134 llvm_unreachable("unexpected operand type");
135 return (static_cast<uint64_t>(ownerID) << 32) | operandNumberID;
136}
137
138} // namespace bytecode
139} // namespace mlir
140
141#endif
This enum represents a mask of all of the potential components of an operation.
Definition Encoding.h:108
@ kAttrType
This section contains the attributes and types referenced within an IR module.
Definition Encoding.h:73
@ kAttrTypeOffset
This section contains the offsets for the attribute and types within the AttrType section.
Definition Encoding.h:77
@ kIR
This section contains the list of operations serialized into the bytecode, and their nested regions/o...
Definition Encoding.h:81
@ kResource
This section contains the resources of the bytecode.
Definition Encoding.h:84
@ kResourceOffset
This section contains the offsets of resources within the Resource section.
Definition Encoding.h:88
@ kDialect
This section contains the dialects referenced within an IR module.
Definition Encoding.h:69
@ kString
This section contains strings referenced within the bytecode.
Definition Encoding.h:66
@ kDialectVersions
This section contains the versions of each dialect.
Definition Encoding.h:91
@ kProperties
This section contains the properties for the operations.
Definition Encoding.h:94
@ kNumSections
The total number of section types.
Definition Encoding.h:97
static uint64_t getUseID(OperandT &val, unsigned ownerID)
Get the unique ID of a value use.
Definition Encoding.h:127
@ kUseListOrdering
Use-list ordering started to be encoded in version 3.
Definition Encoding.h:38
@ kAlignmentByte
An arbitrary value used to fill alignment padding.
Definition Encoding.h:56
@ kVersion
The current bytecode version.
Definition Encoding.h:53
@ kLazyLoading
Support for lazy-loading of isolated region was added in version 2.
Definition Encoding.h:35
@ kDialectVersioning
Dialects versioning was added in version 1.
Definition Encoding.h:32
@ kElideUnknownBlockArgLocation
Avoid recording unknown locations on block arguments (compression) started in version 4.
Definition Encoding.h:42
@ kNativePropertiesEncoding
Support for encoding properties natively in bytecode instead of merged with the discardable attribute...
Definition Encoding.h:46
@ kMinSupportedVersion
The minimum supported version of the bytecode.
Definition Encoding.h:29
@ kNativePropertiesODSSegmentSize
ODS emits operand/result segment_size as native properties instead of an attribute.
Definition Encoding.h:50
Include the generated interface declarations.