brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · dde36d4 Raw
99 lines · plain
1; RUN: opt < %s -passes='globaldce<vfe-linkage-unit-visibility>' -S | FileCheck %s2; RUN: opt < %s -passes='lto<O2>' -S | FileCheck %s3 4; structs A, B and C have vcall_visibility of public, linkage-unit and5; translation-unit respectively. This test is run after LTO linking (the6; pass parameter simulates how GlobalDCE is invoked from the regular LTO7; pipeline), so B and C can be VFE'd.8 9;; Try again without being in the LTO post link, we can only eliminate C.10; RUN: opt < %s -passes='globaldce' -S | FileCheck %s --check-prefix=NO-LTO11; RUN: opt < %s -passes='default<O2>' -S | FileCheck %s --check-prefix=NO-LTO12 13target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"14 15%struct.A = type { ptr }16 17@_ZTV1A = hidden unnamed_addr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN1A3fooEv] }, align 8, !type !0, !type !1, !vcall_visibility !218 19define internal void @_ZN1AC2Ev(ptr %this) {20entry:21  store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1A, i64 0, i32 0, i64 2), ptr %this, align 822  ret void23}24 25; CHECK: define {{.*}} @_ZN1A3fooEv(26; NO-LTO: define {{.*}} @_ZN1A3fooEv(27define internal void @_ZN1A3fooEv(ptr nocapture %this) {28entry:29  ret void30}31 32define dso_local ptr @_Z6make_Av() {33entry:34  %call = tail call ptr @_Znwm(i64 8)35  tail call void @_ZN1AC2Ev(ptr %call)36  ret ptr %call37}38 39 40%struct.B = type { ptr }41 42@_ZTV1B = hidden unnamed_addr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN1B3fooEv] }, align 8, !type !0, !type !1, !vcall_visibility !343 44define internal void @_ZN1BC2Ev(ptr %this) {45entry:46  store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1B, i64 0, i32 0, i64 2), ptr %this, align 847  ret void48}49 50; CHECK-NOT: define {{.*}} @_ZN1B3fooEv(51; NO-LTO: define {{.*}} @_ZN1B3fooEv(52define internal void @_ZN1B3fooEv(ptr nocapture %this) {53entry:54  ret void55}56 57define dso_local ptr @_Z6make_Bv() {58entry:59  %call = tail call ptr @_Znwm(i64 8)60  tail call void @_ZN1BC2Ev(ptr %call)61  ret ptr %call62}63 64 65%struct.C = type { ptr }66 67@_ZTV1C = hidden unnamed_addr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN1C3fooEv] }, align 8, !type !0, !type !1, !vcall_visibility !468 69define internal void @_ZN1CC2Ev(ptr %this) {70entry:71  store ptr getelementptr inbounds inrange(-16, 8) ({ [3 x ptr] }, ptr @_ZTV1C, i64 0, i32 0, i64 2), ptr %this, align 872  ret void73}74 75; CHECK-NOT: define {{.*}} @_ZN1C3fooEv(76; NO-LTO-NOT: define {{.*}} @_ZN1C3fooEv(77define internal void @_ZN1C3fooEv(ptr nocapture %this) {78entry:79  ret void80}81 82define dso_local ptr @_Z6make_Cv() {83entry:84  %call = tail call ptr @_Znwm(i64 8)85  tail call void @_ZN1CC2Ev(ptr %call)86  ret ptr %call87}88 89declare dso_local noalias nonnull ptr @_Znwm(i64)90 91!llvm.module.flags = !{!6}92 93!0 = !{i64 16, !"_ZTS1A"}94!1 = !{i64 16, !"_ZTSM1AFvvE.virtual"}95!2 = !{i64 0} ; public vcall visibility96!3 = !{i64 1} ; linkage-unit vcall visibility97!4 = !{i64 2} ; translation-unit vcall visibility98!6 = !{i32 1, !"Virtual Function Elim", i32 1}99