dead_code_elimination_pass: Remove unreachable Phi arguments
This commit is contained in:
parent
f10d40a0a2
commit
67159e3be7
3 changed files with 36 additions and 0 deletions
|
@ -326,6 +326,11 @@ void Inst::AddPhiOperand(Block* predecessor, const Value& value) {
|
|||
phi_args.emplace_back(predecessor, value);
|
||||
}
|
||||
|
||||
void Inst::ErasePhiOperand(size_t index) {
|
||||
const auto operand_it{phi_args.begin() + static_cast<ptrdiff_t>(index)};
|
||||
phi_args.erase(operand_it);
|
||||
}
|
||||
|
||||
void Inst::OrderPhiArgs() {
|
||||
if (op != Opcode::Phi) {
|
||||
throw LogicError("{} is not a Phi instruction", op);
|
||||
|
|
|
@ -179,9 +179,13 @@ public:
|
|||
|
||||
/// Get a pointer to the block of a phi argument.
|
||||
[[nodiscard]] Block* PhiBlock(size_t index) const;
|
||||
|
||||
/// Add phi operand to a phi instruction.
|
||||
void AddPhiOperand(Block* predecessor, const Value& value);
|
||||
|
||||
// Erase the phi operand at the given index.
|
||||
void ErasePhiOperand(size_t index);
|
||||
|
||||
/// Orders the Phi arguments from farthest away to nearest.
|
||||
void OrderPhiArgs();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue