71 lines
2.3 KiB
TableGen
71 lines
2.3 KiB
TableGen
//===- ComplexAttributes.td - Definitions for complex attributes -*- 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 COMPLEX_ATTRIBUTE
|
|
#define COMPLEX_ATTRIBUTE
|
|
|
|
include "mlir/IR/AttrTypeBase.td"
|
|
include "mlir/IR/BuiltinAttributeInterfaces.td"
|
|
include "mlir/Dialect/Complex/IR/ComplexBase.td"
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Complex Attributes.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
class Complex_Attr<string attrName, string attrMnemonic,
|
|
list<Trait> traits = []>
|
|
: AttrDef<Complex_Dialect, attrName, traits> {
|
|
let mnemonic = attrMnemonic;
|
|
}
|
|
|
|
def Complex_NumberAttr : Complex_Attr<"Number", "number",
|
|
[TypedAttrInterface]> {
|
|
let summary = "A complex number attribute";
|
|
|
|
let description = [{
|
|
A complex number attribute.
|
|
|
|
Example:
|
|
|
|
```mlir
|
|
#complex.number<:f64 1.0, 2.0>
|
|
```
|
|
}];
|
|
|
|
let parameters = (ins APFloatParameter<"">:$real,
|
|
APFloatParameter<"">:$imag,
|
|
AttributeSelfTypeParameter<"">:$type);
|
|
let builders = [
|
|
AttrBuilderWithInferredContext<(ins "mlir::ComplexType":$type,
|
|
"double":$real,
|
|
"double":$imag), [{
|
|
auto elementType = ::llvm::cast<FloatType>(type.getElementType());
|
|
APFloat realFloat(real);
|
|
bool unused;
|
|
realFloat.convert(elementType.getFloatSemantics(),
|
|
APFloat::rmNearestTiesToEven, &unused);
|
|
APFloat imagFloat(imag);
|
|
imagFloat.convert(elementType.getFloatSemantics(),
|
|
APFloat::rmNearestTiesToEven, &unused);
|
|
return $_get(type.getContext(), realFloat, imagFloat, type);
|
|
}]>
|
|
];
|
|
|
|
let extraClassDeclaration = [{
|
|
mlir::Complex<APFloat> getValue() {
|
|
return mlir::Complex<APFloat>(getReal(), getImag());
|
|
}
|
|
}];
|
|
|
|
let genVerifyDecl = 1;
|
|
let hasCustomAssemblyFormat = 1;
|
|
let skipDefaultBuilders = 1;
|
|
}
|
|
|
|
#endif // COMPLEX_ATTRIBUTE
|