std::vector<BasicBlockInfo> computeAllBlockSizes(MachineFunction *MF) { std::vector<BasicBlockInfo> BBInfo; BBInfo.resize(MF->getNumBlockIDs()); for (MachineBasicBlock &MBB : *MF) computeBlockSize(MF, &MBB, BBInfo[MBB.getNumber()]); return BBInfo; }
void ArenaAllocator::init(Uint32 sz, Uint32 type_id, const Pool_context& pc) { Uint32 blocksz = ArenaBlock::computeBlockSizeInWords(sz); Uint32 wpp = m_pool.WORDS_PER_PAGE; Uint32 bs = computeBlockSize(blocksz, wpp); Record_info ri; ri.m_size = 4 * bs; { ArenaBlock tmp; const char * off_base = (char*)&tmp; const char * off_next = (char*)&tmp.nextPool; const char * off_magic = (char*)&tmp.m_magic; ri.m_offset_next_pool = Uint32(off_next - off_base); ri.m_offset_magic = Uint32(off_magic - off_base); } ri.m_type_id = type_id; m_pool.init(ri, pc); m_block_size = bs - ArenaBlock::HeaderSize; }