Merge pull request #3978 from ReinUsesLisp/write-rz
shader_decompiler: Visit source nodes even when they assign to RZ
This commit is contained in:
commit
86345c126a
|
@ -1538,7 +1538,9 @@ private:
|
||||||
Expression target;
|
Expression target;
|
||||||
if (const auto gpr = std::get_if<GprNode>(&*dest)) {
|
if (const auto gpr = std::get_if<GprNode>(&*dest)) {
|
||||||
if (gpr->GetIndex() == Register::ZeroIndex) {
|
if (gpr->GetIndex() == Register::ZeroIndex) {
|
||||||
// Writing to Register::ZeroIndex is a no op
|
// Writing to Register::ZeroIndex is a no op but we still have to visit the source
|
||||||
|
// as it might have side effects.
|
||||||
|
code.AddLine("{};", Visit(src).GetCode());
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
target = {GetRegister(gpr->GetIndex()), Type::Float};
|
target = {GetRegister(gpr->GetIndex()), Type::Float};
|
||||||
|
|
|
@ -1081,8 +1081,7 @@ private:
|
||||||
|
|
||||||
void VisitBasicBlock(const NodeBlock& bb) {
|
void VisitBasicBlock(const NodeBlock& bb) {
|
||||||
for (const auto& node : bb) {
|
for (const auto& node : bb) {
|
||||||
[[maybe_unused]] const Type type = Visit(node).type;
|
Visit(node);
|
||||||
ASSERT(type == Type::Void);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1372,7 +1371,9 @@ private:
|
||||||
Expression target{};
|
Expression target{};
|
||||||
if (const auto gpr = std::get_if<GprNode>(&*dest)) {
|
if (const auto gpr = std::get_if<GprNode>(&*dest)) {
|
||||||
if (gpr->GetIndex() == Register::ZeroIndex) {
|
if (gpr->GetIndex() == Register::ZeroIndex) {
|
||||||
// Writing to Register::ZeroIndex is a no op
|
// Writing to Register::ZeroIndex is a no op but we still have to visit its source
|
||||||
|
// because it might have side effects.
|
||||||
|
Visit(src);
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
target = {registers.at(gpr->GetIndex()), Type::Float};
|
target = {registers.at(gpr->GetIndex()), Type::Float};
|
||||||
|
|
Reference in New Issue