1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 05:47:35 +00:00

LibJS: Minor cleanups in MergeBlocks

This commit is contained in:
Hendiadyoin1 2022-10-30 12:25:35 +01:00 committed by Andreas Kling
parent 1ac1a5bd58
commit 28e2467b48

View file

@ -33,13 +33,12 @@ void MergeBlocks::perform(PassPipelineExecutable& executable)
{ {
InstructionStreamIterator it { entry.key->instruction_stream() }; InstructionStreamIterator it { entry.key->instruction_stream() };
auto& first_instruction = *it; auto& first_instruction = *it;
if (first_instruction.is_terminator()) { if (first_instruction.type() == Instruction::Type::Jump) {
if (first_instruction.type() == Instruction::Type::Jump) { auto const* replacing_block = &static_cast<Op::Jump const&>(first_instruction).true_target()->block();
auto replacing_block = &static_cast<Op::Jump const&>(first_instruction).true_target()->block(); if (replacing_block != entry.key) {
if (replacing_block != entry.key) blocks_to_replace.set(entry.key, replacing_block);
blocks_to_replace.set(entry.key, replacing_block);
continue;
} }
continue;
} }
} }
@ -54,7 +53,7 @@ void MergeBlocks::perform(PassPipelineExecutable& executable)
} }
for (auto& entry : blocks_to_replace) { for (auto& entry : blocks_to_replace) {
auto replacement = entry.value; auto const* replacement = entry.value;
for (;;) { for (;;) {
auto lookup = blocks_to_replace.get(replacement); auto lookup = blocks_to_replace.get(replacement);
if (!lookup.has_value()) if (!lookup.has_value())
@ -94,20 +93,19 @@ void MergeBlocks::perform(PassPipelineExecutable& executable)
while (!blocks_to_merge.is_empty()) { while (!blocks_to_merge.is_empty()) {
auto it = blocks_to_merge.begin(); auto it = blocks_to_merge.begin();
auto current_block = *it; auto const* current_block = *it;
blocks_to_merge.remove(it); blocks_to_merge.remove(it);
Vector<BasicBlock const*> successors { current_block }; Vector<BasicBlock const*> successors { current_block };
for (;;) { for (;;) {
auto last = successors.last(); auto const* last = successors.last();
auto entry = cfg.find(last); auto entry = cfg.find(last);
if (entry == cfg.end()) if (entry == cfg.end())
break; break;
auto& successor = *entry->value.begin(); auto const* successor = *entry->value.begin();
successors.append(successor); successors.append(successor);
auto it = blocks_to_merge.find(successor);
if (it == blocks_to_merge.end()) if (!blocks_to_merge.remove(successor))
break; break;
blocks_to_merge.remove(it);
} }
auto blocks_to_merge_copy = blocks_to_merge; auto blocks_to_merge_copy = blocks_to_merge;