llvm-mirror/test/Transforms/SimplifyCFG/invoke_unwind.ll
Yevgeny Rouban d58eac3927 [IR] Convert profile metadata in createCallMatchingInvoke()
When an invoke instruction is converted to a call its
profile metadata is dropped because it has incompatible
format (see commit 16ad6eeb94ff).
This patch adds an attempt to convert profile data to
format of the call instruction. This used to work well
before the commit dcfa78a4ccec.

Reviewers: reames
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D82071
2020-06-20 12:10:31 +07:00

80 lines
2.1 KiB
LLVM

; RUN: opt < %s -simplifycfg -S | FileCheck %s
declare void @bar()
; This testcase checks to see if the simplifycfg pass is converting invoke
; instructions to call instructions if the handler just rethrows the exception.
define i32 @test1() personality i32 (...)* @__gxx_personality_v0 {
; CHECK-LABEL: @test1(
; CHECK-NEXT: call void @bar(), !prof ![[PROF:[0-9]+]]
; CHECK-NEXT: ret i32 0
invoke void @bar( )
to label %1 unwind label %Rethrow, !prof !0
ret i32 0
Rethrow:
%exn = landingpad {i8*, i32}
catch i8* null
resume { i8*, i32 } %exn
}
!0 = !{!"branch_weights", i32 369, i32 2}
define i32 @test2() personality i32 (...)* @__gxx_personality_v0 {
; CHECK-LABEL: @test2(
; CHECK-NEXT: call void @bar() [ "foo"(i32 100) ]
; CHECK-NEXT: ret i32 0
invoke void @bar( ) [ "foo"(i32 100) ]
to label %1 unwind label %Rethrow
ret i32 0
Rethrow:
%exn = landingpad {i8*, i32}
catch i8* null
resume { i8*, i32 } %exn
}
declare i64 @dummy1()
declare i64 @dummy2()
; This testcase checks to see if simplifycfg pass can convert two invoke
; instructions to call instructions if they share a common trivial unwind
; block.
define i64 @test3(i1 %cond) personality i32 (...)* @__gxx_personality_v0 {
entry:
; CHECK-LABEL: @test3(
; CHECK: %call1 = call i64 @dummy1()
; CHECK: %call2 = call i64 @dummy2()
; CHECK-NOT: resume { i8*, i32 } %lp
br i1 %cond, label %br1, label %br2
br1:
%call1 = invoke i64 @dummy1()
to label %invoke.cont unwind label %lpad1
br2:
%call2 = invoke i64 @dummy2()
to label %invoke.cont unwind label %lpad2
invoke.cont:
%c = phi i64 [%call1, %br1], [%call2, %br2]
ret i64 %c
lpad1:
%0 = landingpad { i8*, i32 }
cleanup
br label %rethrow
rethrow:
%lp = phi { i8*, i32 } [%0, %lpad1], [%1, %lpad2]
resume { i8*, i32 } %lp
lpad2:
%1 = landingpad { i8*, i32 }
cleanup
br label %rethrow
}
declare i32 @__gxx_personality_v0(...)
; CHECK: ![[PROF]] = !{!"branch_weights", i32 371}