@@ -1704,8 +1704,7 @@ br_status seq_rewriter::mk_re_concat(expr* a, expr* b, expr_ref& result) {
1704
1704
}
1705
1705
unsigned lo1, hi1, lo2, hi2;
1706
1706
1707
- if (m_util.re .is_loop (a, a1, lo1, hi1) && m_util.re .is_loop (b, b1, lo2, hi2) && a1 == b1) {
1708
- SASSERT (lo1 <= hi1 && lo2 <= hi2);
1707
+ if (m_util.re .is_loop (a, a1, lo1, hi1) && lo1 <= hi1 && m_util.re .is_loop (b, b1, lo2, hi2) && lo2 <= hi2 && a1 == b1) {
1709
1708
result = m_util.re .mk_loop (a1, lo1 + lo2, hi1 + hi2);
1710
1709
return BR_DONE;
1711
1710
}
@@ -1715,8 +1714,7 @@ br_status seq_rewriter::mk_re_concat(expr* a, expr* b, expr_ref& result) {
1715
1714
}
1716
1715
for (unsigned i = 0 ; i < 2 ; ++i) {
1717
1716
// (loop a lo1) + (loop a lo2 hi2) = (loop a lo1 + lo2)
1718
- if (m_util.re .is_loop (a, a1, lo1) && m_util.re .is_loop (b, b1, lo2, hi2) && a1 == b1) {
1719
- SASSERT (lo2 <= hi2);
1717
+ if (m_util.re .is_loop (a, a1, lo1) && m_util.re .is_loop (b, b1, lo2, hi2) && lo2 <= hi2 && a1 == b1) {
1720
1718
result = m_util.re .mk_loop (a1, lo1 + lo2);
1721
1719
return BR_DONE;
1722
1720
}
@@ -1731,8 +1729,7 @@ br_status seq_rewriter::mk_re_concat(expr* a, expr* b, expr_ref& result) {
1731
1729
return BR_DONE;
1732
1730
}
1733
1731
// (loop a lo1 hi1) + a = (loop a lo1+1 hi1+1)
1734
- if (m_util.re .is_loop (a, a1, lo1, hi1) && a1 == b) {
1735
- SASSERT (lo1 <= hi1);
1732
+ if (m_util.re .is_loop (a, a1, lo1, hi1) && lo1 <= hi1 && a1 == b) {
1736
1733
result = m_util.re .mk_loop (a1, lo1+1 , hi1+1 );
1737
1734
return BR_DONE;
1738
1735
}
@@ -1848,7 +1845,7 @@ br_status seq_rewriter::mk_re_loop(func_decl* f, unsigned num_args, expr* const*
1848
1845
lo2 = np > 0 ? f->get_parameter (0 ).get_int () : 0 ;
1849
1846
hi2 = np > 1 ? f->get_parameter (1 ).get_int () : 0 ;
1850
1847
if (np == 2 && lo2 > hi2) {
1851
- result = m_util.re .mk_loop (args[0 ], hi2, hi2 );
1848
+ result = m_util.re .mk_loop (args[0 ], lo2, lo2 );
1852
1849
return BR_REWRITE1;
1853
1850
}
1854
1851
// (loop (loop a lo) lo2) = (loop lo*lo2)
0 commit comments