forked from OSchip/llvm-project
Simplify WPD test case for hybrid LTO and thinTLO.
1) remove verbose information (function linkage types, alignment, TBAA) 2) remove unused element or replace irrelevant element with null (as placeholders) in virtual table, remove unused definitions of deleted elements accordingly. Differential Revision: https://reviews.llvm.org/D116071
This commit is contained in:
parent
cd407f6e52
commit
55c71c9eac
|
@ -3,124 +3,37 @@ source_filename = "lib.cc"
|
||||||
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
%class.Derived = type { %class.Base }
|
%Derived = type { %Base }
|
||||||
%class.Base = type { i32 (...)** }
|
%Base = type { i32 (...)** }
|
||||||
|
|
||||||
$_ZN7DerivedD2Ev = comdat any
|
@_ZTV7Derived = constant { [3 x i8*] } { [3 x i8*] [i8* null, i8* null, i8* bitcast (void (%Derived*)* @_ZN7DerivedD0Ev to i8*)] }, !type !0, !type !1, !vcall_visibility !2
|
||||||
|
@_ZTV4Base = constant { [3 x i8*] } { [3 x i8*] [i8* null, i8* null, i8* bitcast (void (%Base*)* @_ZN4BaseD0Ev to i8*)] }, !type !0, !vcall_visibility !2
|
||||||
|
|
||||||
$_ZN7DerivedD0Ev = comdat any
|
define void @_Z3fooP4Base(%Base* %b) {
|
||||||
|
|
||||||
$_ZN4BaseD2Ev = comdat any
|
|
||||||
|
|
||||||
$_ZN4BaseD0Ev = comdat any
|
|
||||||
|
|
||||||
$_ZTS4Base = comdat any
|
|
||||||
|
|
||||||
$_ZTI4Base = comdat any
|
|
||||||
|
|
||||||
$_ZTV4Base = comdat any
|
|
||||||
|
|
||||||
@_ZTV7Derived = hidden unnamed_addr constant { [5 x i8*] } { [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI7Derived to i8*), i8* bitcast (void (%class.Derived*)* @_ZN7DerivedD2Ev to i8*), i8* bitcast (void (%class.Derived*)* @_ZN7DerivedD0Ev to i8*), i8* bitcast (void (%class.Derived*)* @_ZN7Derived1xEv to i8*)] }, align 8, !type !0, !type !1, !type !2, !type !3, !vcall_visibility !4
|
|
||||||
@_ZTVN10__cxxabiv120__si_class_type_infoE = external dso_local global i8*
|
|
||||||
@_ZTS7Derived = hidden constant [9 x i8] c"7Derived\00", align 1
|
|
||||||
@_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global i8*
|
|
||||||
@_ZTS4Base = linkonce_odr hidden constant [6 x i8] c"4Base\00", comdat, align 1
|
|
||||||
@_ZTI4Base = linkonce_odr hidden constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @_ZTS4Base, i32 0, i32 0) }, comdat, align 8
|
|
||||||
@_ZTI7Derived = hidden constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @_ZTS7Derived, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTI4Base to i8*) }, align 8
|
|
||||||
@_ZTV4Base = linkonce_odr hidden unnamed_addr constant { [5 x i8*] } { [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI4Base to i8*), i8* bitcast (void (%class.Base*)* @_ZN4BaseD2Ev to i8*), i8* bitcast (void (%class.Base*)* @_ZN4BaseD0Ev to i8*), i8* bitcast (void ()* @__cxa_pure_virtual to i8*)] }, comdat, align 8, !type !0, !type !1, !vcall_visibility !4
|
|
||||||
@str = private unnamed_addr constant [11 x i8] c"Derived::x\00", align 1
|
|
||||||
@str.3 = private unnamed_addr constant [23 x i8] c"In Derived::~Derived()\00", align 1
|
|
||||||
@str.4 = private unnamed_addr constant [17 x i8] c"In Base::~Base()\00", align 1
|
|
||||||
|
|
||||||
; Function Attrs: mustprogress nofree nounwind uwtable
|
|
||||||
define hidden void @_ZN7Derived1xEv(%class.Derived* nocapture nonnull readnone align 8 %this) unnamed_addr align 2 {
|
|
||||||
entry:
|
entry:
|
||||||
%puts = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str, i64 0, i64 0))
|
%0 = bitcast %Base* %b to void (%Base*)***
|
||||||
ret void
|
%vtable = load void (%Base*)**, void (%Base*)*** %0
|
||||||
}
|
%1 = bitcast void (%Base*)** %vtable to i8*
|
||||||
|
|
||||||
; Function Attrs: mustprogress nounwind uwtable
|
|
||||||
define hidden void @_Z3fooP4Base(%class.Base* %b) local_unnamed_addr {
|
|
||||||
entry:
|
|
||||||
%isnull = icmp eq %class.Base* %b, null
|
|
||||||
br i1 %isnull, label %delete.end, label %delete.notnull
|
|
||||||
|
|
||||||
delete.notnull: ; preds = %entry
|
|
||||||
%0 = bitcast %class.Base* %b to void (%class.Base*)***
|
|
||||||
%vtable = load void (%class.Base*)**, void (%class.Base*)*** %0, align 8, !tbaa !9
|
|
||||||
%1 = bitcast void (%class.Base*)** %vtable to i8*
|
|
||||||
%2 = tail call i1 @llvm.type.test(i8* %1, metadata !"_ZTS4Base")
|
%2 = tail call i1 @llvm.type.test(i8* %1, metadata !"_ZTS4Base")
|
||||||
tail call void @llvm.assume(i1 %2)
|
tail call void @llvm.assume(i1 %2)
|
||||||
%vfn = getelementptr inbounds void (%class.Base*)*, void (%class.Base*)** %vtable, i64 1
|
%vfn = getelementptr inbounds void (%Base*)*, void (%Base*)** %vtable, i64 0
|
||||||
%3 = load void (%class.Base*)*, void (%class.Base*)** %vfn, align 8
|
%3 = load void (%Base*)*, void (%Base*)** %vfn
|
||||||
tail call void %3(%class.Base* nonnull align 8 dereferenceable(8) %b)
|
tail call void %3(%Base* %b)
|
||||||
br label %delete.end
|
|
||||||
|
|
||||||
delete.end: ; preds = %delete.notnull, %entry
|
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
declare i1 @llvm.type.test(i8*, metadata)
|
declare i1 @llvm.type.test(i8*, metadata)
|
||||||
|
|
||||||
declare void @llvm.assume(i1 noundef)
|
declare void @llvm.assume(i1)
|
||||||
|
|
||||||
define linkonce_odr hidden void @_ZN7DerivedD2Ev(%class.Derived* nonnull align 8 dereferenceable(8) %this) unnamed_addr comdat align 2 {
|
define void @_ZN7DerivedD0Ev(%Derived* %this) {
|
||||||
entry:
|
|
||||||
%0 = getelementptr inbounds %class.Derived, %class.Derived* %this, i64 0, i32 0, i32 0
|
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV7Derived, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !9
|
|
||||||
%puts = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.3, i64 0, i64 0))
|
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV4Base, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !9
|
|
||||||
%puts.i = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.4, i64 0, i64 0))
|
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
; Function Attrs: nounwind uwtable
|
define void @_ZN4BaseD0Ev(%Base* %this) {
|
||||||
define linkonce_odr hidden void @_ZN7DerivedD0Ev(%class.Derived* nonnull align 8 dereferenceable(8) %this) unnamed_addr comdat align 2 {
|
|
||||||
entry:
|
|
||||||
%0 = getelementptr inbounds %class.Derived, %class.Derived* %this, i64 0, i32 0, i32 0
|
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV7Derived, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !9
|
|
||||||
%puts.i = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.3, i64 0, i64 0))
|
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV4Base, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !9
|
|
||||||
%puts.i.i = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.4, i64 0, i64 0))
|
|
||||||
%1 = bitcast %class.Derived* %this to i8*
|
|
||||||
tail call void @_ZdlPv(i8* nonnull %1)
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
; Function Attrs: nounwind uwtable
|
|
||||||
define linkonce_odr hidden void @_ZN4BaseD2Ev(%class.Base* nonnull align 8 dereferenceable(8) %this) unnamed_addr comdat align 2 {
|
|
||||||
entry:
|
|
||||||
%0 = getelementptr inbounds %class.Base, %class.Base* %this, i64 0, i32 0
|
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV4Base, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !9
|
|
||||||
%puts = tail call i32 @puts(i8* nonnull dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.4, i64 0, i64 0))
|
|
||||||
ret void
|
|
||||||
}
|
|
||||||
|
|
||||||
; Function Attrs: nounwind uwtable
|
|
||||||
define linkonce_odr hidden void @_ZN4BaseD0Ev(%class.Base* nonnull align 8 dereferenceable(8) %this) unnamed_addr comdat align 2 {
|
|
||||||
entry:
|
|
||||||
tail call void @llvm.trap()
|
|
||||||
unreachable
|
unreachable
|
||||||
}
|
}
|
||||||
|
|
||||||
declare dso_local void @__cxa_pure_virtual() unnamed_addr
|
|
||||||
|
|
||||||
declare void @llvm.trap()
|
|
||||||
|
|
||||||
declare dso_local void @_ZdlPv(i8*) local_unnamed_addr
|
|
||||||
|
|
||||||
declare noundef i32 @puts(i8* nocapture noundef readonly) local_unnamed_addr
|
|
||||||
|
|
||||||
!llvm.module.flags = !{!5, !6, !7}
|
|
||||||
|
|
||||||
!0 = !{i64 16, !"_ZTS4Base"}
|
!0 = !{i64 16, !"_ZTS4Base"}
|
||||||
!1 = !{i64 32, !"_ZTSM4BaseFvvE.virtual"}
|
!1 = !{i64 16, !"_ZTS7Derived"}
|
||||||
!2 = !{i64 16, !"_ZTS7Derived"}
|
!2 = !{i64 1}
|
||||||
!3 = !{i64 32, !"_ZTSM7DerivedFvvE.virtual"}
|
|
||||||
!4 = !{i64 1}
|
|
||||||
!5 = !{i32 1, !"wchar_size", i32 4}
|
|
||||||
!6 = !{i32 1, !"Virtual Function Elim", i32 0}
|
|
||||||
!7 = !{i32 7, !"uwtable", i32 1}
|
|
||||||
!9 = !{!10, !10, i64 0}
|
|
||||||
!10 = !{!"vtable pointer", !11, i64 0}
|
|
||||||
!11 = !{!"Simple C++ TBAA"}
|
|
||||||
|
|
|
@ -14,32 +14,14 @@
|
||||||
; Tests that devirtualization happens.
|
; Tests that devirtualization happens.
|
||||||
; RUN: llvm-lto2 run -save-temps %t-main.bc %t-foo.bc -pass-remarks=. -o %t \
|
; RUN: llvm-lto2 run -save-temps %t-main.bc %t-foo.bc -pass-remarks=. -o %t \
|
||||||
; RUN: -whole-program-visibility \
|
; RUN: -whole-program-visibility \
|
||||||
; RUN: -r=%t-foo.bc,_ZN7Derived1xEv,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,puts, \
|
|
||||||
; RUN: -r=%t-foo.bc,_Z3fooP4Base,pl \
|
; RUN: -r=%t-foo.bc,_Z3fooP4Base,pl \
|
||||||
; RUN: -r=%t-foo.bc,_ZN7DerivedD2Ev,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN7DerivedD0Ev,pl \
|
; RUN: -r=%t-foo.bc,_ZN7DerivedD0Ev,pl \
|
||||||
; RUN: -r=%t-foo.bc,_ZN4BaseD2Ev,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN4BaseD0Ev,pl \
|
; RUN: -r=%t-foo.bc,_ZN4BaseD0Ev,pl \
|
||||||
; RUN: -r=%t-foo.bc,__cxa_pure_virtual, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZdlPv, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTV7Derived,l \
|
; RUN: -r=%t-foo.bc,_ZTV7Derived,l \
|
||||||
; RUN: -r=%t-foo.bc,_ZTVN10__cxxabiv120__si_class_type_infoE, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTS7Derived,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTVN10__cxxabiv117__class_type_infoE, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTS4Base,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTI4Base,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTI7Derived,pl \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTV4Base,l \
|
; RUN: -r=%t-foo.bc,_ZTV4Base,l \
|
||||||
; RUN: -r=%t-foo.bc,__cxa_pure_virtual, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN7Derived1xEv, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN7DerivedD2Ev, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN7DerivedD0Ev, \
|
; RUN: -r=%t-foo.bc,_ZN7DerivedD0Ev, \
|
||||||
; RUN: -r=%t-foo.bc,_ZN4BaseD2Ev, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZN4BaseD0Ev, \
|
; RUN: -r=%t-foo.bc,_ZN4BaseD0Ev, \
|
||||||
; RUN: -r=%t-foo.bc,_ZTV7Derived,pl \
|
; RUN: -r=%t-foo.bc,_ZTV7Derived,pl \
|
||||||
; RUN: -r=%t-foo.bc,_ZTI4Base, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTI7Derived, \
|
|
||||||
; RUN: -r=%t-foo.bc,_ZTV4Base,pl \
|
; RUN: -r=%t-foo.bc,_ZTV4Base,pl \
|
||||||
; RUN: -r=%t-main.bc,main,plx \
|
; RUN: -r=%t-main.bc,main,plx \
|
||||||
; RUN: -r=%t-main.bc,_Znwm,pl \
|
; RUN: -r=%t-main.bc,_Znwm,pl \
|
||||||
|
@ -62,22 +44,10 @@
|
||||||
; RUN: -whole-program-visibility \
|
; RUN: -whole-program-visibility \
|
||||||
; RUN: -wholeprogramdevirt-print-index-based \
|
; RUN: -wholeprogramdevirt-print-index-based \
|
||||||
; RUN: -o %t5 \
|
; RUN: -o %t5 \
|
||||||
; RUN: -r=%t4.o,_ZN7Derived1xEv,pl \
|
|
||||||
; RUN: -r=%t4.o,puts, \
|
|
||||||
; RUN: -r=%t4.o,_Z3fooP4Base,pl \
|
; RUN: -r=%t4.o,_Z3fooP4Base,pl \
|
||||||
; RUN: -r=%t4.o,_ZN7DerivedD2Ev,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZN7DerivedD0Ev,pl \
|
; RUN: -r=%t4.o,_ZN7DerivedD0Ev,pl \
|
||||||
; RUN: -r=%t4.o,_ZN4BaseD2Ev,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZN4BaseD0Ev,pl \
|
; RUN: -r=%t4.o,_ZN4BaseD0Ev,pl \
|
||||||
; RUN: -r=%t4.o,__cxa_pure_virtual, \
|
|
||||||
; RUN: -r=%t4.o,_ZdlPv, \
|
|
||||||
; RUN: -r=%t4.o,_ZTV7Derived,pl \
|
; RUN: -r=%t4.o,_ZTV7Derived,pl \
|
||||||
; RUN: -r=%t4.o,_ZTVN10__cxxabiv120__si_class_type_infoE, \
|
|
||||||
; RUN: -r=%t4.o,_ZTS7Derived,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZTVN10__cxxabiv117__class_type_infoE, \
|
|
||||||
; RUN: -r=%t4.o,_ZTS4Base,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZTI4Base,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZTI7Derived,pl \
|
|
||||||
; RUN: -r=%t4.o,_ZTV4Base,pl \
|
; RUN: -r=%t4.o,_ZTV4Base,pl \
|
||||||
; RUN: -r=%t3.o,main,plx \
|
; RUN: -r=%t3.o,main,plx \
|
||||||
; RUN: -r=%t3.o,_Znwm, \
|
; RUN: -r=%t3.o,_Znwm, \
|
||||||
|
@ -93,31 +63,22 @@ source_filename = "tmp.cc"
|
||||||
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
%class.Derived = type { %class.Base }
|
%Derived = type { %Base }
|
||||||
%class.Base = type { i32 (...)** }
|
%Base = type { i32 (...)** }
|
||||||
|
|
||||||
@_ZTV7Derived = external dso_local unnamed_addr constant { [5 x i8*] }, align 8
|
@_ZTV7Derived = external constant { [5 x i8*] }
|
||||||
|
|
||||||
define hidden i32 @main() local_unnamed_addr {
|
define hidden i32 @main() {
|
||||||
entry:
|
entry:
|
||||||
%call = tail call noalias nonnull dereferenceable(8) i8* @_Znwm(i64 8)
|
%call = tail call i8* @_Znwm(i64 8)
|
||||||
%0 = bitcast i8* %call to %class.Derived*
|
%0 = bitcast i8* %call to %Derived*
|
||||||
%1 = getelementptr inbounds %class.Derived, %class.Derived* %0, i64 0, i32 0, i32 0
|
%1 = getelementptr inbounds %Derived, %Derived* %0, i64 0, i32 0, i32 0
|
||||||
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV7Derived, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !4
|
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [5 x i8*] }, { [5 x i8*] }* @_ZTV7Derived, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %1
|
||||||
%2 = getelementptr %class.Derived, %class.Derived* %0, i64 0, i32 0
|
%2 = getelementptr %Derived, %Derived* %0, i64 0, i32 0
|
||||||
tail call void @_Z3fooP4Base(%class.Base* nonnull %2)
|
tail call void @_Z3fooP4Base(%Base* nonnull %2)
|
||||||
ret i32 0
|
ret i32 0
|
||||||
}
|
}
|
||||||
|
|
||||||
declare dso_local nonnull i8* @_Znwm(i64) local_unnamed_addr
|
declare i8* @_Znwm(i64)
|
||||||
|
|
||||||
declare dso_local void @_Z3fooP4Base(%class.Base*) local_unnamed_addr
|
declare void @_Z3fooP4Base(%Base*)
|
||||||
|
|
||||||
!llvm.module.flags = !{!0, !1, !2}
|
|
||||||
|
|
||||||
!0 = !{i32 1, !"wchar_size", i32 4}
|
|
||||||
!1 = !{i32 1, !"Virtual Function Elim", i32 0}
|
|
||||||
!2 = !{i32 7, !"uwtable", i32 1}
|
|
||||||
!4 = !{!5, !5, i64 0}
|
|
||||||
!5 = !{!"vtable pointer", !6, i64 0}
|
|
||||||
!6 = !{!"Simple C++ TBAA"}
|
|
||||||
|
|
Loading…
Reference in New Issue