1; RUN: opt < %s -S -sancov -sanitizer-coverage-level=3 -enable-new-pm=0 | FileCheck %s
2; RUN: opt < %s -S -passes='module(sancov-module)' -sanitizer-coverage-level=3 | FileCheck %s
3
4; The critical edges to unreachable_bb should not be split.
5define i32 @foo(i32 %c, i32 %d) {
6; CHECK-LABEL: @foo(
7; CHECK:         switch i32 [[C:%.*]], label [[UNREACHABLE_BB:%.*]] [
8; CHECK-NEXT:    i32 0, label %exit0
9; CHECK-NEXT:    i32 1, label %exit1
10; CHECK-NEXT:    i32 2, label %cont
11; CHECK-NEXT:    ]
12; CHECK:       cont:
13; CHECK:         switch i32 [[D:%.*]], label [[UNREACHABLE_BB]] [
14; CHECK-NEXT:    i32 0, label %exit2
15; CHECK-NEXT:    i32 1, label %exit3
16; CHECK-NEXT:    i32 2, label %exit4
17; CHECK-NEXT:    ]
18; CHECK:       unreachable_bb:
19; CHECK-NEXT:    unreachable
20;
21  switch i32 %c, label %unreachable_bb [i32 0, label %exit0
22  i32 1, label %exit1
23  i32 2, label %cont]
24
25cont:
26  switch i32 %d, label %unreachable_bb [i32 0, label %exit2
27  i32 1, label %exit3
28  i32 2, label %exit4]
29
30exit0:
31  ret i32 0
32
33exit1:
34  ret i32 1
35
36exit2:
37  ret i32 2
38
39exit3:
40  ret i32 3
41
42exit4:
43  ret i32 4
44
45unreachable_bb:
46  unreachable
47}
48