shader: Intrusively store in a block if it's sealed or not
This commit is contained in:
parent
eed6da55b8
commit
23182fa59c
2 changed files with 11 additions and 3 deletions
|
@ -195,7 +195,7 @@ public:
|
|||
case Status::Start: {
|
||||
if (const IR::Value& def = current_def.Def(block, variable); !def.IsEmpty()) {
|
||||
stack.back().result = def;
|
||||
} else if (!sealed_blocks.contains(block)) {
|
||||
} else if (!block->IsSsaSealed()) {
|
||||
// Incomplete CFG
|
||||
IR::Inst* phi{&*block->PrependNewInst(block->begin(), IR::Opcode::Phi)};
|
||||
phi->SetFlags(IR::TypeOf(UndefOpcode(variable)));
|
||||
|
@ -251,7 +251,7 @@ public:
|
|||
std::visit([&](auto& variable) { AddPhiOperands(variable, *phi, block); }, variant);
|
||||
}
|
||||
}
|
||||
sealed_blocks.insert(block);
|
||||
block->SsaSeal();
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -297,7 +297,6 @@ private:
|
|||
return same;
|
||||
}
|
||||
|
||||
boost::container::flat_set<IR::Block*> sealed_blocks;
|
||||
boost::container::flat_map<IR::Block*, boost::container::flat_map<Variant, IR::Inst*>>
|
||||
incomplete_phis;
|
||||
DefTable current_def;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue