Jelajahi Sumber

control_flow: emplace elements in place within TryQuery()

Places data structures where they'll eventually be moved to to avoid
needing to even move them in the first place.
Lioncash 5 tahun lalu
induk
melakukan
0dc6967ff1
1 mengubah file dengan 6 tambahan dan 6 penghapusan
  1. 6 6
      src/video_core/shader/control_flow.cpp

+ 6 - 6
src/video_core/shader/control_flow.cpp

@@ -547,13 +547,13 @@ bool TryQuery(CFGRebuildState& state) {
     gather_labels(q2.ssy_stack, state.ssy_labels, block);
     gather_labels(q2.ssy_stack, state.ssy_labels, block);
     gather_labels(q2.pbk_stack, state.pbk_labels, block);
     gather_labels(q2.pbk_stack, state.pbk_labels, block);
     if (std::holds_alternative<SingleBranch>(*block.branch)) {
     if (std::holds_alternative<SingleBranch>(*block.branch)) {
-        const auto branch = std::get_if<SingleBranch>(block.branch.get());
+        auto* branch = std::get_if<SingleBranch>(block.branch.get());
         if (!branch->condition.IsUnconditional()) {
         if (!branch->condition.IsUnconditional()) {
             q2.address = block.end + 1;
             q2.address = block.end + 1;
             state.queries.push_back(q2);
             state.queries.push_back(q2);
         }
         }
 
 
-        Query conditional_query{q2};
+        auto& conditional_query = state.queries.emplace_back(q2);
         if (branch->is_sync) {
         if (branch->is_sync) {
             if (branch->address == unassigned_branch) {
             if (branch->address == unassigned_branch) {
                 branch->address = conditional_query.ssy_stack.top();
                 branch->address = conditional_query.ssy_stack.top();
@@ -567,15 +567,15 @@ bool TryQuery(CFGRebuildState& state) {
             conditional_query.pbk_stack.pop();
             conditional_query.pbk_stack.pop();
         }
         }
         conditional_query.address = branch->address;
         conditional_query.address = branch->address;
-        state.queries.push_back(std::move(conditional_query));
         return true;
         return true;
     }
     }
-    const auto multi_branch = std::get_if<MultiBranch>(block.branch.get());
+
+    const auto* multi_branch = std::get_if<MultiBranch>(block.branch.get());
     for (const auto& branch_case : multi_branch->branches) {
     for (const auto& branch_case : multi_branch->branches) {
-        Query conditional_query{q2};
+        auto& conditional_query = state.queries.emplace_back(q2);
         conditional_query.address = branch_case.address;
         conditional_query.address = branch_case.address;
-        state.queries.push_back(std::move(conditional_query));
     }
     }
+
     return true;
     return true;
 }
 }