| ; 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 @linkonce_odr_caller_of_foo_1, ptr @linkonce_odr_caller_of_foo_2, ptr @linkonce_odr_caller_of_foo_3] |
| |
| define void @caller_of_callers(ptr %p) { |
| call void @linkonce_odr_caller_of_foo_1(ptr %p) |
| call void @linkonce_odr_caller_of_foo_2(ptr %p) |
| call void @linkonce_odr_caller_of_foo_3(ptr %p) |
| ret void |
| } |
| |
| define linkonce_odr void @linkonce_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 linkonce_odr void @linkonce_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 linkonce_odr void @linkonce_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 @linkonce_odr_caller_of_foo_1, ptr @linkonce_odr_caller_of_foo_2, ptr @linkonce_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 linkonce_odr void @linkonce_odr_caller_of_foo_2( |
| ; CHECK-SAME: ptr [[TMP0:%.*]]) { |
| ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) |
| ; CHECK-NEXT: ret void |
| ; |
| ; |
| ; CHECK-LABEL: define linkonce_odr void @linkonce_odr_caller_of_foo_1( |
| ; CHECK-SAME: ptr [[TMP0:%.*]]) { |
| ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) |
| ; CHECK-NEXT: ret void |
| ; |
| ; |
| ; CHECK-LABEL: define linkonce_odr void @linkonce_odr_caller_of_foo_3( |
| ; CHECK-SAME: ptr [[TMP0:%.*]]) { |
| ; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]]) |
| ; CHECK-NEXT: ret void |
| ; |