summaryrefslogtreecommitdiffstats
path: root/llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll')
-rw-r--r--llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll46
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll b/llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll
new file mode 100644
index 00000000000..ad6cd574d7e
--- /dev/null
+++ b/llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll
@@ -0,0 +1,46 @@
+; RUN: opt < %s -S -sancov -sanitizer-coverage-level=3 | FileCheck %s
+
+; The critical edges to unreachable_bb should not be split.
+define i32 @foo(i32 %c, i32 %d) {
+; CHECK-LABEL: @foo(
+; CHECK: switch i32 [[C:%.*]], label [[UNREACHABLE_BB:%.*]] [
+; CHECK-NEXT: i32 0, label %exit0
+; CHECK-NEXT: i32 1, label %exit1
+; CHECK-NEXT: i32 2, label %cont
+; CHECK-NEXT: ]
+; CHECK: cont:
+; CHECK: switch i32 [[D:%.*]], label [[UNREACHABLE_BB]] [
+; CHECK-NEXT: i32 0, label %exit2
+; CHECK-NEXT: i32 1, label %exit3
+; CHECK-NEXT: i32 2, label %exit4
+; CHECK-NEXT: ]
+; CHECK: unreachable_bb:
+; CHECK-NEXT: unreachable
+;
+ switch i32 %c, label %unreachable_bb [i32 0, label %exit0
+ i32 1, label %exit1
+ i32 2, label %cont]
+
+cont:
+ switch i32 %d, label %unreachable_bb [i32 0, label %exit2
+ i32 1, label %exit3
+ i32 2, label %exit4]
+
+exit0:
+ ret i32 0
+
+exit1:
+ ret i32 1
+
+exit2:
+ ret i32 2
+
+exit3:
+ ret i32 3
+
+exit4:
+ ret i32 4
+
+unreachable_bb:
+ unreachable
+}
OpenPOWER on IntegriCloud