Skip to content

Commit 4c8efa9

Browse files
OM support float and bool property (#4590)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 761366b commit 4c8efa9

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

circtpanamabinding/includeFunctions.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ mlirModuleGetOperation
2121
mlirOperationStateGet
2222
mlirNamedAttributeGet
2323
mlirAttributeIsAInteger
24+
mlirAttributeIsAFloat
25+
mlirAttributeIsABool
2426
mlirAttributeIsAString
2527
mlirIntegerAttrGet
2628
mlirIntegerAttrGetValueInt
2729
mlirIntegerAttrGetValueSInt
2830
mlirIntegerAttrGetValueUInt
2931
mlirFloatAttrDoubleGet
32+
mlirFloatAttrGetValueDouble
3033
mlirBoolAttrGet
34+
mlirBoolAttrGetValue
3135
mlirStringAttrGet
3236
mlirStringAttrGetValue
3337
mlirArrayAttrGet

lit/tests/Property/Good.sc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ class PropertyTest extends Module {
6262
// SFT-FIRRTL-NEXT: propassign b, List<List<Integer>>(List<Integer>(Integer(456)))
6363
a := Property(Seq[Seq[Int]](Seq(123)))
6464
b := Property(Seq[Seq[Int]](Seq(456)))
65+
66+
// SFC-FIRRTL: output f : Double
67+
// SFC-FIRRTL: output bool : Bool
68+
val f = IO(Output(Property[Double]()))
69+
val bool = IO(Output(Property[Boolean]()))
70+
// SFC-FIRRTL: propassign f, Double(1.23)
71+
// SFC-FIRRTL: propassign bool, Bool(true)
72+
f := Property(1.23)
73+
bool := Property(true)
6574
}
6675

6776
args.head match {
@@ -78,6 +87,8 @@ args.head match {
7887

7988
// CHECK-NEXT: .a => { [ [ 123 ] ] }
8089
// CHECK-NEXT: .b => { [ [ 456 ] ] }
90+
// CHECK-NEXT: .bool => { true }
91+
// CHECK-NEXT: .f => { 1.23 }
8192
// CHECK-NEXT: .p => { OMReferenceTarget:~PropertyTest|PropertyTest>i }
8293
obj.foreachField((name, value) => println(s".$name => { ${value.toString} }"))
8394

panamalib/src/PanamaCIRCT.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,8 @@ class PanamaCIRCT {
211211

212212
def mlirBoolAttrGet(value: Boolean) = MlirAttribute(CAPI.mlirBoolAttrGet(arena, mlirCtx, if (value) 1 else 0))
213213

214+
def mlirBoolAttrGetValue(attr: MlirAttribute): Boolean = CAPI.mlirBoolAttrGetValue(attr.get)
215+
214216
def mlirStringAttrGet(string: String) = MlirAttribute(CAPI.mlirStringAttrGet(arena, mlirCtx, newString(string).get))
215217

216218
def mlirStringAttrGetValue(attr: MlirAttribute): String = {
@@ -220,6 +222,10 @@ class PanamaCIRCT {
220222

221223
def mlirAttributeIsAInteger(attr: MlirAttribute): Boolean = CAPI.mlirAttributeIsAInteger(attr.get)
222224

225+
def mlirAttributeIsAFloat(attr: MlirAttribute): Boolean = CAPI.mlirAttributeIsAFloat(attr.get)
226+
227+
def mlirAttributeIsABool(attr: MlirAttribute): Boolean = CAPI.mlirAttributeIsABool(attr.get)
228+
223229
def mlirAttributeIsAString(attr: MlirAttribute): Boolean = CAPI.mlirAttributeIsAString(attr.get)
224230

225231
def mlirIntegerAttrGet(tpe: MlirType, value: Long) = MlirAttribute(CAPI.mlirIntegerAttrGet(arena, tpe.get, value))
@@ -234,6 +240,8 @@ class PanamaCIRCT {
234240
CAPI.mlirFloatAttrDoubleGet(arena, mlirCtx, tpe.get, value)
235241
)
236242

243+
def mlirFloatAttrGetValueDouble(attr: MlirAttribute): Double = CAPI.mlirFloatAttrGetValueDouble(attr.get)
244+
237245
def mlirFlatSymbolRefAttrGet(symbol: String) = MlirAttribute(
238246
CAPI.mlirFlatSymbolRefAttrGet(arena, mlirCtx, newString(symbol).get)
239247
)

panamaom/src/PanamaCIRCTOM.scala

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,27 @@ abstract class PanamaCIRCTOMEvaluatorValue {
7474
}
7575
def int: PanamaCIRCTOMEvaluatorValuePrimitiveInteger = intOpt.get
7676

77+
def floatOpt: Option[PanamaCIRCTOMEvaluatorValuePrimitiveFloat] =
78+
this match {
79+
case float: PanamaCIRCTOMEvaluatorValuePrimitiveFloat => Some(float)
80+
case _ => None
81+
}
82+
def float: PanamaCIRCTOMEvaluatorValuePrimitiveFloat = floatOpt.get
83+
7784
def stringOpt: Option[PanamaCIRCTOMEvaluatorValuePrimitiveString] =
7885
this match {
7986
case string: PanamaCIRCTOMEvaluatorValuePrimitiveString => Some(string)
8087
case _ => None
8188
}
8289
def string: PanamaCIRCTOMEvaluatorValuePrimitiveString = stringOpt.get
8390

91+
def boolOpt: Option[PanamaCIRCTOMEvaluatorValuePrimitiveBool] =
92+
this match {
93+
case bool: PanamaCIRCTOMEvaluatorValuePrimitiveBool => Some(bool)
94+
case _ => None
95+
}
96+
def bool: PanamaCIRCTOMEvaluatorValuePrimitiveBool = boolOpt.get
97+
8498
def tupleOpt: Option[PanamaCIRCTOMEvaluatorValueTuple] =
8599
this match {
86100
case tuple: PanamaCIRCTOMEvaluatorValueTuple => Some(tuple)
@@ -169,8 +183,12 @@ object PanamaCIRCTOMEvaluatorValuePrimitive {
169183

170184
if (circt.omAttrIsAIntegerAttr(primitive)) {
171185
new PanamaCIRCTOMEvaluatorValuePrimitiveInteger(circt, value, circt.omIntegerAttrGetInt(primitive))
186+
} else if (circt.mlirAttributeIsAFloat(primitive)) {
187+
new PanamaCIRCTOMEvaluatorValuePrimitiveFloat(circt, value, primitive)
172188
} else if (circt.mlirAttributeIsAString(primitive)) {
173189
new PanamaCIRCTOMEvaluatorValuePrimitiveString(circt, value, primitive)
190+
} else if (circt.mlirAttributeIsABool(primitive)) {
191+
new PanamaCIRCTOMEvaluatorValuePrimitiveBool(circt, value, primitive)
174192
} else {
175193
circt.mlirAttributeDump(primitive)
176194
throw new Exception("unknown OMEvaluatorValuePrimitive attribute, dumped")
@@ -180,7 +198,9 @@ object PanamaCIRCTOMEvaluatorValuePrimitive {
180198
abstract class PanamaCIRCTOMEvaluatorValuePrimitive extends PanamaCIRCTOMEvaluatorValue {
181199
override def toString: String = this match {
182200
case v: PanamaCIRCTOMEvaluatorValuePrimitiveInteger => v.toString
201+
case v: PanamaCIRCTOMEvaluatorValuePrimitiveFloat => v.toString
183202
case v: PanamaCIRCTOMEvaluatorValuePrimitiveString => v.toString
203+
case v: PanamaCIRCTOMEvaluatorValuePrimitiveBool => v.toString
184204
}
185205
}
186206

@@ -193,6 +213,15 @@ class PanamaCIRCTOMEvaluatorValuePrimitiveInteger private[chisel3] (
193213
override def toString: String = integer.toString
194214
}
195215

216+
class PanamaCIRCTOMEvaluatorValuePrimitiveFloat private[chisel3] (
217+
val circt: PanamaCIRCT,
218+
val value: OMEvaluatorValue,
219+
val primitive: MlirAttribute)
220+
extends PanamaCIRCTOMEvaluatorValuePrimitive {
221+
val double: Double = circt.mlirFloatAttrGetValueDouble(primitive)
222+
override def toString: String = double.toString
223+
}
224+
196225
class PanamaCIRCTOMEvaluatorValuePrimitiveString private[chisel3] (
197226
val circt: PanamaCIRCT,
198227
val value: OMEvaluatorValue,
@@ -201,6 +230,15 @@ class PanamaCIRCTOMEvaluatorValuePrimitiveString private[chisel3] (
201230
override def toString: String = circt.mlirStringAttrGetValue(primitive)
202231
}
203232

233+
class PanamaCIRCTOMEvaluatorValuePrimitiveBool private[chisel3] (
234+
val circt: PanamaCIRCT,
235+
val value: OMEvaluatorValue,
236+
val primitive: MlirAttribute)
237+
extends PanamaCIRCTOMEvaluatorValuePrimitive {
238+
val boolean: Boolean = circt.mlirBoolAttrGetValue(primitive)
239+
override def toString: String = boolean.toString
240+
}
241+
204242
class PanamaCIRCTOMEvaluatorValueObject private[chisel3] (val circt: PanamaCIRCT, val value: OMEvaluatorValue)
205243
extends PanamaCIRCTOMEvaluatorValue {
206244
def apply(name: String): PanamaCIRCTOMEvaluatorValue = field(name)

0 commit comments

Comments
 (0)