Files
clang-p2996/llvm/test/Transforms/ThinLTOBitcodeWriter/split-vfunc.ll
Arthur Eubanks 6699029b67 [NewPM][opt] Run the "default" AA pipeline by default
We tend to assume that the AA pipeline is by default the default AA
pipeline and it's confusing when it's empty instead.

PR48779

Initially reverted due to BasicAA running analyses in an unspecified
order (multiple function calls as parameters), fixed by fetching
analyses before the call to construct BasicAA.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D95117
2021-01-21 21:08:54 -08:00

80 lines
2.0 KiB
LLVM

; RUN: opt -thinlto-bc -thinlto-split-lto-unit -o %t %s
; RUN: llvm-modextract -b -n 0 -o - %t | llvm-dis | FileCheck --check-prefix=M0 %s
; RUN: llvm-modextract -b -n 1 -o - %t | llvm-dis | FileCheck --check-prefix=M1 %s
; M0: @g = external constant [9 x i8*]{{$}}
; M1: @g = constant [9 x i8*]
@g = constant [9 x i8*] [
i8* bitcast (i64 (i8*)* @ok1 to i8*),
i8* bitcast (i64 (i8*, i64)* @ok2 to i8*),
i8* bitcast (void (i8*)* @wrongtype1 to i8*),
i8* bitcast (i128 (i8*)* @wrongtype2 to i8*),
i8* bitcast (i64 ()* @wrongtype3 to i8*),
i8* bitcast (i64 (i8*, i8*)* @wrongtype4 to i8*),
i8* bitcast (i64 (i8*, i128)* @wrongtype5 to i8*),
i8* bitcast (i64 (i8*)* @usesthis to i8*),
i8* bitcast (i8 (i8*)* @reads to i8*)
], !type !0
; M0: define i64 @ok1
; M1: define available_externally i64 @ok1
define i64 @ok1(i8* %this) {
ret i64 42
}
; M0: define i64 @ok2
; M1: define available_externally i64 @ok2
define i64 @ok2(i8* %this, i64 %arg) {
%1 = tail call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %arg, i64 %arg)
ret i64 %arg
}
; M1: declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64)
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64)
; M0: define void @wrongtype1
; M1: declare void @wrongtype1()
define void @wrongtype1(i8*) {
ret void
}
; M0: define i128 @wrongtype2
; M1: declare void @wrongtype2()
define i128 @wrongtype2(i8*) {
ret i128 0
}
; M0: define i64 @wrongtype3
; M1: declare void @wrongtype3()
define i64 @wrongtype3() {
ret i64 0
}
; M0: define i64 @wrongtype4
; M1: declare void @wrongtype4()
define i64 @wrongtype4(i8*, i8*) {
ret i64 0
}
; M0: define i64 @wrongtype5
; M1: declare void @wrongtype5()
define i64 @wrongtype5(i8*, i128) {
ret i64 0
}
; M0: define i64 @usesthis
; M1: declare void @usesthis()
define i64 @usesthis(i8* %this) {
%i = ptrtoint i8* %this to i64
ret i64 %i
}
; M0: define i8 @reads
; M1: declare void @reads()
define i8 @reads(i8* %this) {
%l = load i8, i8* %this
ret i8 %l
}
!0 = !{i32 0, !"typeid"}