xref: /llvm-project/llvm/test/Transforms/MergeFunc/debuginfo-iterators.ll (revision d2942a86d7b8fc4cba4f73294efb53a3e47dc751)
1*d2942a86SShoaib Meenai;; Ensure that the MergeFunctions pass creates thunks with the appropriate debug
2*d2942a86SShoaib Meenai;; info format set (which would otherwise assert when inlining those thunks).
3*d2942a86SShoaib Meenai; RUN: opt -S -passes=mergefunc,inline --try-experimental-debuginfo-iterators < %s | FileCheck %s
4*d2942a86SShoaib Meenai
5*d2942a86SShoaib Meenaideclare void @f1()
6*d2942a86SShoaib Meenaideclare void @f2()
7*d2942a86SShoaib Meenai
8*d2942a86SShoaib Meenaidefine void @f3() {
9*d2942a86SShoaib Meenai  call void @f1()
10*d2942a86SShoaib Meenai  call void @f2()
11*d2942a86SShoaib Meenai  ret void
12*d2942a86SShoaib Meenai}
13*d2942a86SShoaib Meenai
14*d2942a86SShoaib Meenai;; MergeFunctions will replace f4 with a thunk that calls f3. Inlining will
15*d2942a86SShoaib Meenai;; inline f3 into that thunk, which would assert if the thunk had the incorrect
16*d2942a86SShoaib Meenai;; debug info format.
17*d2942a86SShoaib Meenaidefine void @f4() {
18*d2942a86SShoaib Meenai  call void @f1()
19*d2942a86SShoaib Meenai  call void @f2()
20*d2942a86SShoaib Meenai  ret void
21*d2942a86SShoaib Meenai}
22*d2942a86SShoaib Meenai
23*d2942a86SShoaib Meenai; CHECK-LABEL: define void @f4() {
24*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f1()
25*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f2()
26*d2942a86SShoaib Meenai; CHECK-NEXT:    ret void
27*d2942a86SShoaib Meenai; CHECK-NEXT: }
28*d2942a86SShoaib Meenai
29*d2942a86SShoaib Meenai;; Both of these are interposable, so MergeFunctions will create a common thunk
30*d2942a86SShoaib Meenai;; that both will call. Inlining will inline that thunk back, which would assert
31*d2942a86SShoaib Meenai;; if the thunk had the incorrect debug info format.
32*d2942a86SShoaib Meenaidefine weak void @f5() {
33*d2942a86SShoaib Meenai  call void @f2()
34*d2942a86SShoaib Meenai  call void @f1()
35*d2942a86SShoaib Meenai  ret void
36*d2942a86SShoaib Meenai}
37*d2942a86SShoaib Meenai
38*d2942a86SShoaib Meenaidefine weak void @f6() {
39*d2942a86SShoaib Meenai  call void @f2()
40*d2942a86SShoaib Meenai  call void @f1()
41*d2942a86SShoaib Meenai  ret void
42*d2942a86SShoaib Meenai}
43*d2942a86SShoaib Meenai
44*d2942a86SShoaib Meenai; CHECK-LABEL: define weak void @f6() {
45*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f2()
46*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f1()
47*d2942a86SShoaib Meenai; CHECK-NEXT:    ret void
48*d2942a86SShoaib Meenai; CHECK-NEXT:  }
49*d2942a86SShoaib Meenai
50*d2942a86SShoaib Meenai; CHECK-LABEL: define weak void @f5() {
51*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f2()
52*d2942a86SShoaib Meenai; CHECK-NEXT:    call void @f1()
53*d2942a86SShoaib Meenai; CHECK-NEXT:    ret void
54*d2942a86SShoaib Meenai; CHECK-NEXT:  }
55