brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · e4fe1b8 Raw
117 lines · plain
1; RUN: opt -S -passes=mergefunc -mergefunc-use-aliases < %s | FileCheck %s2 3; Aliases should always be created for the weak functions, and4; for external functions if there is no local function5 6; CHECK: @external_external_2 = unnamed_addr alias void (ptr), ptr @external_external_17; CHECK: @weak_weak_2 = weak unnamed_addr alias void (ptr), ptr @08; CHECK: @weak_weak_1 = weak unnamed_addr alias void (ptr), ptr @09; CHECK: @weak_external_1 = weak unnamed_addr alias void (ptr), ptr @weak_external_210; CHECK: @external_weak_2 = weak unnamed_addr alias void (ptr), ptr @external_weak_111; CHECK: @weak_internal_1 = weak unnamed_addr alias void (ptr), ptr @weak_internal_212; CHECK: @internal_weak_2 = weak unnamed_addr alias void (ptr), ptr @internal_weak_113 14; A strong backing function had to be created for the weak-weak pair15 16; CHECK: define private void @0(ptr %a) unnamed_addr17; CHECK-NEXT: call void @dummy4()18 19; These internal functions are dropped in favor of the external ones20 21; CHECK-NOT: define internal void @external_internal_2(ptr %a) unnamed_addr22; CHECK-NOT: define internal void @internal_external_1(ptr %a) unnamed_addr23; CHECK-NOT: define internal void @internal_external_1(ptr %a) unnamed_addr24; CHECK-NOT: define internal void @internal_external_2(ptr %a) unnamed_addr25 26; Only used to mark which functions should be merged.27declare void @dummy1()28declare void @dummy2()29declare void @dummy3()30declare void @dummy4()31declare void @dummy5()32declare void @dummy6()33declare void @dummy7()34declare void @dummy8()35declare void @dummy9()36 37define void @external_external_1(ptr %a) unnamed_addr {38  call void @dummy1()39  ret void40}41define void @external_external_2(ptr %a) unnamed_addr {42  call void @dummy1()43  ret void44}45 46define void @external_internal_1(ptr %a) unnamed_addr {47  call void @dummy2()48  ret void49}50define internal void @external_internal_2(ptr %a) unnamed_addr {51  call void @dummy2()52  ret void53}54 55define internal void @internal_external_1(ptr %a) unnamed_addr {56  call void @dummy3()57  ret void58}59define void @internal_external_2(ptr %a) unnamed_addr {60  call void @dummy3()61  ret void62}63 64define weak void @weak_weak_1(ptr %a) unnamed_addr {65  call void @dummy4()66  ret void67}68define weak void @weak_weak_2(ptr %a) unnamed_addr {69  call void @dummy4()70  ret void71}72 73define weak void @weak_external_1(ptr %a) unnamed_addr {74  call void @dummy5()75  ret void76}77define external void @weak_external_2(ptr %a) unnamed_addr {78  call void @dummy5()79  ret void80}81 82define external void @external_weak_1(ptr %a) unnamed_addr {83  call void @dummy6()84  ret void85}86define weak void @external_weak_2(ptr %a) unnamed_addr {87  call void @dummy6()88  ret void89}90 91define weak void @weak_internal_1(ptr %a) unnamed_addr {92  call void @dummy7()93  ret void94}95define internal void @weak_internal_2(ptr %a) unnamed_addr {96  call void @dummy7()97  ret void98}99 100define internal void @internal_weak_1(ptr %a) unnamed_addr {101  call void @dummy8()102  ret void103}104define weak void @internal_weak_2(ptr %a) unnamed_addr {105  call void @dummy8()106  ret void107}108 109define internal void @internal_internal_1(ptr %a) unnamed_addr {110  call void @dummy9()111  ret void112}113define internal void @internal_internal_2(ptr %a) unnamed_addr {114  call void @dummy9()115  ret void116}117