163 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --include-generated-funcs --version 52; RUN: opt -p mergefunc -S %s | FileCheck %s3 4define void @caller_of_callers(ptr %p) {5 call void @weak_odr_caller_of_foo_1(ptr %p)6 call void @weak_odr_caller_of_foo_2(ptr %p)7 call void @weak_odr_caller_of_foo_3(ptr %p)8 9 call void @internal_caller_of_bar_1(ptr %p)10 call void @weak_odr_caller_of_bar_2(ptr %p)11 call void @weak_odr_caller_of_bar_3(ptr %p)12 13 call void @hidden_caller_of_zar_1(ptr %p)14 call void @weak_odr_caller_of_zar_2(ptr %p)15 16 ret void17}18 19define weak_odr hidden void @weak_odr_caller_of_foo_1(ptr %p) {20entry:21 tail call void @foo(ptr %p)22 tail call void @foo(ptr %p)23 tail call void @foo(ptr %p)24 ret void25}26 27define weak_odr hidden void @weak_odr_caller_of_foo_2(ptr %p) {28entry:29 tail call void @foo(ptr %p)30 tail call void @foo(ptr %p)31 tail call void @foo(ptr %p)32 ret void33}34 35define weak_odr hidden void @weak_odr_caller_of_foo_3(ptr %p) {36entry:37 tail call void @foo(ptr %p)38 tail call void @foo(ptr %p)39 tail call void @foo(ptr %p)40 ret void41}42 43declare void @foo(ptr)44 45define internal void @internal_caller_of_bar_1(ptr %p) {46entry:47 tail call void @bar(ptr %p)48 tail call void @bar(ptr %p)49 tail call void @bar(ptr %p)50 ret void51}52 53define weak_odr hidden void @weak_odr_caller_of_bar_2(ptr %p) {54entry:55 tail call void @bar(ptr %p)56 tail call void @bar(ptr %p)57 tail call void @bar(ptr %p)58 ret void59}60 61define weak_odr hidden void @weak_odr_caller_of_bar_3(ptr %p) {62entry:63 tail call void @bar(ptr %p)64 tail call void @bar(ptr %p)65 tail call void @bar(ptr %p)66 ret void67}68 69declare void @bar(ptr)70 71define hidden void @hidden_caller_of_zar_1(ptr %p) {72entry:73 tail call void @zar(ptr %p)74 tail call void @zar(ptr %p)75 tail call void @zar(ptr %p)76 ret void77}78 79define weak_odr hidden void @weak_odr_caller_of_zar_2(ptr %p) {80entry:81 tail call void @zar(ptr %p)82 tail call void @zar(ptr %p)83 tail call void @zar(ptr %p)84 ret void85}86 87declare void @zar(ptr)88; CHECK-LABEL: define void @caller_of_callers(89; CHECK-SAME: ptr [[P:%.*]]) {90; CHECK-NEXT: call void @[[GLOB0:[0-9]+]](ptr [[P]])91; CHECK-NEXT: call void @[[GLOB0]](ptr [[P]])92; CHECK-NEXT: call void @[[GLOB0]](ptr [[P]])93; CHECK-NEXT: call void @internal_caller_of_bar_1(ptr [[P]])94; CHECK-NEXT: call void @internal_caller_of_bar_1(ptr [[P]])95; CHECK-NEXT: call void @internal_caller_of_bar_1(ptr [[P]])96; CHECK-NEXT: call void @hidden_caller_of_zar_1(ptr [[P]])97; CHECK-NEXT: call void @hidden_caller_of_zar_1(ptr [[P]])98; CHECK-NEXT: ret void99;100;101; CHECK-LABEL: define private void @0(102; CHECK-SAME: ptr [[P:%.*]]) {103; CHECK-NEXT: [[ENTRY:.*:]]104; CHECK-NEXT: tail call void @foo(ptr [[P]])105; CHECK-NEXT: tail call void @foo(ptr [[P]])106; CHECK-NEXT: tail call void @foo(ptr [[P]])107; CHECK-NEXT: ret void108;109;110; CHECK-LABEL: define internal void @internal_caller_of_bar_1(111; CHECK-SAME: ptr [[P:%.*]]) {112; CHECK-NEXT: [[ENTRY:.*:]]113; CHECK-NEXT: tail call void @bar(ptr [[P]])114; CHECK-NEXT: tail call void @bar(ptr [[P]])115; CHECK-NEXT: tail call void @bar(ptr [[P]])116; CHECK-NEXT: ret void117;118;119; CHECK-LABEL: define hidden void @hidden_caller_of_zar_1(120; CHECK-SAME: ptr [[P:%.*]]) {121; CHECK-NEXT: [[ENTRY:.*:]]122; CHECK-NEXT: tail call void @zar(ptr [[P]])123; CHECK-NEXT: tail call void @zar(ptr [[P]])124; CHECK-NEXT: tail call void @zar(ptr [[P]])125; CHECK-NEXT: ret void126;127;128; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_foo_2(129; CHECK-SAME: ptr [[TMP0:%.*]]) {130; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]])131; CHECK-NEXT: ret void132;133;134; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_foo_1(135; CHECK-SAME: ptr [[TMP0:%.*]]) {136; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]])137; CHECK-NEXT: ret void138;139;140; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_foo_3(141; CHECK-SAME: ptr [[TMP0:%.*]]) {142; CHECK-NEXT: tail call void @[[GLOB0]](ptr [[TMP0]])143; CHECK-NEXT: ret void144;145;146; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_bar_2(147; CHECK-SAME: ptr [[TMP0:%.*]]) {148; CHECK-NEXT: tail call void @internal_caller_of_bar_1(ptr [[TMP0]])149; CHECK-NEXT: ret void150;151;152; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_bar_3(153; CHECK-SAME: ptr [[TMP0:%.*]]) {154; CHECK-NEXT: tail call void @internal_caller_of_bar_1(ptr [[TMP0]])155; CHECK-NEXT: ret void156;157;158; CHECK-LABEL: define weak_odr hidden void @weak_odr_caller_of_zar_2(159; CHECK-SAME: ptr [[TMP0:%.*]]) {160; CHECK-NEXT: tail call void @hidden_caller_of_zar_1(ptr [[TMP0]])161; CHECK-NEXT: ret void162;163