1487{
1491 int nLearnedOld = veci_size(&s->
act_clas);
1492 int * act_clas = veci_begin(&s->
act_clas);
1493 int * pPerm, * pArray, * pSortValues, nCutoffValue;
1494 int i, k, j, Id, Counter, CounterStart, nSelected;
1496
1498 assert( nLearnedOld == Sat_MemEntryNum(pMem, 1) );
1500
1502
1503
1505
1506
1507
1508 pSortValues =
ABC_ALLOC(
int, nLearnedOld );
1510 {
1511 Id = clause_id(c);
1512
1514 pSortValues[Id] = ((7 - Abc_MinInt(c->
lbd, 7)) << 28) | (act_clas[Id] >> 4);
1515 else
1516 pSortValues[Id] = ((7 - Abc_MinInt(c->
lbd, 7)) << 28);
1517 assert( pSortValues[Id] >= 0 );
1518 }
1519
1520
1521 CounterStart = nLearnedOld - (s->
nLearntMax / 20);
1522
1523
1525
1526
1528 assert( pSortValues[pPerm[0]] <= pSortValues[pPerm[nLearnedOld-1]] );
1529 nCutoffValue = pSortValues[pPerm[nLearnedOld-nSelected]];
1531
1532
1533
1534 Counter = j = 0;
1536 {
1538 if ( Counter++ > CounterStart || clause_size(c) < 3 || pSortValues[clause_id(c)] > nCutoffValue || s->
reasons[lit_var(c->
lits[0])] == Sat_MemHand(pMem, i, k) )
1539 act_clas[j++] = act_clas[clause_id(c)];
1540 else
1541 {
1542 c->mark = 1;
1545 }
1546 }
1548 assert( Counter == nLearnedOld );
1551
1552
1553 Counter = Sat_MemCompactLearned( pMem, 0 );
1555
1556
1557 for ( i = 0; i < s->
size; i++ )
1558 {
1560 continue;
1561 if ( clause_is_lit(s->
reasons[i]) )
1562 continue;
1563 if ( !clause_learnt_h(pMem, s->
reasons[i]) )
1564 continue;
1565 c = clause_read( s, s->
reasons[i] );
1568 }
1569
1570
1571 for ( i = 0; i < s->
size*2; i++ )
1572 {
1573 pArray = veci_begin(&s->
wlists[i]);
1574 for ( j = k = 0; k < veci_size(&s->
wlists[i]); k++ )
1575 {
1576 if ( clause_is_lit(pArray[k]) )
1577 pArray[j++] = pArray[k];
1578 else if ( !clause_learnt_h(pMem, pArray[k]) )
1579 pArray[j++] = pArray[k];
1580 else
1581 {
1582 c = clause_read(s, pArray[k]);
1583 if ( !c->mark )
1584 pArray[j++] = clause_id(c);
1585 }
1586 }
1587 veci_resize(&s->
wlists[i],j);
1588 }
1589
1590
1591 Counter = Sat_MemCompactLearned( pMem, 1 );
1593
1594
1595 TimeTotal += Abc_Clock() - clk;
1597 {
1598 Abc_Print(1, "reduceDB: Keeping %7d out of %7d clauses (%5.2f %%) ",
1600 Abc_PrintTime( 1, "Time", TimeTotal );
1601 }
1602}
int * Abc_MergeSortCost(int *pCosts, int nSize)
#define ABC_ALLOC(type, num)
#define Sat_MemForEachLearned(p, c, i, k)
struct Sat_Mem_t_ Sat_Mem_t