LLZK 3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
Ops.h
Go to the documentation of this file.
1//===-- Ops.h ---------------------------------------------------*- C++ -*-===//
2//
3// Part of the LLZK Project, under the Apache License v2.0.
4// See LICENSE.txt for license information.
5// Copyright 2025 Veridise Inc.
6// SPDX-License-Identifier: Apache-2.0
7//
8//===----------------------------------------------------------------------===//
9
10#pragma once
11
15
16#include <mlir/Dialect/Affine/IR/AffineValueMap.h>
17#include <mlir/Interfaces/ControlFlowInterfaces.h>
18#include <mlir/Interfaces/InferTypeOpInterface.h>
19
20#include <llvm/ADT/StringRef.h>
21
22// Include TableGen'd declarations
24
25namespace llzk::polymorphic {
26
34inline constexpr llvm::StringLiteral TEMPLATE_NAME_PATTERN_ATTR = "poly.name_pattern";
35
37inline constexpr llvm::StringLiteral SPECIALIZATION_ID_ATTR = "poly.specialization_id";
38inline constexpr llvm::StringLiteral SPECIALIZATION_ORIGIN_ATTR = "poly.origin";
39inline constexpr llvm::StringLiteral SPECIALIZATION_ARGUMENTS_ATTR = "poly.arguments";
40inline constexpr llvm::StringLiteral FAMILY_ATTR = "poly.family";
41inline constexpr llvm::StringLiteral FAMILY_SPECIALIZATIONS_ATTR = "poly.family_specializations";
42inline constexpr llvm::StringLiteral FAMILY_INDICES_KEY = "indices";
43inline constexpr llvm::StringLiteral FAMILY_SPECIALIZATION_KEY = "specialization";
46inline constexpr llvm::StringLiteral FAMILY_TYPE_KEY = "type";
47
48template <typename OpT>
50 std::is_same_v<OpT, TemplateSymbolBindingOpInterface> ||
51 std::is_base_of_v<TemplateSymbolBindingOpInterface::Trait<OpT>, OpT>;
52} // namespace llzk::polymorphic
53
54// Include TableGen'd declarations
55#define GET_OP_CLASSES
57
58namespace llzk::polymorphic {
59
61bool isInTemplate(mlir::Operation *op);
62
65mlir::FailureOr<TemplateOp> verifyInTemplate(mlir::Operation *op);
66
67} // namespace llzk::polymorphic
constexpr llvm::StringLiteral FAMILY_ATTR
Definition Ops.h:40
constexpr llvm::StringLiteral TEMPLATE_NAME_PATTERN_ATTR
Metadata carried across transformation passes preserving the literal chunks of a partially-instantiat...
Definition Ops.h:34
constexpr llvm::StringLiteral SPECIALIZATION_ID_ATTR
Metadata on concrete struct clones and rolled affine family uses.
Definition Ops.h:37
constexpr llvm::StringLiteral SPECIALIZATION_ORIGIN_ATTR
Definition Ops.h:38
constexpr llvm::StringLiteral SPECIALIZATION_ARGUMENTS_ATTR
Definition Ops.h:39
constexpr llvm::StringLiteral FAMILY_SPECIALIZATION_KEY
Definition Ops.h:43
constexpr llvm::StringLiteral FAMILY_INDICES_KEY
Definition Ops.h:42
bool isInTemplate(Operation *op)
Definition Ops.cpp:34
constexpr llvm::StringLiteral FAMILY_TYPE_KEY
The original affine-parameterized struct family, paired with element indices and a concrete specializ...
Definition Ops.h:46
FailureOr< TemplateOp > verifyInTemplate(Operation *op)
Definition Ops.cpp:36
constexpr llvm::StringLiteral FAMILY_SPECIALIZATIONS_ATTR
Definition Ops.h:41