[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Verifier / deoptimize-intrinsic.ll
blob62c61d42b3564d07f8080733823ae6193368a91e
1 ; RUN: not opt -verify < %s 2>&1 | FileCheck %s
3 declare i8 @llvm.experimental.deoptimize.i8(...)
4 declare void @llvm.experimental.deoptimize.isVoid(...)
5 declare cc40 void @llvm.experimental.deoptimize.double(...)
7 declare void @unknown()
9 define void @f_notail() {
10 entry:
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
17 define void @f_nodeopt() {
18 entry:
19   call void(...) @llvm.experimental.deoptimize.isVoid()
20 ; CHECK: experimental_deoptimize must have exactly one "deopt" operand bundle
21   ret void
24 define void @f_invoke() personality i8 3 {
25 entry:
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
29 ok:
30   ret void
32 not_ok:
33   %0 = landingpad { i8*, i32 }
34           filter [0 x i8*] zeroinitializer
35   ret void
38 define i8 @f_incorrect_return() {
39 entry:
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
45 ; CHECK: All llvm.experimental.deoptimize declarations must have the same calling convention