; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --include-generated-funcs --version 5 ; RUN: opt -p mergefunc -S %s | FileCheck %s @llvm.used = appending global [3 x ptr] [ptr @weak_odr_caller_of_foo_1, ptr @weak_odr_caller_of_foo_2, ptr @weak_odr_caller_of_foo_3] define void @caller_of_callers(ptr %p) { call void @weak_odr_caller_of_foo_1(ptr %p) call void @weak_odr_caller_of_foo_2(ptr %p) call void @weak_odr_caller_of_foo_3(ptr %p) ret void } define weak_odr void @weak_odr_caller_of_foo_1(ptr %p) { entry: tail call void @foo(ptr %p) tail call void @foo(ptr %p) tail call void @foo(ptr %p) ret void } define weak_odr void @weak_odr_caller_of_foo_2(ptr %p) { entry: tail call void @foo(ptr %p) tail call void @foo(ptr %p) tail call void @foo(ptr %p) ret void } define weak_odr void @weak_odr_caller_of_foo_3(ptr %p) { entry: tail call void @foo(ptr %p) tail call void @foo(ptr %p) tail call void @foo(ptr %p) ret void } declare void @foo(ptr) ;. ; CHECK: @llvm.used = appending global [3 x ptr] [ptr @weak_odr_caller_of_foo_1, ptr @weak_odr_caller_of_foo_2, ptr @weak_odr_caller_of_foo_3] ;. ; CHECK-LABEL: define void @caller_of_callers( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: call void @[[GLOB0:[0-9]+]](ptr [[P]]) ; CHECK-NEXT: call void @[[GLOB0]](ptr [[P]]) ; CHECK-NEXT: call void @[[GLOB0]](ptr [[P]]) ; CHECK-NEXT: ret void ; ; ; CHECK-LABEL: define private void @0( ; CHECK-SAME: ptr [[P:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*:]] ; CHECK-NEXT: tail call void @foo(ptr [[P]]) ; CHECK-NEXT: tail call void @foo(ptr [[P]]) ; CHECK-NEXT: tail call void @foo(ptr [[P]]) ; CHECK-NEXT: ret void ; ; ; CHECK-LABEL: define weak_odr void @weak_odr_caller_of_foo_2( ; CHECK-SAME: ptr [[TMP0:%.*]]) { ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) ; CHECK-NEXT: ret void ; ; ; CHECK-LABEL: define weak_odr void @weak_odr_caller_of_foo_1( ; CHECK-SAME: ptr [[TMP0:%.*]]) { ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) ; CHECK-NEXT: ret void ; ; ; CHECK-LABEL: define weak_odr void @weak_odr_caller_of_foo_3( ; CHECK-SAME: ptr [[TMP0:%.*]]) { ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) ; CHECK-NEXT: ret void ;