Files
gps/tools/local/circt/include/mlir/Dialect/UB/IR/UBOps.td
T
2026-07-12 11:01:51 +03:00

90 lines
2.6 KiB
TableGen

//===- UBOps.td - UB operations definitions ----------------*- tablegen -*-===//
//
// 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
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_DIALECT_UB_IR_UBOPS_TD
#define MLIR_DIALECT_UB_IR_UBOPS_TD
include "mlir/Interfaces/SideEffectInterfaces.td"
include "mlir/IR/AttrTypeBase.td"
include "mlir/Dialect/UB/IR/UBOpsInterfaces.td"
def UB_Dialect : Dialect {
let name = "ub";
let cppNamespace = "::mlir::ub";
let hasConstantMaterializer = 1;
let useDefaultAttributePrinterParser = 1;
}
// Base class for UB dialect attributes.
class UB_Attr<string name, string attrMnemonic, list<Trait> traits = []> :
AttrDef<UB_Dialect, name, traits> {
let mnemonic = attrMnemonic;
}
// Base class for UB dialect ops.
class UB_Op<string mnemonic, list<Trait> traits = []> :
Op<UB_Dialect, mnemonic, traits>;
def PoisonAttr : UB_Attr<"Poison", "poison", [PoisonAttrInterface]> {
}
//===----------------------------------------------------------------------===//
// PoisonOp
//===----------------------------------------------------------------------===//
def PoisonOp : UB_Op<"poison", [ConstantLike, Pure]> {
let summary = "Poisoned constant operation.";
let description = [{
The `poison` operation materializes a compile-time poisoned constant value
to indicate deferred undefined behavior.
`value` attribute is needed to indicate an optional additional poison
semantics (e.g. partially poisoned vectors), default value indicates results
is fully poisoned.
Examples:
```
// Short form
%0 = ub.poison : i32
// Long form
%1 = ub.poison <#custom_poison_elements_attr> : vector<4xi64>
```
}];
let arguments = (ins DefaultValuedAttr<PoisonAttrInterface, "{}">:$value);
let results = (outs AnyType:$result);
let assemblyFormat = "attr-dict (`<` $value^ `>`)? `:` type($result)";
let hasFolder = 1;
}
//===----------------------------------------------------------------------===//
// UnreachableOp
//===----------------------------------------------------------------------===//
def UnreachableOp : UB_Op<"unreachable", [Terminator]> {
let summary = "Unreachable operation.";
let description = [{
The `unreachable` operation triggers immediate undefined behavior if
executed.
Example:
```
ub.unreachable
```
}];
let assemblyFormat = "attr-dict";
}
#endif // MLIR_DIALECT_UB_IR_UBOPS_TD