| ; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s |
| |
| ; Test that a lifetime intrinsic isn't removed because that would change semantics |
| |
| ; CHECK: foo |
| ; CHECK: entry: |
| ; CHECK: bb0: |
| ; CHECK: bb1: |
| ; CHECK: ret |
| define void @foo(i1 %x) { |
| entry: |
| %a = alloca i8 |
| call void @llvm.lifetime.start.p0(i64 -1, ptr %a) nounwind |
| br i1 %x, label %bb0, label %bb1 |
| |
| bb0: |
| call void @llvm.lifetime.end.p0(i64 -1, ptr %a) nounwind |
| br label %bb1 |
| |
| bb1: |
| call void @f() |
| ret void |
| } |
| |
| declare void @f() |
| |
| declare void @llvm.lifetime.start.p0(i64, ptr nocapture) nounwind |
| |
| declare void @llvm.lifetime.end.p0(i64, ptr nocapture) nounwind |