1 #include "sfn_instruction_block.h" 2 3 namespace r600 { 4 5 InstructionBlock(unsigned nesting_depth,unsigned block_number)6InstructionBlock::InstructionBlock(unsigned nesting_depth, unsigned block_number): 7 Instruction(block), 8 m_block_number(block_number), 9 m_nesting_depth(nesting_depth) 10 { 11 } 12 emit(PInstruction instr)13void InstructionBlock::emit(PInstruction instr) 14 { 15 m_block.push_back(instr); 16 } 17 remap_registers(ValueRemapper & map)18void InstructionBlock::remap_registers(ValueRemapper& map) 19 { 20 for(auto& i: m_block) 21 i->remap_registers(map); 22 } 23 do_evalue_liveness(LiverangeEvaluator & eval) const24void InstructionBlock::do_evalue_liveness(LiverangeEvaluator& eval) const 25 { 26 for(auto& i: m_block) 27 i->evalue_liveness(eval); 28 } 29 is_equal_to(const Instruction & lhs) const30bool InstructionBlock::is_equal_to(const Instruction& lhs) const 31 { 32 assert(lhs.type() == block); 33 auto& l = static_cast<const InstructionBlock&>(lhs); 34 35 if (m_block.size() != l.m_block.size()) 36 return false; 37 38 if (m_block_number != l.m_block_number) 39 return false; 40 41 return std::equal(m_block.begin(), m_block.end(), l.m_block.begin(), 42 [](PInstruction ri, PInstruction li) {return *ri == *li;}); 43 } 44 last_instruction()45PInstruction InstructionBlock::last_instruction() 46 { 47 return m_block.size() ? *m_block.rbegin() : nullptr; 48 } 49 do_print(std::ostream & os) const50void InstructionBlock::do_print(std::ostream& os) const 51 { 52 std::string space(" ", 2 * m_nesting_depth); 53 for(auto& i: m_block) 54 os << space << *i << "\n"; 55 } 56 57 } 58