1; RUN: opt -passes=wholeprogramdevirt -whole-program-visibility -wholeprogramdevirt-summary-action=export -wholeprogramdevirt-read-summary=%S/Inputs/export.yaml -wholeprogramdevirt-write-summary=%t -S -o - %s | FileCheck %s 2; RUN: FileCheck --check-prefix=SUMMARY %s < %t 3 4; SUMMARY: TypeIdMap: 5; SUMMARY-NEXT: typeid3: 6; SUMMARY-NEXT: TTRes: 7; SUMMARY-NEXT: Kind: Unknown 8; SUMMARY-NEXT: SizeM1BitWidth: 0 9; SUMMARY-NEXT: AlignLog2: 0 10; SUMMARY-NEXT: SizeM1: 0 11; SUMMARY-NEXT: BitMask: 0 12; SUMMARY-NEXT: InlineBits: 0 13; SUMMARY-NEXT: WPDRes: 14; SUMMARY-NEXT: 0: 15; SUMMARY-NEXT: Kind: SingleImpl 16; SUMMARY-NEXT: SingleImplName: vf3.llvm.merged 17; SUMMARY-NEXT: ResByArg: 18; SUMMARY-NEXT: typeid1: 19; SUMMARY-NEXT: TTRes: 20; SUMMARY-NEXT: Kind: Unknown 21; SUMMARY-NEXT: SizeM1BitWidth: 0 22; SUMMARY-NEXT: AlignLog2: 0 23; SUMMARY-NEXT: SizeM1: 0 24; SUMMARY-NEXT: BitMask: 0 25; SUMMARY-NEXT: InlineBits: 0 26; SUMMARY-NEXT: WPDRes: 27; SUMMARY-NEXT: 0: 28; SUMMARY-NEXT: Kind: SingleImpl 29; SUMMARY-NEXT: SingleImplName: vf1 30; SUMMARY-NEXT: ResByArg: 31; SUMMARY-NEXT: typeid2: 32; SUMMARY-NEXT: TTRes: 33; SUMMARY-NEXT: Kind: Unknown 34; SUMMARY-NEXT: SizeM1BitWidth: 0 35; SUMMARY-NEXT: AlignLog2: 0 36; SUMMARY-NEXT: SizeM1: 0 37; SUMMARY-NEXT: BitMask: 0 38; SUMMARY-NEXT: InlineBits: 0 39; SUMMARY-NEXT: WPDRes: 40; SUMMARY-NEXT: 0: 41; SUMMARY-NEXT: Kind: SingleImpl 42; SUMMARY-NEXT: SingleImplName: vf2 43; SUMMARY-NEXT: ResByArg: 44; SUMMARY-NEXT: typeid4: 45; SUMMARY-NEXT: TTRes: 46; SUMMARY-NEXT: Kind: Unknown 47; SUMMARY-NEXT: SizeM1BitWidth: 0 48; SUMMARY-NEXT: AlignLog2: 0 49; SUMMARY-NEXT: SizeM1: 0 50; SUMMARY-NEXT: BitMask: 0 51; SUMMARY-NEXT: InlineBits: 0 52; SUMMARY-NEXT: WPDRes: 53; SUMMARY-NEXT: 0: 54; SUMMARY-NEXT: Kind: SingleImpl 55; SUMMARY-NEXT: SingleImplName: vf4.llvm.merged 56; SUMMARY-NEXT: ResByArg: 57; SUMMARY-NEXT: WithGlobalValueDeadStripping: false 58; SUMMARY-NEXT: ... 59 60; CHECK: $vf4.llvm.merged = comdat largest 61$vf4 = comdat largest 62 63; CHECK: @vt1 = constant ptr @vf1 64@vt1 = constant ptr @vf1, !type !0 65 66; CHECK: @vt2 = constant ptr @vf2 67@vt2 = constant ptr @vf2, !type !1 68 69@vt3 = constant ptr @vf3, !type !2 70 71; CHECK: @vt4 = constant ptr @vf4.llvm.merged, comdat($vf4.llvm.merged) 72@vt4 = constant ptr @vf4, comdat($vf4), !type !3 73 74@vt5 = constant ptr @vf5, !type !4 75 76; CHECK: declare void @vf1(ptr) 77declare void @vf1(ptr) 78 79; CHECK: define void @vf2(ptr %0) 80define void @vf2(ptr) { 81 ret void 82} 83 84; CHECK: define hidden void @vf3.llvm.merged(ptr %0) { 85define internal void @vf3(ptr) { 86 ret void 87} 88 89; CHECK: define hidden void @vf4.llvm.merged(ptr %0) comdat { 90define internal void @vf4(ptr) comdat { 91 ret void 92} 93 94declare void @vf5(ptr) 95 96!0 = !{i32 0, !"typeid1"} 97!1 = !{i32 0, !"typeid2"} 98!2 = !{i32 0, !"typeid3"} 99!3 = !{i32 0, !"typeid4"} 100!4 = !{i32 0, !5} 101!5 = distinct !{} 102