In several cases, operation result types can be unambiguously inferred from operands and attributes at operation construction time. Stop requiring the user to provide these types as arguments in the ODS-generated constructors in Python bindings. In particular, handle the SameOperandAndResultTypes and FirstAttrDerivedResultType traits as well as InferTypeOpInterface using the recently added interface support. This is a significant usability improvement for IR construction, similar to what C++ ODS provides. Depends On D111656 Reviewed By: gysit Differential Revision: https://reviews.llvm.org/D111811
27 lines
673 B
Python
27 lines
673 B
Python
# RUN: %PYTHON %s | FileCheck %s
|
|
|
|
from mlir.ir import *
|
|
import mlir.dialects.builtin as builtin
|
|
import mlir.dialects.math as mlir_math
|
|
|
|
def run(f):
|
|
print("\nTEST:", f.__name__)
|
|
f()
|
|
|
|
# CHECK-LABEL: TEST: testMathOps
|
|
@run
|
|
def testMathOps():
|
|
with Context() as ctx, Location.unknown():
|
|
module = Module.create()
|
|
with InsertionPoint(module.body):
|
|
@builtin.FuncOp.from_py_func(F32Type.get())
|
|
def emit_sqrt(arg):
|
|
return mlir_math.SqrtOp(arg)
|
|
|
|
# CHECK-LABEL: func @emit_sqrt(
|
|
# CHECK-SAME: %[[ARG:.*]]: f32) {
|
|
# CHECK: math.sqrt %[[ARG]] : f32
|
|
# CHECK: return
|
|
# CHECK: }
|
|
print(module)
|