From fb4988bb13bf8832dfcb23eca80d88227825631f Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Tue, 28 May 2024 22:23:07 +0200 Subject: [PATCH] New API to print internal nodes. --- src/base/abci/abcMap.c | 1 + src/map/mapper/mapper.h | 1 + src/map/mapper/mapperCutUtils.c | 43 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/base/abci/abcMap.c b/src/base/abci/abcMap.c index b429b062e..a4205c0ab 100644 --- a/src/base/abci/abcMap.c +++ b/src/base/abci/abcMap.c @@ -420,6 +420,7 @@ Abc_Obj_t * Abc_NodeFromMapPhase_rec( Abc_Ntk_t * pNtkNew, Map_Node_t * pNodeMap uPhaseBest = Map_CutReadPhaseBest( pCutBest, fPhase ); nLeaves = Map_CutReadLeavesNum( pCutBest ); ppLeaves = Map_CutReadLeaves( pCutBest ); + //Vec_Ptr_t * vAnds = Map_CutInternalNodes( pNodeMap, pCutBest ); // collect the PI nodes for ( i = 0; i < nLeaves; i++ ) diff --git a/src/map/mapper/mapper.h b/src/map/mapper/mapper.h index f0fcea839..03ac30635 100644 --- a/src/map/mapper/mapper.h +++ b/src/map/mapper/mapper.h @@ -167,6 +167,7 @@ extern Map_Cut_t * Map_CutAlloc( Map_Man_t * p ); /*=== mapperCutUtils.c =============================================================*/ extern void Map_CutCreateFromNode( Map_Man_t * p, Map_Super_t * pSuper, int iRoot, unsigned uPhaseRoot, int * pLeaves, int nLeaves, unsigned uPhaseLeaves ); +extern Vec_Ptr_t * Map_CutInternalNodes( Map_Node_t * pObj, Map_Cut_t * pCut ); /*=== mapperCore.c =============================================================*/ extern int Map_Mapping( Map_Man_t * p ); /*=== mapperLib.c =============================================================*/ diff --git a/src/map/mapper/mapperCutUtils.c b/src/map/mapper/mapperCutUtils.c index aa307368b..48f87565e 100644 --- a/src/map/mapper/mapperCutUtils.c +++ b/src/map/mapper/mapperCutUtils.c @@ -219,6 +219,49 @@ int Map_CutListCount( Map_Cut_t * pSets ) return i; } +/**Function************************************************************* + + Synopsis [] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Map_CutInternalNodes_rec( Map_Node_t * pObj, Vec_Ptr_t * vAnds ) +{ + if ( pObj->TravId == pObj->p->nTravIds ) + return; + pObj->TravId = pObj->p->nTravIds; + Map_CutInternalNodes_rec( pObj->p1, vAnds ); + Map_CutInternalNodes_rec( pObj->p2, vAnds ); + Vec_PtrPush( vAnds, pObj ); +} +Vec_Ptr_t * Map_CutInternalNodes( Map_Node_t * pObj, Map_Cut_t * pCut ) +{ + Vec_Ptr_t * vAnds = Vec_PtrAlloc( 4 ); + Map_Node_t * pTemp; int i; + pObj->p->nTravIds++; + for ( i = 0; i < pCut->nLeaves; i++ ) + pCut->ppLeaves[i]->TravId = pObj->p->nTravIds; + Map_CutInternalNodes_rec( pObj, vAnds ); + if ( 1 ) + { + printf( "Leaves:\n" ); + for ( i = 0; i < pCut->nLeaves; i++ ) + printf( " %d", pCut->ppLeaves[i]->Num ); + printf( "\n" ); + printf( "Nodes:\n" ); + Vec_PtrForEachEntry( Map_Node_t *, vAnds, pTemp, i ) + printf( "%d=(%d,%d)\n", pTemp->Num, pTemp->p1->Num, pTemp->p2->Num ); + printf( "\n" ); + } + return vAnds; +} + + #if 0 /**function*************************************************************