summaryrefslogtreecommitdiffstats
path: root/src/proof/pdr
diff options
context:
space:
mode:
authorYen-Sheng Ho <ysho@berkeley.edu>2017-02-18 21:22:26 -0800
committerYen-Sheng Ho <ysho@berkeley.edu>2017-02-18 21:22:26 -0800
commitfc0f3b8d0dbd15b57f2159a1119b1dcf5db0aa68 (patch)
treebb0565767e8396459768ff683cefb83e51f5892d /src/proof/pdr
parentfdc0b471e5b9a20d4bf5f603f58369aba17326c3 (diff)
downloadabc-fc0f3b8d0dbd15b57f2159a1119b1dcf5db0aa68.tar.gz
abc-fc0f3b8d0dbd15b57f2159a1119b1dcf5db0aa68.tar.bz2
abc-fc0f3b8d0dbd15b57f2159a1119b1dcf5db0aa68.zip
working on incremental pdr
Diffstat (limited to 'src/proof/pdr')
-rw-r--r--src/proof/pdr/pdrIncr.c70
1 files changed, 36 insertions, 34 deletions
diff --git a/src/proof/pdr/pdrIncr.c b/src/proof/pdr/pdrIncr.c
index c4f384f5..aa07b668 100644
--- a/src/proof/pdr/pdrIncr.c
+++ b/src/proof/pdr/pdrIncr.c
@@ -527,7 +527,6 @@ int IPdr_ManSolve( Aig_Man_t * pAig, Pdr_Par_t * pPars )
{
Pdr_Man_t * p;
int k, RetValue;
- int i, nRegs;
Vec_Vec_t * vClausesSaved;
abctime clk = Abc_Clock();
@@ -549,46 +548,49 @@ int IPdr_ManSolve( Aig_Man_t * pAig, Pdr_Par_t * pPars )
pPars->fSolveAll ? "yes" : "no" );
}
ABC_FREE( pAig->pSeqModel );
+
+
p = Pdr_ManStart( pAig, pPars, NULL );
- RetValue = IPdr_ManSolveInt( p );
- if ( RetValue == 0 )
- assert( pAig->pSeqModel != NULL || p->vCexes != NULL );
- if ( p->vCexes )
- {
- assert( p->pAig->vSeqModelVec == NULL );
- p->pAig->vSeqModelVec = p->vCexes;
- p->vCexes = NULL;
- }
- if ( p->pPars->fDumpInv )
- {
- char * pFileName = Extra_FileNameGenericAppend(p->pAig->pName, "_inv.pla");
- Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
- Pdr_ManDumpClauses( p, pFileName, RetValue==1 );
- }
- else if ( RetValue == 1 )
- Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
- p->tTotal += Abc_Clock() - clk;
+ while ( 1 ) {
+ RetValue = IPdr_ManSolveInt( p );
- if (pPars->iFrame == pPars->nFrameMax)
- {
- vClausesSaved = IPdr_ManSaveClauses(p);
- nRegs = Aig_ManRegNum(p->pAig);
+ if ( RetValue == -1 && pPars->iFrame == pPars->nFrameMax) {
+ vClausesSaved = IPdr_ManSaveClauses( p );
- Pdr_ManStop( p );
+ Pdr_ManStop( p );
- printf("PDR reached the max frame: %d\n", pPars->iFrame);
- IPdr_ManPrintClauses(vClausesSaved, 0, nRegs);
+ p = Pdr_ManStart( pAig, pPars, NULL );
+ IPdr_ManRestore( p, vClausesSaved );
- p = Pdr_ManStart( pAig, pPars, NULL );
- IPdr_ManRestore( p, vClausesSaved );
+ pPars->nFrameMax = pPars->nFrameMax << 1;
- // Solve again
- pPars->nFrameMax = pPars->nFrameMax + 1;
- RetValue = IPdr_ManSolveInt(p);
- IPdr_ManPrintClauses(p->vClauses, 0, nRegs);
- }
+ continue;
+ }
+
+ if ( RetValue == 0 )
+ assert( pAig->pSeqModel != NULL || p->vCexes != NULL );
+ if ( p->vCexes )
+ {
+ assert( p->pAig->vSeqModelVec == NULL );
+ p->pAig->vSeqModelVec = p->vCexes;
+ p->vCexes = NULL;
+ }
+ if ( p->pPars->fDumpInv )
+ {
+ char * pFileName = Extra_FileNameGenericAppend(p->pAig->pName, "_inv.pla");
+ Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
+ Pdr_ManDumpClauses( p, pFileName, RetValue==1 );
+ }
+ else if ( RetValue == 1 )
+ Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
- Pdr_ManStop( p );
+ p->tTotal += Abc_Clock() - clk;
+ Pdr_ManStop( p );
+
+ break;
+ }
+
+
pPars->iFrame--;
// convert all -2 (unknown) entries into -1 (undec)
if ( pPars->vOutMap )