[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / Inline / guard-intrinsic.ll
blob76d683df6e9b9b69d82f4cc35541d8c7188bd70f
1 ; RUN: opt -S -always-inline < %s | FileCheck %s
3 declare void @llvm.experimental.guard(i1, ...)
5 define i8 @callee(i1* %c_ptr) alwaysinline {
6   %c = load volatile i1, i1* %c_ptr
7   call void(i1, ...) @llvm.experimental.guard(i1 %c, i32 1) [ "deopt"(i32 1) ]
8   ret i8 5
11 define void @caller_0(i1* %c, i8* %ptr) {
12 ; CHECK-LABEL: @caller_0(
13 entry:
14 ; CHECK:  [[COND:%[^ ]+]] = load volatile i1, i1* %c
15 ; CHECK-NEXT:  call void (i1, ...) @llvm.experimental.guard(i1 [[COND]], i32 1) [ "deopt"(i32 2, i32 1) ]
16 ; CHECK-NEXT:  store i8 5, i8* %ptr
18   %v = call i8 @callee(i1* %c)  [ "deopt"(i32 2) ]
19   store i8 %v, i8* %ptr
20   ret void
23 define i32 @caller_1(i1* %c, i8* %ptr) personality i8 3 {
24 ; CHECK-LABEL: @caller_1(
25 ; CHECK:  [[COND:%[^ ]+]] = load volatile i1, i1* %c
26 ; CHECK-NEXT:  call void (i1, ...) @llvm.experimental.guard(i1 [[COND]], i32 1) [ "deopt"(i32 3, i32 1) ]
27 ; CHECK-NEXT:  br label %normal
28 entry:
29   %v = invoke i8 @callee(i1* %c)  [ "deopt"(i32 3) ] to label %normal
30        unwind label %unwind
32 unwind:
33   %lp = landingpad i32 cleanup
34   ret i32 43
36 normal:
37   store i8 %v, i8* %ptr
38   ret i32 42