[Mlir-commits] [mlir] [mlir][SMT] add missing ExportSMTLIB tests (PR #136069)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Apr 16 18:27:36 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
Author: Maksim Levental (makslevental)
<details>
<summary>Changes</summary>
Whoops forgot these -export-smtlib tests.
---
Full diff: https://github.com/llvm/llvm-project/pull/136069.diff
2 Files Affected:
- (added) mlir/test/Target/ExportSMTLIB/attributes.mlir (+143)
- (added) mlir/test/Target/ExportSMTLIB/basic.mlir (+191)
``````````diff
diff --git a/mlir/test/Target/ExportSMTLIB/attributes.mlir b/mlir/test/Target/ExportSMTLIB/attributes.mlir
new file mode 100644
index 0000000000000..05e8d04803e28
--- /dev/null
+++ b/mlir/test/Target/ExportSMTLIB/attributes.mlir
@@ -0,0 +1,143 @@
+// RUN: mlir-translate --export-smtlib %s > %t && z3 %t 2>&1 | FileCheck %s
+// RUN: mlir-translate --export-smtlib --smtlibexport-inline-single-use-values %s > %t && z3 %t 2>&1 | FileCheck %s
+// REQUIRES: z3
+
+// Quantifiers Attributes
+smt.solver () : () -> () {
+
+ %true = smt.constant true
+
+ %7 = smt.exists weight 2 {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %arg3 : !smt.int
+ %5 = smt.implies %4, %true
+ smt.yield %5 : !smt.bool
+ }
+ smt.assert %7
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Quantifiers Attributes
+smt.solver () : () -> () {
+
+ %true = smt.constant true
+
+ %7 = smt.exists weight 2 {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %arg3 : !smt.int
+ %5 = smt.implies %4, %true
+ smt.yield %5 : !smt.bool
+ } patterns {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %arg3 : !smt.int
+ smt.yield %4: !smt.bool
+ }
+ smt.assert %7
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Quantifiers Attributes
+smt.solver () : () -> () {
+
+ %true = smt.constant true
+
+ %7 = smt.exists {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %arg3 : !smt.int
+ %5 = smt.implies %4, %true
+ smt.yield %5 : !smt.bool
+ } patterns {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %arg3 : !smt.int
+ smt.yield %4: !smt.bool
+ }
+ smt.assert %7
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+smt.solver () : () -> () {
+
+ %true = smt.constant true
+ %three = smt.int.constant 3
+ %four = smt.int.constant 4
+
+ %7 = smt.exists {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %three: !smt.int
+ %5 = smt.eq %arg3, %four: !smt.int
+ %6 = smt.eq %4, %5: !smt.bool
+ smt.yield %6 : !smt.bool
+ } patterns {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %three: !smt.int
+ smt.yield %4: !smt.bool}, {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %5 = smt.eq %arg3, %four: !smt.int
+ smt.yield %5: !smt.bool
+ }
+ smt.assert %7
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+smt.solver () : () -> () {
+
+ %true = smt.constant true
+ %three = smt.int.constant 3
+ %four = smt.int.constant 4
+
+ %10 = smt.exists {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %three: !smt.int
+ %5 = smt.eq %arg3, %four: !smt.int
+ %9 = smt.eq %4, %5: !smt.bool
+ smt.yield %9 : !smt.bool
+ } patterns {
+ ^bb0(%arg2: !smt.int, %arg3: !smt.int):
+ %4 = smt.eq %arg2, %three: !smt.int
+ %5 = smt.eq %arg3, %four: !smt.int
+ smt.yield %4, %5: !smt.bool, !smt.bool
+ }
+ smt.assert %10
+
+ smt.check sat {} unknown {} unsat {}
+
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
diff --git a/mlir/test/Target/ExportSMTLIB/basic.mlir b/mlir/test/Target/ExportSMTLIB/basic.mlir
new file mode 100644
index 0000000000000..2dc090bbb1051
--- /dev/null
+++ b/mlir/test/Target/ExportSMTLIB/basic.mlir
@@ -0,0 +1,191 @@
+// RUN: mlir-translate --export-smtlib %s > %t && z3 %t 2>&1 | FileCheck %s
+// RUN: mlir-translate --export-smtlib --smtlibexport-inline-single-use-values %s > %t && z3 %t 2>&1 | FileCheck %s
+// REQUIRES: z3
+
+// Function and constant symbol declarations, uninterpreted sorts
+smt.solver () : () -> () {
+ %0 = smt.declare_fun "b" : !smt.bv<32>
+ %1 = smt.declare_fun : !smt.int
+ %2 = smt.declare_fun : !smt.func<(!smt.int, !smt.bv<32>) !smt.bool>
+ %3 = smt.apply_func %2(%1, %0) : !smt.func<(!smt.int, !smt.bv<32>) !smt.bool>
+ smt.assert %3
+
+ %4 = smt.declare_fun : !smt.sort<"uninterpreted">
+ %5 = smt.declare_fun : !smt.sort<"other"[!smt.sort<"uninterpreted">]>
+ %6 = smt.declare_fun : !smt.func<(!smt.sort<"other"[!smt.sort<"uninterpreted">]>, !smt.sort<"uninterpreted">) !smt.bool>
+ %7 = smt.apply_func %6(%5, %4) : !smt.func<(!smt.sort<"other"[!smt.sort<"uninterpreted">]>, !smt.sort<"uninterpreted">) !smt.bool>
+ smt.assert %7
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Big expression
+smt.solver () : () -> () {
+ %true = smt.constant true
+ %false = smt.constant false
+ %0 = smt.not %true
+ %1 = smt.and %0, %true, %false
+ %2 = smt.or %1, %0, %true
+ %3 = smt.xor %0, %2
+ %4 = smt.implies %3, %false
+ %5 = smt.implies %4, %true
+ smt.assert %5
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Constant array
+smt.solver () : () -> () {
+ %true = smt.constant true
+ %false = smt.constant false
+ %c = smt.int.constant 0
+ %0 = smt.array.broadcast %true : !smt.array<[!smt.int -> !smt.bool]>
+ %1 = smt.array.store %0[%c], %false : !smt.array<[!smt.int -> !smt.bool]>
+ %2 = smt.array.select %1[%c] : !smt.array<[!smt.int -> !smt.bool]>
+ smt.assert %2
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK: unsat
+
+// BitVector extract and concat, and constants
+smt.solver () : () -> () {
+ %xf = smt.bv.constant #smt.bv<0xf> : !smt.bv<4>
+ %x0 = smt.bv.constant #smt.bv<0> : !smt.bv<4>
+ %xff = smt.bv.constant #smt.bv<0xff> : !smt.bv<8>
+
+ %0 = smt.bv.concat %xf, %x0 : !smt.bv<4>, !smt.bv<4>
+ %1 = smt.bv.extract %0 from 4 : (!smt.bv<8>) -> !smt.bv<4>
+ %2 = smt.bv.repeat 2 times %1 : !smt.bv<4>
+ %3 = smt.eq %2, %xff : !smt.bv<8>
+ smt.assert %3
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Quantifiers
+smt.solver () : () -> () {
+ %1 = smt.forall ["a"] {
+ ^bb0(%arg2: !smt.int):
+ %c2_1 = smt.int.constant 2
+ %2 = smt.int.mul %arg2, %c2_1
+
+ %3 = smt.exists {
+ ^bb0(%arg1: !smt.int):
+ %c2 = smt.int.constant 2
+ %4 = smt.int.mul %c2, %arg1
+ %5 = smt.eq %4, %2 : !smt.int
+ smt.yield %5 : !smt.bool
+ }
+
+ smt.yield %3 : !smt.bool
+ }
+ smt.assert %1
+
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Push and pop
+smt.solver () : () -> () {
+ %three = smt.int.constant 3
+ %four = smt.int.constant 4
+ %unsat_eq = smt.eq %three, %four : !smt.int
+ %sat_eq = smt.eq %three, %three : !smt.int
+
+ smt.push 1
+ smt.assert %unsat_eq
+ smt.check sat {} unknown {} unsat {}
+ smt.pop 1
+ smt.assert %sat_eq
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: sat
+// CHECK: unsat
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+// Reset
+smt.solver () : () -> () {
+ %three = smt.int.constant 3
+ %four = smt.int.constant 4
+ %unsat_eq = smt.eq %three, %four : !smt.int
+ %sat_eq = smt.eq %three, %three : !smt.int
+
+ smt.assert %unsat_eq
+ smt.check sat {} unknown {} unsat {}
+ smt.reset
+ smt.assert %sat_eq
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: sat
+// CHECK: unsat
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK: sat
+
+smt.solver () : () -> () {
+ smt.set_logic "HORN"
+ %c = smt.declare_fun : !smt.int
+ %c4 = smt.int.constant 4
+ %eq = smt.eq %c, %c4 : !smt.int
+ smt.assert %eq
+ smt.check sat {} unknown {} unsat {}
+}
+
+// CHECK-NOT: WARNING
+// CHECK-NOT: warning
+// CHECK-NOT: ERROR
+// CHECK-NOT: error
+// CHECK-NOT: unsat
+// CHECK-NOT: sat
+// CHECK: unknown
``````````
</details>
https://github.com/llvm/llvm-project/pull/136069
More information about the Mlir-commits
mailing list