summaryrefslogtreecommitdiffstats
path: root/src/proof/pdr/pdrIncr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/proof/pdr/pdrIncr.c')
-rw-r--r--src/proof/pdr/pdrIncr.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/proof/pdr/pdrIncr.c b/src/proof/pdr/pdrIncr.c
index 3fcd3d31..8ca8e29e 100644
--- a/src/proof/pdr/pdrIncr.c
+++ b/src/proof/pdr/pdrIncr.c
@@ -190,6 +190,21 @@ sat_solver * IPdr_ManSetSolver( Pdr_Man_t * p, int k, int nTotal )
SeeAlso []
***********************************************************************/
+
+int IPdr_ManRestoreAbsFlops( Pdr_Man_t * p )
+{
+ Pdr_Set_t * pSet; int i, j, k;
+
+ Vec_VecForEachEntry( Pdr_Set_t *, p->vClauses, pSet, i, j )
+ {
+ for ( k = 0; k < pSet->nLits; k++ )
+ {
+ Vec_IntWriteEntry( p->vAbsFlops, Abc_Lit2Var(pSet->Lits[k]), 1 );
+ }
+ }
+ return 0;
+}
+
int IPdr_ManRestore( Pdr_Man_t * p, Vec_Vec_t * vClauses, Vec_Int_t * vMap )
{
int i;
@@ -288,6 +303,17 @@ int IPdr_ManSolveInt( Pdr_Man_t * p, int fCheckClauses, int fPushClauses )
return 1;
}
}
+
+ if ( p->pPars->fUseAbs && p->vAbsFlops == NULL && iFrame >= 1 )
+ {
+ assert( p->vAbsFlops == NULL );
+ p->vAbsFlops = Vec_IntStart( Saig_ManRegNum(p->pAig) );
+ p->vMapFf2Ppi = Vec_IntStartFull( Saig_ManRegNum(p->pAig) );
+ p->vMapPpi2Ff = Vec_IntAlloc( 100 );
+
+ IPdr_ManRestoreAbsFlops( p );
+ }
+
}
while ( 1 )
{
@@ -442,6 +468,9 @@ int IPdr_ManSolveInt( Pdr_Man_t * p, int fCheckClauses, int fPushClauses )
break; // keep solving
}
p->pAig->pSeqModel = pCex;
+
+ if ( p->pPars->fVerbose && p->pPars->fUseAbs )
+ Pdr_ManPrintProgress( p, !p->pPars->fSolveAll, Abc_Clock() - clkStart );
return 0; // SAT
}
p->pPars->nFailOuts++;
@@ -491,6 +520,7 @@ int IPdr_ManSolveInt( Pdr_Man_t * p, int fCheckClauses, int fPushClauses )
p->timeToStopOne = 0;
}
}
+ /*
if ( p->pPars->fUseAbs && p->vAbsFlops && !fRefined )
{
int i, Used;
@@ -498,6 +528,17 @@ int IPdr_ManSolveInt( Pdr_Man_t * p, int fCheckClauses, int fPushClauses )
if ( Used && (Vec_IntEntry(p->vPrio, i) >> p->nPrioShift) == 0 )
Vec_IntWriteEntry( p->vAbsFlops, i, 0 );
}
+ */
+ if ( p->pPars->fUseAbs && p->vAbsFlops && !fRefined )
+ {
+ Pdr_Set_t * pSet;
+ int i, j, k;
+ Vec_IntFill( p->vAbsFlops, Vec_IntSize( p->vAbsFlops ), 0 );
+ Vec_VecForEachEntry( Pdr_Set_t *, p->vClauses, pSet, i, j )
+ for ( k = 0; k < pSet->nLits; k++ )
+ Vec_IntWriteEntry( p->vAbsFlops, Abc_Lit2Var(pSet->Lits[k]), 1 );
+ }
+
if ( p->pPars->fVerbose )
Pdr_ManPrintProgress( p, !fRefined, Abc_Clock() - clkStart );
if ( fRefined )