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