33
44; RUN: opt -passes=wholeprogramdevirt -whole-program-visibility -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck --check-prefixes=CHECK,RETP %s
55
6- ; RUN: opt -passes='wholeprogramdevirt,default<O3>' -whole-program-visibility -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck --check-prefixes=CHECK %s
6+ ; RUN: opt -passes='wholeprogramdevirt,default<O3>' -whole-program-visibility -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck --check-prefixes=CHECK,O3 %s
77
88; RUN: FileCheck --check-prefix=SUMMARY %s < %t
99
@@ -159,7 +159,7 @@ declare ptr @llvm.load.relative.i32(ptr, i32)
159159
160160; CHECK-LABEL: define i32 @fn1
161161; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
162- define i32 @fn1 (ptr %obj ) #0 {
162+ define i32 @fn1 (ptr %obj ) #0 !prof !10 {
163163 %vtable = load ptr , ptr %obj
164164 %p = call i1 @llvm.type.test (ptr %vtable , metadata !"typeid1" )
165165 call void @llvm.assume (i1 %p )
@@ -172,7 +172,7 @@ define i32 @fn1(ptr %obj) #0 {
172172
173173; CHECK-LABEL: define i32 @fn1_rv
174174; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
175- define i32 @fn1_rv (ptr %obj ) #0 {
175+ define i32 @fn1_rv (ptr %obj ) #0 !prof !10 {
176176 %vtable = load ptr , ptr %obj
177177 %p = call i1 @llvm.type.test (ptr %vtable , metadata !"typeid1_rv" )
178178 call void @llvm.assume (i1 %p )
@@ -185,7 +185,7 @@ define i32 @fn1_rv(ptr %obj) #0 {
185185
186186; CHECK-LABEL: define i32 @fn2
187187; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
188- define i32 @fn2 (ptr %obj ) #0 {
188+ define i32 @fn2 (ptr %obj ) #0 !prof !10 {
189189 %vtable = load ptr , ptr %obj
190190 %p = call i1 @llvm.type.test (ptr %vtable , metadata !"typeid2" )
191191 call void @llvm.assume (i1 %p )
@@ -197,7 +197,7 @@ define i32 @fn2(ptr %obj) #0 {
197197
198198; CHECK-LABEL: define i32 @fn2_rv
199199; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
200- define i32 @fn2_rv (ptr %obj ) #0 {
200+ define i32 @fn2_rv (ptr %obj ) #0 !prof !10 {
201201 %vtable = load ptr , ptr %obj
202202 %p = call i1 @llvm.type.test (ptr %vtable , metadata !"typeid2_rv" )
203203 call void @llvm.assume (i1 %p )
@@ -209,7 +209,7 @@ define i32 @fn2_rv(ptr %obj) #0 {
209209
210210; CHECK-LABEL: define i32 @fn3
211211; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
212- define i32 @fn3 (ptr %obj ) #0 {
212+ define i32 @fn3 (ptr %obj ) #0 !prof !10 {
213213 %vtable = load ptr , ptr %obj
214214 %p = call i1 @llvm.type.test (ptr %vtable , metadata !4 )
215215 call void @llvm.assume (i1 %p )
@@ -222,7 +222,7 @@ define i32 @fn3(ptr %obj) #0 {
222222
223223; CHECK-LABEL: define i32 @fn3_rv
224224; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
225- define i32 @fn3_rv (ptr %obj ) #0 {
225+ define i32 @fn3_rv (ptr %obj ) #0 !prof !10 {
226226 %vtable = load ptr , ptr %obj
227227 %p = call i1 @llvm.type.test (ptr %vtable , metadata !9 )
228228 call void @llvm.assume (i1 %p )
@@ -235,7 +235,7 @@ define i32 @fn3_rv(ptr %obj) #0 {
235235
236236; CHECK-LABEL: define i32 @fn4
237237; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
238- define i32 @fn4 (ptr %obj ) #0 {
238+ define i32 @fn4 (ptr %obj ) #0 !prof !10 {
239239 %p = call i1 @llvm.type.test (ptr @vt1_1 , metadata !"typeid1" )
240240 call void @llvm.assume (i1 %p )
241241 %fptr = load ptr , ptr @vt1_1
@@ -247,7 +247,7 @@ define i32 @fn4(ptr %obj) #0 {
247247
248248; CHECK-LABEL: define i32 @fn4_cpy
249249; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
250- define i32 @fn4_cpy (ptr %obj ) #0 {
250+ define i32 @fn4_cpy (ptr %obj ) #0 !prof !10 {
251251 %p = call i1 @llvm.type.test (ptr @vt1_1 , metadata !"typeid1" )
252252 call void @llvm.assume (i1 %p )
253253 %fptr = load ptr , ptr @vt1_1
@@ -259,7 +259,7 @@ define i32 @fn4_cpy(ptr %obj) #0 {
259259
260260; CHECK-LABEL: define i32 @fn4_rv
261261; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
262- define i32 @fn4_rv (ptr %obj ) #0 {
262+ define i32 @fn4_rv (ptr %obj ) #0 !prof !10 {
263263 %p = call i1 @llvm.type.test (ptr @vt1_1_rv , metadata !"typeid1_rv" )
264264 call void @llvm.assume (i1 %p )
265265 %fptr = call ptr @llvm.load.relative.i32 (ptr @vt1_1_rv , i32 0 )
@@ -271,7 +271,7 @@ define i32 @fn4_rv(ptr %obj) #0 {
271271
272272; CHECK-LABEL: define i32 @fn4_rv_cpy
273273; CHECK-NOT: call void (...) @llvm.icall.branch.funnel
274- define i32 @fn4_rv_cpy (ptr %obj ) #0 {
274+ define i32 @fn4_rv_cpy (ptr %obj ) #0 !prof !10 {
275275 %p = call i1 @llvm.type.test (ptr @vt1_1_rv , metadata !"typeid1_rv" )
276276 call void @llvm.assume (i1 %p )
277277 %fptr = call ptr @llvm.load.relative.i32 (ptr @vt1_1_rv , i32 0 )
@@ -281,14 +281,18 @@ define i32 @fn4_rv_cpy(ptr %obj) #0 {
281281 ret i32 %result
282282}
283283
284- ; CHECK-LABEL: define hidden void @__typeid_typeid1_0_branch_funnel(ptr nest %0, ...)
284+ ; CHECK-LABEL: define hidden void @__typeid_typeid1_0_branch_funnel(ptr nest %0, ...) !prof !11
285285; CHECK-NEXT: musttail call void (...) @llvm.icall.branch.funnel(ptr %0, ptr {{(nonnull )?}}@vt1_1, ptr {{(nonnull )?}}@vf1_1, ptr {{(nonnull )?}}@vt1_2, ptr {{(nonnull )?}}@vf1_2, ...)
286286
287- ; CHECK-LABEL: define hidden void @__typeid_typeid1_rv_0_branch_funnel(ptr nest %0, ...)
287+ ; CHECK-LABEL: define hidden void @__typeid_typeid1_rv_0_branch_funnel(ptr nest %0, ...) !prof !11
288288; CHECK-NEXT: musttail call void (...) @llvm.icall.branch.funnel(ptr %0, ptr {{(nonnull )?}}@vt1_1_rv, ptr {{(nonnull )?}}@vf1_1, ptr {{(nonnull )?}}@vt1_2_rv, ptr {{(nonnull )?}}@vf1_2, ...)
289289
290- ; CHECK: define internal void @branch_funnel(ptr
291- ; CHECK: define internal void @branch_funnel.1(ptr
290+ ; CHECK: define internal void @branch_funnel(ptr {{.*}})
291+ ; RETP-SAME !prof !10
292+ ; NORETP-SAME !prof !11
293+ ; CHECK: define internal void @branch_funnel.1(ptr {{.*}})
294+ ; RETP-SAME !prof !10
295+ ; NORETP-SAME !prof !11
292296
293297declare i1 @llvm.type.test (ptr , metadata )
294298declare void @llvm.assume (i1 )
@@ -303,5 +307,6 @@ declare void @llvm.assume(i1)
303307!7 = !{i32 0 , !"typeid3_rv" }
304308!8 = !{i32 0 , !9 }
305309!9 = distinct !{}
310+ !10 = !{!"function_entry_count" , i64 1000 }
306311
307312attributes #0 = { "target-features" ="+retpoline" }
0 commit comments