src/calBdd/calApplyReduce.c File Reference

#include "calInt.h"
Include dependency graph for calApplyReduce.c:

Go to the source code of this file.

Functions

void CalHashTableApply (Cal_BddManager_t *bddManager, CalHashTable_t *hashTable, CalHashTable_t **reqQueAtPipeDepth, CalOpProc_t calOpProc)
void CalHashTableReduce (Cal_BddManager_t *bddManager, CalHashTable_t *hashTable, CalHashTable_t *uniqueTableForId)

Function Documentation

void CalHashTableApply ( Cal_BddManager_t bddManager,
CalHashTable_t hashTable,
CalHashTable_t **  reqQueAtPipeDepth,
CalOpProc_t  calOpProc 
)

CFile***********************************************************************

FileName [calApplyReduce.c]

PackageName [cal]

Synopsis [Generic routines for processing temporary nodes during "apply" and "reduce" phases.]

Description []

SeeAlso [optional]

Author [Jagesh Sanghavi (sanghavi@eecs.berkeley.edu) Rajeev Ranjan (rajeev@eecs.berkeley.edu) ] Copyright [Copyright (c) 1994-1996 The Regents of the Univ. of California. All rights reserved.

Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software.

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.]

Revision [

Id
calApplyReduce.c,v 1.1.1.3 1998/05/04 00:58:49 hsv Exp

]AutomaticStart AutomaticEnd Function********************************************************************

Synopsis [required]

Description [optional]

SideEffects [required]

SeeAlso [optional]

Definition at line 91 of file calApplyReduce.c.

00094 {
00095   int i, numBins;
00096   CalBddNode_t **bins = 0;
00097   CalRequestNode_t *requestNode;
00098   Cal_Bdd_t fx, gx, fxbar, gxbar, result;
00099   Cal_BddId_t bddId;
00100 
00101   numBins = hashTable->numBins;
00102   bins = hashTable->bins;
00103   for(i = 0; i < numBins; i++){
00104     for(requestNode = bins[i];
00105         requestNode != Cal_Nil(CalRequestNode_t);
00106         requestNode = CalRequestNodeGetNextRequestNode(requestNode)){
00107       /* Process the requestNode */
00108       CalRequestNodeGetCofactors(bddManager, requestNode, fx, fxbar, gx, gxbar);
00109       Cal_Assert(((CalAddress_t)(fx.bddNode)) & ~0xf);
00110       Cal_Assert(((CalAddress_t)(gx.bddNode)) & ~0xf);
00111       Cal_Assert(((CalAddress_t)(fxbar.bddNode)) & ~0xf);
00112       Cal_Assert(((CalAddress_t)(gxbar.bddNode)) & ~0xf);
00113       if((*calOpProc)(bddManager, fx, gx, &result) == 0){
00114         CalBddNormalize(fx, gx);
00115         CalBddGetMinId2(bddManager, fx, gx, bddId);
00116         CalHashTableFindOrAdd(reqQueAtPipeDepth[bddId], fx, gx, &result);
00117       }
00118       CalBddIcrRefCount(result);
00119       CalRequestNodePutThenRequest(requestNode, result);
00120       if((*calOpProc)(bddManager, fxbar, gxbar, &result) == 0){
00121         CalBddNormalize(fxbar, gxbar);
00122         CalBddGetMinId2(bddManager, fxbar, gxbar, bddId);
00123         CalHashTableFindOrAdd(reqQueAtPipeDepth[bddId], fxbar, gxbar, &result);
00124       }
00125       CalBddIcrRefCount(result);
00126       CalRequestNodePutElseRequest(requestNode, result);
00127     }
00128   }
00129 }

void CalHashTableReduce ( Cal_BddManager_t bddManager,
CalHashTable_t hashTable,
CalHashTable_t uniqueTableForId 
)

Function********************************************************************

Synopsis [required]

Description [optional]

SideEffects [required]

SeeAlso [optional]

Definition at line 143 of file calApplyReduce.c.

