blob: efa1e5377160ee66a8249e130b62628a79b92f34 [file] [log] [blame]
; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=instructions-to-return --test FileCheck --test-arg --check-prefix=INTERESTING --test-arg %s --test-arg --input-file %s -o %t
; RUN: FileCheck --check-prefix=RESULT %s < %t
@gv = global i32 0, align 4
define i32 @has_invoke_user(ptr %arg) {
%load = load i32, ptr %arg
store i32 %load, ptr @gv
ret i32 9
}
declare i32 @__gxx_personality_v0(...)
; INTERESTING-LABEL: @invoker_keep_invoke(
; INTERESTING: %invoke
; RESULT: %invoke = invoke i32 @has_invoke_user(ptr %arg)
define void @invoker_keep_invoke(ptr %arg) personality ptr @__gxx_personality_v0 {
bb:
%invoke = invoke i32 @has_invoke_user(ptr %arg)
to label %bb3 unwind label %bb1
bb1:
landingpad { ptr, i32 }
catch ptr null
ret void
bb3:
store i32 %invoke, ptr null
ret void
}
; INTERESTING-LABEL: @invoker_drop_invoke(
; INTERESTING: %add = add i32
; RESULT-LABEL: define i32 @invoker_drop_invoke(i32 %arg0, ptr %arg1) personality ptr @__gxx_personality_v0 {
; RESULT-NEXT: bb:
; RESULT-NEXT: %add = add i32 %arg0, 9
; RESULT-NEXT: ret i32 %add
; RESULT-NEXT: }
define void @invoker_drop_invoke(i32 %arg0, ptr %arg1) personality ptr @__gxx_personality_v0 {
bb:
%add = add i32 %arg0, 9
%invoke = invoke i32 @has_invoke_user(ptr %arg1)
to label %bb3 unwind label %bb1
bb1:
landingpad { ptr, i32 }
catch ptr null
br label %bb3
bb3:
%phi = phi i32 [ %invoke, %bb ], [ %add, %bb1 ]
store i32 %phi, ptr null
ret void
}