| # RUN: %PYTHON %s | FileCheck %s |
| |
| from mlir.dialects import smt, arith |
| from mlir.ir import Context, Location, Module, InsertionPoint, F32Type |
| |
| |
| def run(f): |
| print("\nTEST:", f.__name__) |
| with Context(), Location.unknown(): |
| module = Module.create() |
| with InsertionPoint(module.body): |
| f(module) |
| print(module) |
| assert module.operation.verify() |
| |
| |
| # CHECK-LABEL: TEST: test_smoke |
| @run |
| def test_smoke(_module): |
| true = smt.constant(True) |
| false = smt.constant(False) |
| # CHECK: smt.constant true |
| # CHECK: smt.constant false |
| |
| |
| # CHECK-LABEL: TEST: test_types |
| @run |
| def test_types(_module): |
| bool_t = smt.bool_t() |
| bitvector_t = smt.bv_t(5) |
| # CHECK: !smt.bool |
| print(bool_t) |
| # CHECK: !smt.bv<5> |
| print(bitvector_t) |
| |
| |
| # CHECK-LABEL: TEST: test_solver_op |
| @run |
| def test_solver_op(_module): |
| @smt.solver |
| def foo1(): |
| true = smt.constant(True) |
| false = smt.constant(False) |
| |
| # CHECK: smt.solver() : () -> () { |
| # CHECK: %true = smt.constant true |
| # CHECK: %false = smt.constant false |
| # CHECK: } |
| |
| f32 = F32Type.get() |
| |
| @smt.solver(results=[f32]) |
| def foo2(): |
| return arith.ConstantOp(f32, 1.0) |
| |
| # CHECK: %{{.*}} = smt.solver() : () -> f32 { |
| # CHECK: %[[CST1:.*]] = arith.constant 1.000000e+00 : f32 |
| # CHECK: smt.yield %[[CST1]] : f32 |
| # CHECK: } |
| |
| two = arith.ConstantOp(f32, 2.0) |
| # CHECK: %[[CST2:.*]] = arith.constant 2.000000e+00 : f32 |
| print(two) |
| |
| @smt.solver(inputs=[two], results=[f32]) |
| def foo3(z: f32): |
| return z |
| |
| # CHECK: %{{.*}} = smt.solver(%[[CST2]]) : (f32) -> f32 { |
| # CHECK: ^bb0(%[[ARG0:.*]]: f32): |
| # CHECK: smt.yield %[[ARG0]] : f32 |
| # CHECK: } |
| |
| |
| # CHECK-LABEL: TEST: test_export_smtlib |
| @run |
| def test_export_smtlib(module): |
| @smt.solver |
| def foo1(): |
| true = smt.constant(True) |
| smt.assert_(true) |
| |
| query = smt.export_smtlib(module.operation) |
| # CHECK: ; solver scope 0 |
| # CHECK: (assert true) |
| # CHECK: (reset) |
| print(query) |