diff options
Diffstat (limited to 'llvm/test/Transforms/Inline/inline-assume.ll')
-rw-r--r-- | llvm/test/Transforms/Inline/inline-assume.ll | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/inline-assume.ll b/llvm/test/Transforms/Inline/inline-assume.ll new file mode 100644 index 00000000000..d8e2a26d896 --- /dev/null +++ b/llvm/test/Transforms/Inline/inline-assume.ll @@ -0,0 +1,32 @@ +; RUN: opt -inline -S -o - < %s | FileCheck %s +; RUN: opt -passes='cgscc(inline)' -S < %s | FileCheck %s + +%0 = type opaque +%struct.Foo = type { i32, %0* } + +; Test that we don't crash when inlining @bar (rdar://22521387). +define void @foo(%struct.Foo* align 4 %a) { +entry: + call fastcc void @bar(%struct.Foo* nonnull align 4 undef) + +; CHECK: call void @llvm.assume(i1 undef) +; CHECK: unreachable + + ret void +} + +define fastcc void @bar(%struct.Foo* align 4 %a) { +; CHECK-LABEL: @bar +entry: + %b = getelementptr inbounds %struct.Foo, %struct.Foo* %a, i32 0, i32 1 + br i1 undef, label %if.end, label %if.then.i.i + +if.then.i.i: + call void @llvm.assume(i1 undef) + unreachable + +if.end: + ret void +} + +declare void @llvm.assume(i1) |