From 0797657bc02ca8f29d38206e56e3de80689c6350 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 22 Jul 2018 03:28:08 -0400 Subject: 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. --- src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/video_core/renderer_opengl/gl_shader_decompiler.cpp') diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index f47fd217d..ba827181b 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/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. 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; + } - Subroutine subroutine{begin, end, suffix}; 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"); + } + return *subroutines.insert(std::move(subroutine)).first; } -- cgit v1.2.3