diff options
| author | Rodrigo Locatti <reinuseslisp@airmail.cc> | 2020-09-23 06:20:59 +0000 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-23 06:20:59 +0000 | 
| commit | b8219ec83813fae1211a134f1e51d3c483fe5e2b (patch) | |
| tree | d8b6622309e5470b7355be2409348e3ac57924e1 /src/video_core | |
| parent | 2b863c9aa34e388f6c64665a2e7d8c808d598c26 (diff) | |
| parent | 0dc6967ff1030e466e8e2da399079a28181c3c09 (diff) | |
Merge pull request #4699 from lioncash/move3
control_flow: Make use of std::move in InsertBranch()
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/shader/control_flow.cpp | 27 | 
1 files changed, 14 insertions, 13 deletions
| diff --git a/src/video_core/shader/control_flow.cpp b/src/video_core/shader/control_flow.cpp index 336397cdb..4c8971615 100644 --- a/src/video_core/shader/control_flow.cpp +++ b/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.pbk_stack, state.pbk_labels, block);      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()) {              q2.address = block.end + 1;              state.queries.push_back(q2);          } -        Query conditional_query{q2}; +        auto& conditional_query = state.queries.emplace_back(q2);          if (branch->is_sync) {              if (branch->address == unassigned_branch) {                  branch->address = conditional_query.ssy_stack.top(); @@ -567,21 +567,21 @@ bool TryQuery(CFGRebuildState& state) {              conditional_query.pbk_stack.pop();          }          conditional_query.address = branch->address; -        state.queries.push_back(std::move(conditional_query));          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) { -        Query conditional_query{q2}; +        auto& conditional_query = state.queries.emplace_back(q2);          conditional_query.address = branch_case.address; -        state.queries.push_back(std::move(conditional_query));      } +      return true;  }  void InsertBranch(ASTManager& mm, const BlockBranchInfo& branch_info) { -    const auto get_expr = ([&](const Condition& cond) -> Expr { -        Expr result{}; +    const auto get_expr = [](const Condition& cond) -> Expr { +        Expr result;          if (cond.cc != ConditionCode::T) {              result = MakeExpr<ExprCondCode>(cond.cc);          } @@ -594,10 +594,10 @@ void InsertBranch(ASTManager& mm, const BlockBranchInfo& branch_info) {              }              Expr extra = MakeExpr<ExprPredicate>(pred);              if (negate) { -                extra = MakeExpr<ExprNot>(extra); +                extra = MakeExpr<ExprNot>(std::move(extra));              }              if (result) { -                return MakeExpr<ExprAnd>(extra, result); +                return MakeExpr<ExprAnd>(std::move(extra), std::move(result));              }              return extra;          } @@ -605,9 +605,10 @@ void InsertBranch(ASTManager& mm, const BlockBranchInfo& branch_info) {              return result;          }          return MakeExpr<ExprBoolean>(true); -    }); +    }; +      if (std::holds_alternative<SingleBranch>(*branch_info)) { -        const auto branch = std::get_if<SingleBranch>(branch_info.get()); +        const auto* branch = std::get_if<SingleBranch>(branch_info.get());          if (branch->address < 0) {              if (branch->kill) {                  mm.InsertReturn(get_expr(branch->condition), true); @@ -619,7 +620,7 @@ void InsertBranch(ASTManager& mm, const BlockBranchInfo& branch_info) {          mm.InsertGoto(get_expr(branch->condition), branch->address);          return;      } -    const auto multi_branch = std::get_if<MultiBranch>(branch_info.get()); +    const auto* multi_branch = std::get_if<MultiBranch>(branch_info.get());      for (const auto& branch_case : multi_branch->branches) {          mm.InsertGoto(MakeExpr<ExprGprEqual>(multi_branch->gpr, branch_case.cmp_value),                        branch_case.address); | 
