; RUN: opt -S -mergefunc < %s | FileCheck %s ; We should normalize to test2 rather than test1, ; because it allows us to drop test1 entirely ; CHECK-NOT: define internal void @test1() unnamed_addr ; CHECK: define void @test3() unnamed_addr ; CHECK-NEXT: call void @test2() ; CHECK-NEXT: call void @test2() declare void @dummy() define internal void @test1() unnamed_addr { call void @dummy() call void @dummy() ret void } define void @test2() unnamed_addr { call void @dummy() call void @dummy() ret void } define void @test3() unnamed_addr { call void @test1() call void @test2() ret void } ; We should normalize to the existing test6 rather than ; to a new anonymous strong backing function ; CHECK: define weak void @test5() ; CHECK-NEXT: tail call void @test6() ; CHECK: define weak void @test4() ; CHECK-NEXT: tail call void @test6() declare void @dummy2() define weak void @test4() { call void @dummy2() call void @dummy2() ret void } define weak void @test5() { call void @dummy2() call void @dummy2() ret void } define void @test6() { call void @dummy2() call void @dummy2() ret void }