| ;; Test if temporary labels are generated for each indirect callsite. | |
| ;; Test if the .llvm.callgraph section contains the MD5 hash of callees' type (type id) | |
| ;; is correctly paired with its corresponding temporary label generated for indirect | |
| ;; call sites annotated with !callee_type metadata. | |
| ;; Test if the .llvm.callgraph section contains unique direct callees. | |
| ; RUN: llc -mtriple=arm-unknown-linux --call-graph-section -o - < %s | FileCheck %s | |
| ; RUN: llc -mtriple=thumbv7m-unknown-none-eabi --call-graph-section -o - < %s | FileCheck %s | |
| ; RUN: llc -mtriple=thumbv6m-unknown-none-eabi --call-graph-section -o - < %s | FileCheck %s | |
| declare !callgraph !0 void @direct_foo() | |
| declare !callgraph !1 i32 @direct_bar(i8) | |
| declare !callgraph !2 ptr @direct_baz(ptr) | |
| ; CHECK: ball: | |
| define ptr @ball() { | |
| entry: | |
| call void @direct_foo() | |
| %fp_foo_val = load ptr, ptr null, align 8 | |
| call void (...) %fp_foo_val(), !callee_type !0 | |
| call void @direct_foo() | |
| %fp_bar_val = load ptr, ptr null, align 8 | |
| %call_fp_bar = call i32 %fp_bar_val(i8 0), !callee_type !2 | |
| %call_fp_bar_direct = call i32 @direct_bar(i8 1) | |
| %fp_baz_val = load ptr, ptr null, align 8 | |
| %call_fp_baz = call ptr %fp_baz_val(ptr null), !callee_type !4 | |
| call void @direct_foo() | |
| %call_fp_baz_direct = call ptr @direct_baz(ptr null) | |
| call void @direct_foo() | |
| ret ptr %call_fp_baz | |
| } | |
| !0 = !{!1} | |
| !1 = !{!"_ZTSFvE"} | |
| !2 = !{!3} | |
| !3 = !{!"_ZTSFicE"} | |
| !4 = !{!5} | |
| !5 = !{!"_ZTSFPvS_E"} | |
| ; CHECK: .section .llvm.callgraph,"o",%llvm_call_graph,.text | |
| ;; Version | |
| ; CHECK-NEXT: .byte 0 | |
| ;; Flags | |
| ; CHECK-NEXT: .byte 7 | |
| ;; Function Entry PC | |
| ; CHECK-NEXT: .long ball | |
| ;; Function type ID -- set to 0 as no type metadata attached to function. | |
| ; CHECK-NEXT: .long 0 | |
| ; CHECK-NEXT: .long 0 | |
| ;; Number of unique direct callees. | |
| ; CHECK-NEXT: .byte 3 | |
| ;; Direct callees. | |
| ; CHECK-NEXT: .long direct_foo | |
| ; CHECK-NEXT: .long direct_bar | |
| ; CHECK-NEXT: .long direct_baz | |
| ;; Number of unique indirect target type IDs. | |
| ; CHECK-NEXT: .byte 3 | |
| ;; Indirect type IDs. | |
| ; CHECK-NEXT: .long 3869454308 | |
| ; CHECK-NEXT: .long 1534046230 | |
| ; CHECK-NEXT: .long 1192513734 | |
| ; CHECK-NEXT: .long 33125428 | |
| ; CHECK-NEXT: .long 1749022016 | |
| ; CHECK-NEXT: .long 2360566446 |