BlockCFG* GetBlockCFG(BlockId *id) { BlockCFG *cfg = NULL; switch (id->Kind()) { case B_Initializer: cfg = InitializerCache.Lookup(id->Function()); if (cfg) cfg->IncRef(); InitializerCache.Release(id->Function()); break; case B_Function: case B_Loop: cfg = BlockCFGCache.Lookup(id); if (cfg) cfg->IncRef(); BlockCFGCache.Release(id); break; default: Assert(false); } return cfg; }
void BlockCFGCacheAddListWithRefs(const Vector<BlockCFG*> &cfgs) { for (size_t ind = 0; ind < cfgs.Size(); ind++) { BlockCFG *cfg = cfgs[ind]; BlockId *id = cfg->GetId(); id->IncRef(&BlockCFGCache); cfg->IncRef(&BlockCFGCache); BlockCFGCache.Insert(id, cfg); } }