644 unsigned * pInfo, * pPres;
646 for ( i = 0; i < nLits; i++ )
648 pInfo = (
unsigned *)Vec_PtrEntry(vInfo, Abc_Lit2Var(pLits[i]));
649 pPres = (
unsigned *)Vec_PtrEntry(vPres, Abc_Lit2Var(pLits[i]));
650 if ( Abc_InfoHasBit( pPres, iBit ) &&
651 Abc_InfoHasBit( pInfo, iBit ) == Abc_LitIsCompl(pLits[i]) )
654 for ( i = 0; i < nLits; i++ )
656 pInfo = (
unsigned *)Vec_PtrEntry(vInfo, Abc_Lit2Var(pLits[i]));
657 pPres = (
unsigned *)Vec_PtrEntry(vPres, Abc_Lit2Var(pLits[i]));
658 Abc_InfoSetBit( pPres, iBit );
659 if ( Abc_InfoHasBit( pInfo, iBit ) == Abc_LitIsCompl(pLits[i]) )
660 Abc_InfoXorBit( pInfo, iBit );
764 Vec_Ptr_t * vClasses, * vMembers, * vOldRootsNew;
765 Gia_Obj_t * pRoot, * pMember, * pMemberPrev, * pRepr, * pTempRepr;
766 int i, k, nIter, iRoot, iRootNew, iMember, iMemberPrev, status, fOneFailed;
767 int nSaved = 0, nRecords = 0, nUndec = 0, nClassRefs = 0, nTsat = 0, nMiniSat = 0;
768 clock_t clk, timeTsat = 0, timeMiniSat = 0, timeSim = 0, timeTotal = clock();
769 if ( Vec_PtrSize(vOldRoots) == 0 )
774 Pars.nBTLimit =
p->nBTLimit;
781 vMembers = Vec_PtrAlloc( 100 );
782 Vec_PtrCleanSimInfo(
p->vSimPres, 0, 1 );
786 iRoot = Gia_ObjId(
p->pGia, pRoot );
787 if ( !Gia_ObjIsConst(
p->pGia, iRoot ) )
789 iRootNew = Abc_LitNotCond( pRoot->
Value, pRoot->
fPhase );
795 status =
Tas_ManSolve( pTas, Gia_ObjFromLit(pGiaLev, iRootNew), NULL );
796 timeTsat += clock() - clk;
802 timeMiniSat += clock() - clk;
809 else if ( status == 0 )
812 else if ( fUseMiniSat )
817 timeMiniSat += clock() - clk;
825 status =
Tas_ManSolve( pTas, Gia_ObjFromLit(pGiaLev, iRootNew), NULL );
826 timeTsat += clock() - clk;
833 Gia_ObjSetFailed(
p->pGia, iRoot );
835 else if ( status == 1 )
837 Gia_ObjSetProved(
p->pGia, iRoot );
843 Gia_ObjUnsetRepr(
p->pGia, iRoot );
849 vClasses = Vec_PtrAlloc( 100 );
850 vOldRootsNew = Vec_PtrAlloc( 100 );
851 for ( nIter = 0; Vec_PtrSize(vOldRoots) > 0; nIter++ )
855 Vec_PtrClear( vClasses );
856 Vec_PtrClear( vOldRootsNew );
857 Gia_ManConst0(
p->pGia )->fMark0 = 1;
860 iRoot = Gia_ObjId(
p->pGia, pRoot );
861 if ( Gia_ObjIsHead(
p->pGia, iRoot ) )
863 else if ( Gia_ObjIsClass(
p->pGia, iRoot ) )
864 pRepr = Gia_ObjReprObj(
p->pGia, iRoot );
870 Vec_PtrPush( vClasses, pRepr );
876 Vec_PtrPush( vMembers, pTempRepr );
877 if ( Vec_PtrSize(vMembers) < 2 )
881 pMemberPrev = (
Gia_Obj_t *)Vec_PtrEntryLast( vMembers );
884 iMemberPrev = Abc_LitNotCond( pMemberPrev->
Value, pMemberPrev->
fPhase );
885 iMember = Abc_LitNotCond( pMember->
Value, !pMember->
fPhase );
886 assert( iMemberPrev != iMember );
891 status =
Tas_ManSolve( pTas, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
892 timeTsat += clock() - clk;
897 status =
Cec_ManSatCheckNodeTwo( pSat, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
898 timeMiniSat += clock() - clk;
901 Cec_ManSavePattern( pSat, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
905 else if ( status == 0 )
908 else if ( fUseMiniSat )
912 status =
Cec_ManSatCheckNodeTwo( pSat, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
913 timeMiniSat += clock() - clk;
915 Cec_ManSavePattern( pSat, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
921 status =
Tas_ManSolve( pTas, Gia_ObjFromLit(pGiaLev, iMemberPrev), Gia_ObjFromLit(pGiaLev, iMember) );
922 timeTsat += clock() - clk;
928 if ( Gia_ObjLevel(
p->pGia, pMemberPrev) > Gia_ObjLevel(
p->pGia, pMember) )
931 Gia_ObjSetFailed(
p->pGia, Gia_ObjId(
p->pGia, pMemberPrev) );
932 Gia_ObjSetFailed(
p->pGia, Gia_ObjId(
p->pGia, pMember) );
937 Gia_ObjSetFailed(
p->pGia, Gia_ObjId(
p->pGia, pMemberPrev) );
938 Gia_ObjSetFailed(
p->pGia, Gia_ObjId(
p->pGia, pMember) );
941 else if ( status == 1 )
958 pMemberPrev = pMember;
967 if ( pMember != pTempRepr && !Gia_ObjFailed(
p->pGia, Gia_ObjId(
p->pGia, pMember)) )
968 Vec_PtrPush( vOldRootsNew, pMember );
971 timeSim += clock() - clk;
976 Gia_ObjSetProved(
p->pGia, Gia_ObjId(
p->pGia, pMember) );
989 Vec_PtrClear( vOldRoots );
991 Vec_PtrPush( vOldRoots, pMember );
993 Gia_ManConst0(
p->pGia )->fMark0 = 0;
997 Vec_PtrFree( vClasses );
998 Vec_PtrFree( vOldRootsNew );
999 printf(
"nSaved = %d nRecords = %d nUndec = %d nClassRefs = %d nMiniSat = %d nTas = %d\n",
1000 nSaved, nRecords, nUndec, nClassRefs, nMiniSat, nTsat );
1002 ABC_PRT(
"MiniSat", timeMiniSat );
1004 ABC_PRT(
"Total ", clock() - timeTotal );
1013 Vec_PtrFree( vMembers );