13#ifndef FORTRAN_OPTIMIZER_DIALECT_FIRATTR_H
14#define FORTRAN_OPTIMIZER_DIALECT_FIRATTR_H
16#include "mlir/IR/BuiltinAttributes.h"
19class DialectAsmParser;
20class DialectAsmPrinter;
28struct RealAttributeStorage;
29struct TypeAttributeStorage;
32using KindTy = unsigned;
35 :
public mlir::Attribute::AttrBase<ExactTypeAttr, mlir::Attribute,
36 detail::TypeAttributeStorage> {
39 using ValueType = mlir::Type;
41 static constexpr llvm::StringLiteral name =
"fir.type_is";
42 static constexpr llvm::StringRef getAttrName() {
return "type_is"; }
45 mlir::Type getType()
const;
49 :
public mlir::Attribute::AttrBase<SubclassAttr, mlir::Attribute,
50 detail::TypeAttributeStorage> {
53 using ValueType = mlir::Type;
55 static constexpr llvm::StringLiteral name =
"fir.class_is";
56 static constexpr llvm::StringRef getAttrName() {
return "class_is"; }
59 mlir::Type getType()
const;
66 using BoolAttr::BoolAttr;
68 static constexpr llvm::StringLiteral name =
"fir.must_be_heap";
69 static constexpr llvm::StringRef getAttrName() {
return "fir.must_be_heap"; }
79 :
public mlir::Attribute::AttrBase<ClosedIntervalAttr, mlir::Attribute,
80 mlir::AttributeStorage> {
84 static constexpr llvm::StringLiteral name =
"fir.interval";
85 static constexpr llvm::StringRef getAttrName() {
return "interval"; }
94 :
public mlir::Attribute::AttrBase<UpperBoundAttr, mlir::Attribute,
95 mlir::AttributeStorage> {
99 static constexpr llvm::StringLiteral name =
"fir.upper";
100 static constexpr llvm::StringRef getAttrName() {
return "upper"; }
109 :
public mlir::Attribute::AttrBase<LowerBoundAttr, mlir::Attribute,
110 mlir::AttributeStorage> {
114 static constexpr llvm::StringLiteral name =
"fir.lower";
115 static constexpr llvm::StringRef getAttrName() {
return "lower"; }
124 :
public mlir::Attribute::AttrBase<PointIntervalAttr, mlir::Attribute,
125 mlir::AttributeStorage> {
129 static constexpr llvm::StringLiteral name =
"fir.point";
130 static constexpr llvm::StringRef getAttrName() {
return "point"; }
139 :
public mlir::Attribute::AttrBase<RealAttr, mlir::Attribute,
140 detail::RealAttributeStorage> {
143 using ValueType = std::pair<int, llvm::APFloat>;
145 static constexpr llvm::StringLiteral name =
"fir.real";
146 static constexpr llvm::StringRef getAttrName() {
return "real"; }
147 static RealAttr get(mlir::MLIRContext *ctxt,
const ValueType &key);
149 KindTy getFKind()
const;
150 llvm::APFloat getValue()
const;
153mlir::Attribute parseFirAttribute(FIROpsDialect *dialect,
154 mlir::DialectAsmParser &parser,
157void printFirAttribute(FIROpsDialect *dialect, mlir::Attribute attr,
158 mlir::DialectAsmPrinter &p);
162#include "flang/Optimizer/Dialect/FIREnumAttr.h.inc"
164#define GET_ATTRDEF_CLASSES
165#include "flang/Optimizer/Dialect/FIRAttr.h.inc"
Definition: FIRAttr.h:110
Definition: FIRAttr.h:125
Definition: FIRAttr.h:140
Definition: AbstractConverter.h:31
Definition: AbstractConverter.h:27