1 #include "sfn_instruction_block.h"
6 InstructionBlock::InstructionBlock(unsigned nesting_depth
, unsigned block_number
):
8 m_block_number(block_number
),
9 m_nesting_depth(nesting_depth
)
13 void InstructionBlock::emit(PInstruction instr
)
15 m_block
.push_back(instr
);
18 void InstructionBlock::remap_registers(ValueRemapper
& map
)
21 i
->remap_registers(map
);
24 void InstructionBlock::do_evalue_liveness(LiverangeEvaluator
& eval
) const
27 i
->evalue_liveness(eval
);
30 bool InstructionBlock::is_equal_to(const Instruction
& lhs
) const
32 assert(lhs
.type() == block
);
33 auto& l
= static_cast<const InstructionBlock
&>(lhs
);
35 if (m_block
.size() != l
.m_block
.size())
38 if (m_block_number
!= l
.m_block_number
)
41 return std::equal(m_block
.begin(), m_block
.end(), l
.m_block
.begin(),
42 [](PInstruction ri
, PInstruction li
) {return *ri
== *li
;});
45 void InstructionBlock::do_print(std::ostream
& os
) const
47 std::string
space(" ", 2 * m_nesting_depth
);
49 os
<< space
<< *i
<< "\n";