Coverage Report

Created: 2026-09-28 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/spirv-tools/source/opt/block_merge_pass.cpp
Line
Count
Source
1
// Copyright (c) 2017 The Khronos Group Inc.
2
// Copyright (c) 2017 Valve Corporation
3
// Copyright (c) 2017 LunarG Inc.
4
//
5
// Licensed under the Apache License, Version 2.0 (the "License");
6
// you may not use this file except in compliance with the License.
7
// You may obtain a copy of the License at
8
//
9
//     http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing, software
12
// distributed under the License is distributed on an "AS IS" BASIS,
13
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
// See the License for the specific language governing permissions and
15
// limitations under the License.
16
17
#include "source/opt/block_merge_pass.h"
18
19
#include "source/opt/block_merge_util.h"
20
#include "source/opt/ir_context.h"
21
22
namespace spvtools {
23
namespace opt {
24
25
21.9k
bool BlockMergePass::MergeBlocks(Function* func) {
26
21.9k
  bool modified = false;
27
981k
  for (auto bi = func->begin(); bi != func->end();) {
28
    // Don't bother trying to merge unreachable blocks.
29
959k
    if (context()->IsReachable(*bi) &&
30
938k
        blockmergeutil::CanMergeWithSuccessor(context(), &*bi)) {
31
594k
      blockmergeutil::MergeWithSuccessor(context(), func, bi);
32
      // Reprocess block.
33
594k
      modified = true;
34
594k
    } else {
35
364k
      ++bi;
36
364k
    }
37
959k
  }
38
21.9k
  return modified;
39
21.9k
}
40
41
23.4k
Pass::Status BlockMergePass::Process() {
42
  // Process all entry point functions.
43
23.4k
  ProcessFunction pfn = [this](Function* fp) { return MergeBlocks(fp); };
44
23.4k
  bool modified = context()->ProcessReachableCallTree(pfn);
45
23.4k
  return modified ? Status::SuccessWithChange : Status::SuccessWithoutChange;
46
23.4k
}
47
48
39.4k
BlockMergePass::BlockMergePass() = default;
49
50
}  // namespace opt
51
}  // namespace spvtools