1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -always-inline < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.experimental.guard(i1, ...) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i8 @callee(i1* %c_ptr) alwaysinline { 6*9880d681SAndroid Build Coastguard Worker %c = load volatile i1, i1* %c_ptr 7*9880d681SAndroid Build Coastguard Worker call void(i1, ...) @llvm.experimental.guard(i1 %c, i32 1) [ "deopt"(i32 1) ] 8*9880d681SAndroid Build Coastguard Worker ret i8 5 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine void @caller_0(i1* %c, i8* %ptr) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @caller_0( 13*9880d681SAndroid Build Coastguard Workerentry: 14*9880d681SAndroid Build Coastguard Worker; CHECK: [[COND:%[^ ]+]] = load volatile i1, i1* %c 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND]], i32 1) [ "deopt"(i32 2, i32 1) ] 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: store i8 5, i8* %ptr 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker %v = call i8 @callee(i1* %c) [ "deopt"(i32 2) ] 19*9880d681SAndroid Build Coastguard Worker store i8 %v, i8* %ptr 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine i32 @caller_1(i1* %c, i8* %ptr) personality i8 3 { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @caller_1( 25*9880d681SAndroid Build Coastguard Worker; CHECK: [[COND:%[^ ]+]] = load volatile i1, i1* %c 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 [[COND]], i32 1) [ "deopt"(i32 3, i32 1) ] 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br label %normal 28*9880d681SAndroid Build Coastguard Workerentry: 29*9880d681SAndroid Build Coastguard Worker %v = invoke i8 @callee(i1* %c) [ "deopt"(i32 3) ] to label %normal 30*9880d681SAndroid Build Coastguard Worker unwind label %unwind 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerunwind: 33*9880d681SAndroid Build Coastguard Worker %lp = landingpad i32 cleanup 34*9880d681SAndroid Build Coastguard Worker ret i32 43 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workernormal: 37*9880d681SAndroid Build Coastguard Worker store i8 %v, i8* %ptr 38*9880d681SAndroid Build Coastguard Worker ret i32 42 39*9880d681SAndroid Build Coastguard Worker} 40