00146 {
00147   int i, numBins = hashTable->numBins;
00148   CalBddNode_t **bins = hashTable->bins;
00149   Cal_BddId_t currentBddId = uniqueTableForId->bddId;
00150   CalNodeManager_t *nodeManager = uniqueTableForId->nodeManager;
00151   CalRequestNode_t *requestNode, *next;
00152   CalBddNode_t *bddNode, *endNode;
00153   Cal_Bdd_t thenBdd, elseBdd, result;
00154   Cal_BddRefCount_t refCount;
00155 
00156   endNode = hashTable->endNode;
00157   for(i = 0; i < numBins; i++){
00158     for(requestNode = bins[i];
00159         requestNode != Cal_Nil(CalRequestNode_t);
00160         requestNode = next){
00161       next = CalRequestNodeGetNextRequestNode(requestNode);
00162       /* Process the requestNode */
00163       CalRequestNodeGetThenRequest(requestNode, thenBdd);
00164       CalRequestNodeGetElseRequest(requestNode, elseBdd);
00165       CalRequestIsForwardedTo(thenBdd);
00166       CalRequestIsForwardedTo(elseBdd);
00167       if(CalBddIsEqual(thenBdd, elseBdd)){
00168         CalRequestNodeGetRefCount(requestNode, refCount);
00169         CalRequestAddRefCount(thenBdd, refCount - 2);
00170         CalRequestNodePutThenRequest(requestNode, thenBdd);
00171         CalRequestNodePutElseRequestNode(requestNode, FORWARD_FLAG);
00172         endNode->nextBddNode = requestNode;
00173         endNode = requestNode;
00174       }
00175       else
00176         if(CalUniqueTableForIdLookup(bddManager, uniqueTableForId,
00177           thenBdd, elseBdd, &result) == 1){
00178         CalBddDcrRefCount(thenBdd);
00179         CalBddDcrRefCount(elseBdd);
00180         CalRequestNodeGetRefCount(requestNode, refCount);
00181         CalBddAddRefCount(result, refCount);
00182         CalRequestNodePutThenRequest(requestNode, result);
00183         CalRequestNodePutElseRequestNode(requestNode, FORWARD_FLAG);
00184         endNode->nextBddNode = requestNode;
00185         endNode = requestNode;
00186       }
00187       else if(CalBddIsOutPos(thenBdd)){
00188         CalRequestNodePutThenRequest(requestNode, thenBdd);
00189         CalRequestNodePutElseRequest(requestNode, elseBdd);
00190         CalHashTableAddDirect(uniqueTableForId, requestNode);
00191         bddManager->numNodes++;
00192         bddManager->gcCheck--;
00193       }
00194       else{
00195         CalNodeManagerAllocNode(nodeManager, bddNode);
00196         CalBddNodePutThenBddId(bddNode, CalBddGetBddId(thenBdd));
00197         CalBddNodePutThenBddNode(bddNode, CalBddGetBddNodeNot(thenBdd));
00198         CalBddNodePutElseBddId(bddNode, CalBddGetBddId(elseBdd));
00199         CalBddNodePutElseBddNode(bddNode, CalBddGetBddNodeNot(elseBdd));
00200         CalRequestNodeGetRefCount(requestNode, refCount);
00201         CalBddNodePutRefCount(bddNode, refCount);
00202         CalHashTableAddDirect(uniqueTableForId, bddNode);
00203         bddManager->numNodes++;
00204         bddManager->gcCheck--;
00205         CalRequestNodePutThenRequestId(requestNode, currentBddId);
00206         CalRequestNodePutThenRequestNode(requestNode, CalBddNodeNot(bddNode));
00207         CalRequestNodePutElseRequestNode(requestNode, FORWARD_FLAG);
00208         endNode->nextBddNode = requestNode;
00209         endNode = requestNode;
00210       }
00211     }
00212   }
00213   memset((char *)bins, 0, hashTable->numBins * sizeof(CalBddNode_t *));
00214   hashTable->endNode = endNode;
00215 }


Generated on Tue Jan 12 13:57:10 2010 for glu-2.2 by  doxygen 1.6.1