blob: 62c61d42b3564d07f8080733823ae6193368a91e [file] [log] [blame]
Sanjoy Dasf9e72192016-03-11 19:08:34 +00001; RUN: not opt -verify < %s 2>&1 | FileCheck %s
2
3declare i8 @llvm.experimental.deoptimize.i8(...)
4declare void @llvm.experimental.deoptimize.isVoid(...)
Sanjoy Dasd2e75bd2016-05-12 01:17:38 +00005declare cc40 void @llvm.experimental.deoptimize.double(...)
Sanjoy Dasf9e72192016-03-11 19:08:34 +00006
7declare void @unknown()
8
9define void @f_notail() {
10entry:
11 call void(...) @llvm.experimental.deoptimize.isVoid(i32 0) [ "deopt"() ]
12; CHECK: calls to experimental_deoptimize must be followed by a return
13 call void @unknown()
14 ret void
15}
16
17define void @f_nodeopt() {
18entry:
19 call void(...) @llvm.experimental.deoptimize.isVoid()
20; CHECK: experimental_deoptimize must have exactly one "deopt" operand bundle
21 ret void
22}
23
24define void @f_invoke() personality i8 3 {
25entry:
26 invoke void(...) @llvm.experimental.deoptimize.isVoid(i32 0, float 0.0) to label %ok unwind label %not_ok
27; CHECK: experimental_deoptimize cannot be invoked
28
29ok:
30 ret void
31
32not_ok:
33 %0 = landingpad { i8*, i32 }
34 filter [0 x i8*] zeroinitializer
35 ret void
36}
37
38define i8 @f_incorrect_return() {
39entry:
40 %val = call i8(...) @llvm.experimental.deoptimize.i8() [ "deopt"() ]
41; CHECK: calls to experimental_deoptimize must be followed by a return of the value computed by experimental_deoptimize
42 ret i8 0
43}
Sanjoy Dasd2e75bd2016-05-12 01:17:38 +000044
45; CHECK: All llvm.experimental.deoptimize declarations must have the same calling convention