mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-21 18:05:46 +00:00
ShaderCache: Order Phi Arguments from farthest away to nearest.
This commit is contained in:
parent
c47ff70bd5
commit
c9bee9e96e
5 changed files with 37 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
|||
#include <memory>
|
||||
|
||||
#include "shader_recompiler/exception.h"
|
||||
#include "shader_recompiler/frontend/ir/basic_block.h"
|
||||
#include "shader_recompiler/frontend/ir/type.h"
|
||||
#include "shader_recompiler/frontend/ir/value.h"
|
||||
|
||||
|
@ -291,6 +292,16 @@ void Inst::AddPhiOperand(Block* predecessor, const Value& value) {
|
|||
phi_args.emplace_back(predecessor, value);
|
||||
}
|
||||
|
||||
void Inst::OrderPhiArgs() {
|
||||
if (op != Opcode::Phi) {
|
||||
throw LogicError("{} is not a Phi instruction", op);
|
||||
}
|
||||
std::sort(phi_args.begin(), phi_args.end(),
|
||||
[](const std::pair<Block*, Value>& a, const std::pair<Block*, Value>& b) {
|
||||
return a.first->GetOrder() < b.first->GetOrder();
|
||||
});
|
||||
}
|
||||
|
||||
void Inst::Invalidate() {
|
||||
ClearArgs();
|
||||
ReplaceOpcode(Opcode::Void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue