mirror of
https://github.com/RTimothyEdwards/magic.git
synced 2026-08-22 14:17:43 +02:00
One more change to the extraction method to avoid extracting the
substrate more than once for the same subcell, since the substrate extraction method scans the entire plane area; this was making large standard cell layouts extract very slowly, as every component cell was causing the substrate search to be repeated.
This commit is contained in:
@@ -93,6 +93,26 @@ void extSubtreeAdjustInit();
|
||||
void extSubtreeOutputCoupling();
|
||||
void extSubtreeHardSearch();
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* extClearUseFlags --
|
||||
*
|
||||
* Callback function to clear the CU_SUB_EXTRACTED flag from each child
|
||||
* use of a CellDef.
|
||||
*
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
extClearUseFlags(use, clientData)
|
||||
CellUse *use;
|
||||
ClientData clientData;
|
||||
{
|
||||
use->cu_flags &= ~CU_SUB_EXTRACTED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
@@ -292,6 +312,9 @@ done:
|
||||
/* Output connections and node adjustments */
|
||||
extOutputConns(&ha.ha_connHash, f);
|
||||
HashKill(&ha.ha_connHash);
|
||||
|
||||
/* Clear the CU_SUB_EXTRACTED flag from all children instances */
|
||||
DBCellEnum(def, extClearUseFlags, (ClientData)NULL);
|
||||
}
|
||||
|
||||
#ifdef exactinteractions
|
||||
@@ -800,6 +823,8 @@ extSubtreeFunc(scx, ha)
|
||||
for (y = use->cu_ylo; y <= use->cu_yhi; y++)
|
||||
extHierSubstrate(ha, use, x, y);
|
||||
}
|
||||
/* Mark substrate as having been extracted for this use. */
|
||||
use->cu_flags |= CU_SUB_EXTRACTED;
|
||||
|
||||
/* Free the cumulative node list we extracted above */
|
||||
if (ha->ha_cumFlat.et_nodes)
|
||||
|
||||
Reference in New Issue
Block a user