diff options
Diffstat (limited to 'llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll')
-rw-r--r-- | llvm/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll | 46 |
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 +} |