Browse Source

gl_shader_decompiler: Remove redundant Subroutine construction in AddSubroutine()

We don't need to toss away the Subroutine instance after the find() call
and reconstruct another instance with the same data right after it.
Particularly give Subroutine contains a std::set.
nce_cpp
Lioncash 8 years ago
parent
commit
db185e6950
  1. 12
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp

12
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@ -78,14 +78,18 @@ private:
/// Adds and analyzes a new subroutine if it is not added yet. /// Adds and analyzes a new subroutine if it is not added yet.
const Subroutine& AddSubroutine(u32 begin, u32 end, const std::string& suffix) { const Subroutine& AddSubroutine(u32 begin, u32 end, const std::string& suffix) {
auto iter = subroutines.find(Subroutine{begin, end, suffix});
if (iter != subroutines.end())
Subroutine subroutine{begin, end, suffix, ExitMethod::Undetermined, {}};
const auto iter = subroutines.find(subroutine);
if (iter != subroutines.end()) {
return *iter; return *iter;
}
Subroutine subroutine{begin, end, suffix};
subroutine.exit_method = Scan(begin, end, subroutine.labels); subroutine.exit_method = Scan(begin, end, subroutine.labels);
if (subroutine.exit_method == ExitMethod::Undetermined)
if (subroutine.exit_method == ExitMethod::Undetermined) {
throw DecompileFail("Recursive function detected"); throw DecompileFail("Recursive function detected");
}
return *subroutines.insert(std::move(subroutine)).first; return *subroutines.insert(std::move(subroutine)).first;
} }

Loading…
Cancel
Save