|  | ; 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 | 
|  | } |