126 int barrierCount, i, j, jElem;
128 Aig_Obj_t *pObjBarrier, *pObjCurr, *pObjTargetPoOld;
131 if( vBarriers == NULL )
133 barrierCount = Vec_PtrSize( vBarriers );
134 if( barrierCount <= 0 )
137 vNewBarrierSignals = Vec_PtrAlloc( barrierCount );
139 for( i=0; i<barrierCount; i++ )
141 vIthBarrier = (
Vec_Int_t *)Vec_PtrEntry( vBarriers, i );
142 assert( Vec_IntSize( vIthBarrier ) >= 1 );
143 pObjBarrier = Aig_Not(Aig_ManConst1(pAigNew));
146 pObjTargetPoOld = Aig_ManCo( pAigOld, jElem );
150 pObjBarrier =
Aig_Or( pAigNew, pObjCurr, pObjBarrier );
153 Vec_PtrPush(vNewBarrierSignals, pObjBarrier);
155 assert( Vec_PtrSize( vNewBarrierSignals ) == barrierCount );
157 return vNewBarrierSignals;
176 Aig_Obj_t *pWindowBeginsLocal = pWindowBegins;
177 Aig_Obj_t *pWithinWindowLocal = pWithinWindow;
179 Aig_Obj_t *pObj, *pObjAnd1, *pObjOr1, *pObjAnd2, *pObjBarrierLo, *pObjBarrierSwitch, *pObjArenaViolation;
182 assert( vBarrierLiDriver != NULL );
183 assert( vMonotoneDisjunctionNodes != NULL );
185 pObjArenaViolation = Aig_Not(Aig_ManConst1( pAigNew ));
188 assert( vBarrierSignals != NULL );
190 assert( Vec_PtrSize( vMonotoneDisjunctionNodes ) == 0 );
192 Vec_PtrPush( vMonotoneDisjunctionNodes, pObj );
193 assert( Vec_PtrSize( vMonotoneDisjunctionNodes ) == Vec_PtrSize( vMasterBarriers ) );
198 pObjAnd1 =
Aig_And(pAigNew, pObj, pWindowBeginsLocal);
199 pObjBarrierLo = (
Aig_Obj_t *)Vec_PtrEntry( vBarrierLo, i );
200 pObjOr1 =
Aig_Or(pAigNew, pObjAnd1, pObjBarrierLo);
201 Vec_PtrPush( vBarrierLiDriver, pObjOr1 );
203 pObjBarrierSwitch =
Aig_Xor( pAigNew, pObj, pObjBarrierLo );
204 pObjAnd2 =
Aig_And( pAigNew, pObjBarrierSwitch, pWithinWindowLocal );
205 pObjArenaViolation =
Aig_Or( pAigNew, pObjAnd2, pObjArenaViolation );
208 Vec_PtrFree(vBarrierSignals);
209 return pObjArenaViolation;
214 Aig_Obj_t *pConsequent, *pConsequentCopy, *pAntecedent, *p0LiveCone, *pObj;
215 int i, numSigAntecedent;
217 numSigAntecedent = Vec_PtrSize( signalList ) - 1;
219 pAntecedent = Aig_ManConst1( pNewAig );
220 pConsequent = (
Aig_Obj_t *)Vec_PtrEntry( signalList, numSigAntecedent );
221 pConsequentCopy = Aig_NotCond( (
Aig_Obj_t *)(Aig_Regular(pConsequent)->pData), Aig_IsComplement( pConsequent ) );
223 for(i=0; i<numSigAntecedent; i++ )
225 pObj = (
Aig_Obj_t *)Vec_PtrEntry( signalList, i );
226 assert( Aig_Regular(pObj)->pData );
227 pAntecedent =
Aig_And( pNewAig, pAntecedent, Aig_NotCond((
Aig_Obj_t *)(Aig_Regular(pObj)->pData), Aig_IsComplement(pObj)) );
230 p0LiveCone =
Aig_Or( pNewAig, Aig_Not(pAntecedent), pConsequentCopy );
307 Aig_Obj_t *pObjBigAnd, *pObj, *pObjLo, *pObjImply;
311 pObjBigAnd = Aig_ManConst1( pNewAig );
312 pObjPendingAndPendingLo =
Aig_And( pNewAig, pendingLo, pendingSignal );
315 pObjLo = (
Aig_Obj_t *)Vec_PtrEntry( vDisjunctionLo, i );
316 pObjImply =
Aig_Or( pNewAig, Aig_Not(
Aig_And( pNewAig, pObjPendingAndPendingLo, pObjLo)),
318 pObjBigAnd =
Aig_And( pNewAig, pObjBigAnd, pObjImply );
328 int loCopied = 0, loCreated = 0, liCopied = 0, liCreated = 0;
329 Aig_Obj_t *pObjWindowBeginsNew, *pObjWithinWindowNew, *pObjArenaViolation, *pObjTarget, *pObjArenaViolationLiDriver;
330 Aig_Obj_t *pObjNewPoDriverArenaViolated, *pObjArenaViolationLo;
331 Vec_Ptr_t *vBarrierLo, *vBarrierLiDriver, *vBarrierLi;
334#ifdef BARRIER_MONOTONE_TEST
338 Aig_Obj_t *pObjPendingAndPendingSignal, *pObjMonotoneAnd, *pObjCurrMonotoneLo;
350 sprintf(pNewAig->pName,
"%s_%s", pAig->pName,
"0Live");
351 pNewAig->pSpec = NULL;
356 pObj = Aig_ManConst1( pAig );
357 pObj->
pData = Aig_ManConst1( pNewAig );
380 loCreated = Vec_PtrSize(vBarrierLo);
388#ifdef BARRIER_MONOTONE_TEST
400 loCreated = loCreated + Vec_PtrSize(vMonotoneBarrierLo);
408 pObj->
pData =
Aig_And( pNewAig, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj) );
414 pObjTarget = Aig_ManCo( pAig, windowBeginIndex );
417 pObjTarget = Aig_ManCo( pAig, withinWindowIndex );
420 vBarrierLiDriver = Vec_PtrAlloc( Vec_PtrSize(vBarriers) );
421 vMonotoneNodes = Vec_PtrAlloc( Vec_PtrSize(vBarriers) );
424 pObjWindowBeginsNew, pObjWithinWindowNew,
425 vBarriers, vBarrierLo, vBarrierLiDriver, vMonotoneNodes );
426 assert( Vec_PtrSize(vMonotoneNodes) == Vec_PtrSize(vBarriers) );
428#ifdef ARENA_VIOLATION_CONSTRAINT
432 pObjArenaViolationLiDriver =
Aig_Or( pNewAig, pObjArenaViolation, pObjArenaViolationLo );
434#ifdef BARRIER_MONOTONE_TEST
439 pObjTarget = Aig_ManCo( pAig, pendingSignalIndex );
442 pObjPendingAndPendingSignal =
Aig_And( pNewAig, pObjPendingSignal, pObjPendingFlopLo );
443 pObjMonotoneAnd = Aig_ManConst1( pNewAig );
446 pObjCurrMonotoneLo = (
Aig_Obj_t *)Vec_PtrEntry(vMonotoneBarrierLo, i);
447 pObjMonotoneAnd =
Aig_And( pNewAig, pObjMonotoneAnd,
449 Aig_Not(
Aig_And(pNewAig, pObjPendingAndPendingSignal, pObjCurrMonotoneLo)),
464 pObjNewPoDriverArenaViolated =
Aig_Or( pNewAig, pObjNewPoDriver, pObjArenaViolationLo );
465#ifdef BARRIER_MONOTONE_TEST
466 pObjNewPoDriverArenaViolated =
Aig_And( pNewAig, pObjNewPoDriverArenaViolated, pObjMonotoneAnd );
485 assert( Vec_PtrSize(vBarrierLiDriver) == Vec_PtrSize(vBarriers) );
486 vBarrierLi =
createArenaLi( pNewAig, vBarriers, vBarrierLiDriver );
487 liCreated = Vec_PtrSize( vBarrierLi );
495#ifdef BARRIER_MONOTONE_TEST
513 assert(loCopied + loCreated == liCopied + liCreated);
520 Vec_PtrFree(vBarrierLo);
521 Vec_PtrFree(vMonotoneBarrierLo);
522 Vec_PtrFree(vBarrierLiDriver);
523 Vec_PtrFree(vBarrierLi);
524 Vec_PtrFree(vMonotoneNodes);