xref: /llvm-project/llvm/test/Transforms/GlobalSplit/basic.ll (revision d10b76552f919ddb84347ab03908a55804ea6b8a)
1; RUN: opt -S -passes=globalsplit %s | FileCheck %s
2
3target datalayout = "e-p:64:64"
4target triple = "x86_64-unknown-linux-gnu"
5
6; CHECK: @vtt = constant [3 x ptr] [ptr @global.0, ptr getelementptr (i8, ptr @global.0, i64 8), ptr @global.1]
7@vtt = constant [3 x ptr] [
8  ptr getelementptr inrange(0, 16) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 0, i32 0),
9  ptr getelementptr inrange(-8, 8) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 0, i32 1),
10  ptr getelementptr inrange(0, 8) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 1, i32 0)
11]
12
13; CHECK-NOT: @global =
14; CHECK: @global.0 = private constant [2 x ptr] [ptr @f1, ptr @f2], !type [[T1:![0-9]+]], !type [[T2:![0-9]+]], !type [[T3:![0-9]+]], !vcall_visibility [[VIS:![0-9]+]]{{$}}
15; CHECK: @global.1 = private constant [1 x ptr] [ptr @f3], !type [[T4:![0-9]+]], !type [[T5:![0-9]+]], !vcall_visibility [[VIS]]{{$}}
16; CHECK-NOT: @global =
17@global = internal constant { [2 x ptr], [1 x ptr] } {
18  [2 x ptr] [ptr @f1, ptr @f2],
19  [1 x ptr] [ptr @f3]
20}, !type !0, !type !1, !type !2, !type !3, !type !4, !vcall_visibility !5
21
22; CHECK: define ptr @f1()
23define ptr @f1() {
24  ; CHECK-NEXT: ret ptr @global.0
25  ret ptr getelementptr inrange(0, 16) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 0, i32 0)
26}
27
28; CHECK: define ptr @f2()
29define ptr @f2() {
30  ; CHECK-NEXT: ret ptr getelementptr (i8, ptr @global.0, i64 8)
31  ret ptr getelementptr inrange(-8, 8) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 0, i32 1)
32}
33
34; CHECK: define ptr @f3()
35define ptr @f3() {
36  ; CHECK-NEXT: ret ptr getelementptr (i8, ptr @global.0, i64 16)
37  ret ptr getelementptr inrange(-16, 0) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 0, i32 2)
38}
39
40; CHECK: define ptr @f4()
41define ptr @f4() {
42  ; CHECK-NEXT: ret ptr @global.1
43  ret ptr getelementptr inrange(0, 8) ({ [2 x ptr], [1 x ptr] }, ptr @global, i32 0, i32 1, i32 0)
44}
45
46define void @foo() {
47  %p = call i1 @llvm.type.test(ptr null, metadata !"")
48  ret void
49}
50
51declare i1 @llvm.type.test(ptr, metadata) nounwind readnone
52
53; CHECK: [[T1]] = !{i32 0, !"foo"}
54; CHECK: [[T2]] = !{i32 15, !"bar"}
55; CHECK: [[T3]] = !{i32 16, !"a"}
56; CHECK: [[VIS]] = !{i64 2}
57; CHECK: [[T4]] = !{i32 1, !"b"}
58; CHECK: [[T5]] = !{i32 8, !"c"}
59!0 = !{i32 0, !"foo"}
60!1 = !{i32 15, !"bar"}
61!2 = !{i32 16, !"a"}
62!3 = !{i32 17, !"b"}
63!4 = !{i32 24, !"c"}
64!5 = !{i64 2}
65