Skip to content

Commit c606fef

Browse files
HarmonyHuftynse
authored andcommitted
[MLIR][python bindings] Add more basic AttrBuilder for _ops_gen.py files
Add more attribute builders, such as "F32Attr", "F64Attr" and "F64ArrayAttr", which are useful to create operations by python bindings. For example, tosa.clamp in _tosa_ops_gen.py need 'F32Attr'. Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D150757
1 parent 39cc774 commit c606fef

File tree

3 files changed

+74
-1
lines changed

3 files changed

+74
-1
lines changed

mlir/python/mlir/ir.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def _indexAttr(x, context):
2727

2828

2929
@register_attribute_builder("I16Attr")
30-
def _i32Attr(x, context):
30+
def _i16Attr(x, context):
3131
return IntegerAttr.get(IntegerType.get_signless(16, context=context), x)
3232

3333

@@ -41,6 +41,26 @@ def _i64Attr(x, context):
4141
return IntegerAttr.get(IntegerType.get_signless(64, context=context), x)
4242

4343

44+
@register_attribute_builder("SI16Attr")
45+
def _si16Attr(x, context):
46+
return IntegerAttr.get(IntegerType.get_signed(16, context=context), x)
47+
48+
49+
@register_attribute_builder("SI32Attr")
50+
def _si32Attr(x, context):
51+
return IntegerAttr.get(IntegerType.get_signed(32, context=context), x)
52+
53+
54+
@register_attribute_builder("F32Attr")
55+
def _f32Attr(x, context):
56+
return FloatAttr.get_f32(x, context=context)
57+
58+
59+
@register_attribute_builder("F64Attr")
60+
def _f64Attr(x, context):
61+
return FloatAttr.get_f64(x, context=context)
62+
63+
4464
@register_attribute_builder("StrAttr")
4565
def _stringAttr(x, context):
4666
return StringAttr.get(x, context=context)
@@ -61,11 +81,26 @@ def _arrayAttr(x, context):
6181
return ArrayAttr.get(x, context=context)
6282

6383

84+
@register_attribute_builder("I32ArrayAttr")
85+
def _i32ArrayAttr(x, context):
86+
return ArrayAttr.get([_i32Attr(v, context) for v in x])
87+
88+
6489
@register_attribute_builder("I64ArrayAttr")
6590
def _i64ArrayAttr(x, context):
6691
return ArrayAttr.get([_i64Attr(v, context) for v in x])
6792

6893

94+
@register_attribute_builder("F32ArrayAttr")
95+
def _f32ArrayAttr(x, context):
96+
return ArrayAttr.get([_f32Attr(v, context) for v in x])
97+
98+
99+
@register_attribute_builder("F64ArrayAttr")
100+
def _f64ArrayAttr(x, context):
101+
return ArrayAttr.get([_f64Attr(v, context) for v in x])
102+
103+
69104
@register_attribute_builder("DenseI64ArrayAttr")
70105
def _denseI64ArrayAttr(x, context):
71106
return DenseI64ArrayAttr.get(x, context=context)

mlir/test/python/dialects/python_test.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,27 @@ def testAttributes():
131131
del op.unit
132132
print(f"Unit: {op.unit}")
133133

134+
# CHECK-LABEL: TEST: attrBuilder
135+
@run
136+
def attrBuilder():
137+
with Context() as ctx, Location.unknown():
138+
ctx.allow_unregistered_dialects = True
139+
op = test.AttributesOp(x_bool=True,
140+
x_i16=1,
141+
x_i32=2,
142+
x_i64=3,
143+
x_si16=-1,
144+
x_si32=-2,
145+
x_f32=1.5,
146+
x_f64=2.5,
147+
x_str='x_str',
148+
x_i32_array=[1, 2, 3],
149+
x_i64_array=[4, 5, 6],
150+
x_f32_array=[1.5, -2.5, 3.5],
151+
x_f64_array=[4.5, 5.5, -6.5],
152+
x_i64_dense=[1, 2, 3, 4, 5, 6])
153+
print(op)
154+
134155

135156
# CHECK-LABEL: TEST: inferReturnTypes
136157
@run

mlir/test/python/python_test_ops.td

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,23 @@ def AttributedOp : TestOp<"attributed_op"> {
5757
UnitAttr:$unit);
5858
}
5959

60+
def AttributesOp : TestOp<"attributes_op"> {
61+
let arguments = (ins BoolAttr:$x_bool,
62+
I16Attr: $x_i16,
63+
I32Attr: $x_i32,
64+
I64Attr: $x_i64,
65+
SI16Attr: $x_si16,
66+
SI32Attr: $x_si32,
67+
F32Attr: $x_f32,
68+
F64Attr: $x_f64,
69+
StrAttr: $x_str,
70+
I32ArrayAttr: $x_i32_array,
71+
I64ArrayAttr: $x_i64_array,
72+
F32ArrayAttr: $x_f32_array,
73+
F64ArrayAttr: $x_f64_array,
74+
DenseI64ArrayAttr: $x_i64_dense);
75+
}
76+
6077
def PropertyOp : TestOp<"property_op"> {
6178
let arguments = (ins I32Attr:$property,
6279
I32:$idx);

0 commit comments

Comments
 (0)