summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-12-16 21:31:09 +0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-12-16 21:31:09 +0700
commit25b1a0d81c113bca545fd3b2f477e07e1d33e509 (patch)
tree68b72acfd285ab5ddc0e10f67957772fcb9c313f /src
parentf1b64be84071a431eac9871f8cdc71bc912fd75a (diff)
downloadabc-25b1a0d81c113bca545fd3b2f477e07e1d33e509.tar.gz
abc-25b1a0d81c113bca545fd3b2f477e07e1d33e509.tar.bz2
abc-25b1a0d81c113bca545fd3b2f477e07e1d33e509.zip
Fixing a rare problem with choice nodes.
Diffstat (limited to 'src')
-rw-r--r--src/aig/gia/giaAig.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/aig/gia/giaAig.c b/src/aig/gia/giaAig.c
index 91a9c600..c764a099 100644
--- a/src/aig/gia/giaAig.c
+++ b/src/aig/gia/giaAig.c
@@ -611,6 +611,27 @@ Gia_Man_t * Gia_ManCompress2( Gia_Man_t * p, int fUpdateLevel, int fVerbose )
SeeAlso []
***********************************************************************/
+int Gia_ManTestChoices( Gia_Man_t * p )
+{
+ Gia_Obj_t * pObj; int i;
+ Vec_Int_t * vPointed = Vec_IntStart( Gia_ManObjNum(p) );
+ Gia_ManForEachAnd( p, pObj, i )
+ if ( Gia_ObjSibl(p, i) )
+ Vec_IntWriteEntry( vPointed, Gia_ObjSibl(p, i), 1 );
+ Gia_ManCreateRefs( p );
+ Gia_ManForEachAnd( p, pObj, i )
+ if ( Vec_IntEntry(vPointed, i) && Gia_ObjRefNumId(p, i) > 0 )
+ {
+ printf( "Gia_ManCheckChoices: Member %d", i );
+ printf( " of a choice node has %d fanouts.\n", Gia_ObjRefNumId(p, i) );
+ ABC_FREE( p->pRefs );
+ Vec_IntFree( vPointed );
+ return 0;
+ }
+ ABC_FREE( p->pRefs );
+ Vec_IntFree( vPointed );
+ return 1;
+}
Gia_Man_t * Gia_ManPerformDch( Gia_Man_t * p, void * pPars )
{
int fUseMapping = 0;
@@ -628,6 +649,11 @@ Gia_Man_t * Gia_ManPerformDch( Gia_Man_t * p, void * pPars )
// pGia = Gia_ManFromAig( pNew );
pGia = Gia_ManFromAigChoices( pNew );
Aig_ManStop( pNew );
+ if ( !p->pManTime && !Gia_ManTestChoices(pGia) )
+ {
+ Gia_ManStop( pGia );
+ pGia = Gia_ManDup( p );
+ }
Gia_ManTransferTiming( pGia, p );
return pGia;
}