@@ -36,13 +36,17 @@ using namespace P4::P4MLIR;
36
36
static LogicalResult checkConstantTypes (mlir::Operation *op, mlir::Type opType,
37
37
mlir::Attribute attrType) {
38
38
if (mlir::isa<P4HIR::BoolAttr>(attrType)) {
39
+ if (auto aliasedType = mlir::dyn_cast<P4HIR::AliasType>(opType))
40
+ opType = aliasedType.getAliasedType ();
39
41
if (!mlir::isa<P4HIR::BoolType>(opType))
40
42
return op->emitOpError (" result type (" )
41
43
<< opType << " ) must be '!p4hir.bool' for '" << attrType << " '" ;
42
44
return success ();
43
45
}
44
46
45
47
if (mlir::isa<P4HIR::IntAttr>(attrType)) {
48
+ if (auto aliasedType = mlir::dyn_cast<P4HIR::AliasType>(opType))
49
+ opType = aliasedType.getAliasedType ();
46
50
if (!mlir::isa<P4HIR::BitsType, P4HIR::InfIntType>(opType))
47
51
return op->emitOpError (" result type (" )
48
52
<< opType << " ) does not match value type (" << attrType << " )" ;
@@ -2103,6 +2107,11 @@ struct P4HIROpAsmDialectInterface : public OpAsmDialectInterface {
2103
2107
return AliasResult::OverridableAlias;
2104
2108
}
2105
2109
2110
+ if (auto aliasType = mlir::dyn_cast<P4HIR::AliasType>(type)) {
2111
+ os << aliasType.getName ();
2112
+ return AliasResult::OverridableAlias;
2113
+ }
2114
+
2106
2115
if (auto parserType = mlir::dyn_cast<P4HIR::ParserType>(type)) {
2107
2116
os << parserType.getName ();
2108
2117
for (auto typeArg : parserType.getTypeArguments ()) {
@@ -2131,12 +2140,12 @@ struct P4HIROpAsmDialectInterface : public OpAsmDialectInterface {
2131
2140
}
2132
2141
2133
2142
if (auto packageType = mlir::dyn_cast<P4HIR::PackageType>(type)) {
2134
- os << packageType.getName ();
2135
- for (auto typeArg : packageType.getTypeArguments ()) {
2136
- os << " _" ;
2137
- getAlias (typeArg, os);
2138
- }
2139
- return AliasResult::OverridableAlias;
2143
+ os << packageType.getName ();
2144
+ for (auto typeArg : packageType.getTypeArguments ()) {
2145
+ os << " _" ;
2146
+ getAlias (typeArg, os);
2147
+ }
2148
+ return AliasResult::OverridableAlias;
2140
2149
}
2141
2150
2142
2151
if (auto ctorType = mlir::dyn_cast<P4HIR::CtorType>(type)) {
@@ -2151,6 +2160,9 @@ struct P4HIROpAsmDialectInterface : public OpAsmDialectInterface {
2151
2160
AliasResult getAlias (Attribute attr, raw_ostream &os) const final {
2152
2161
if (auto boolAttr = mlir::dyn_cast<P4HIR::BoolAttr>(attr)) {
2153
2162
os << (boolAttr.getValue () ? " true" : " false" );
2163
+ if (auto aliasType = mlir::dyn_cast<P4HIR::AliasType>(boolAttr.getType ()))
2164
+ os << " _" << aliasType.getName ();
2165
+
2154
2166
return AliasResult::FinalAlias;
2155
2167
}
2156
2168
@@ -2160,6 +2172,8 @@ struct P4HIROpAsmDialectInterface : public OpAsmDialectInterface {
2160
2172
os << " _" << bitsType.getAlias ();
2161
2173
else if (auto infintType = mlir::dyn_cast<P4HIR::InfIntType>(intAttr.getType ()))
2162
2174
os << " _" << infintType.getAlias ();
2175
+ else if (auto aliasType = mlir::dyn_cast<P4HIR::AliasType>(intAttr.getType ()))
2176
+ os << " _" << aliasType.getName ();
2163
2177
2164
2178
return AliasResult::FinalAlias;
2165
2179
}
0 commit comments