[RelLookupTableConverter] Drop unnamed_addr to avoid generating GOTPC… · llvm/llvm-project@e0586e2 (original) (raw)
``
1
`+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
`
``
2
`+
; REQUIRES: x86-registered-target
`
``
3
`+
; REQUIRES: aarch64-registered-target
`
``
4
`+
; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=x86_64-apple-darwin -S | FileCheck -check-prefix=x86_64-apple-darwin %s
`
``
5
`+
; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=aarch64 -S | FileCheck -check-prefix=aarch64 %s
`
``
6
`+
; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=x86_64 -S | FileCheck -check-prefix=x86_64 %s
`
``
7
+
``
8
`+
@a0 = private unnamed_addr constant i32 0
`
``
9
`+
@a1 = private unnamed_addr constant i32 1
`
``
10
`+
@a2 = private unnamed_addr constant i32 2
`
``
11
`+
@load_relative_1.table = private unnamed_addr constant [3 x ptr] [ptr @a0, ptr @a1, ptr @a2]
`
``
12
+
``
13
`+
@x0 = internal unnamed_addr constant i64 0
`
``
14
`+
@x1 = internal unnamed_addr constant i64 1
`
``
15
`+
@x2 = internal unnamed_addr constant i64 2
`
``
16
`+
@x3 = internal unnamed_addr constant i64 3
`
``
17
`+
@y0 = internal unnamed_addr constant ptr @x3
`
``
18
`+
@y1 = internal unnamed_addr constant ptr @x2
`
``
19
`+
@y2 = internal unnamed_addr constant ptr @x1
`
``
20
`+
@y3 = internal unnamed_addr constant ptr @x0
`
``
21
`+
@load_relative_2.table = private unnamed_addr constant [4 x ptr] [ptr @y3, ptr @y2, ptr @y1, ptr @y0]
`
``
22
+
``
23
`+
;.
`
``
24
`+
; x86_64-apple-darwin: @a0 = private constant i32 0
`
``
25
`+
; x86_64-apple-darwin: @a1 = private constant i32 1
`
``
26
`+
; x86_64-apple-darwin: @a2 = private constant i32 2
`
``
27
`+
; x86_64-apple-darwin: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4
`
``
28
`+
; x86_64-apple-darwin: @x0 = internal unnamed_addr constant i64 0
`
``
29
`+
; x86_64-apple-darwin: @x1 = internal unnamed_addr constant i64 1
`
``
30
`+
; x86_64-apple-darwin: @x2 = internal unnamed_addr constant i64 2
`
``
31
`+
; x86_64-apple-darwin: @x3 = internal unnamed_addr constant i64 3
`
``
32
`+
; x86_64-apple-darwin: @y0 = internal constant ptr @x3
`
``
33
`+
; x86_64-apple-darwin: @y1 = internal constant ptr @x2
`
``
34
`+
; x86_64-apple-darwin: @y2 = internal constant ptr @x1
`
``
35
`+
; x86_64-apple-darwin: @y3 = internal constant ptr @x0
`
``
36
`+
; x86_64-apple-darwin: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
`
``
37
`+
;.
`
``
38
`+
; aarch64: @a0 = private constant i32 0
`
``
39
`+
; aarch64: @a1 = private constant i32 1
`
``
40
`+
; aarch64: @a2 = private constant i32 2
`
``
41
`+
; aarch64: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4
`
``
42
`+
; aarch64: @x0 = internal unnamed_addr constant i64 0
`
``
43
`+
; aarch64: @x1 = internal unnamed_addr constant i64 1
`
``
44
`+
; aarch64: @x2 = internal unnamed_addr constant i64 2
`
``
45
`+
; aarch64: @x3 = internal unnamed_addr constant i64 3
`
``
46
`+
; aarch64: @y0 = internal constant ptr @x3
`
``
47
`+
; aarch64: @y1 = internal constant ptr @x2
`
``
48
`+
; aarch64: @y2 = internal constant ptr @x1
`
``
49
`+
; aarch64: @y3 = internal constant ptr @x0
`
``
50
`+
; aarch64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
`
``
51
`+
;.
`
``
52
`+
; x86_64: @a0 = private unnamed_addr constant i32 0
`
``
53
`+
; x86_64: @a1 = private unnamed_addr constant i32 1
`
``
54
`+
; x86_64: @a2 = private unnamed_addr constant i32 2
`
``
55
`+
; x86_64: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4
`
``
56
`+
; x86_64: @x0 = internal unnamed_addr constant i64 0
`
``
57
`+
; x86_64: @x1 = internal unnamed_addr constant i64 1
`
``
58
`+
; x86_64: @x2 = internal unnamed_addr constant i64 2
`
``
59
`+
; x86_64: @x3 = internal unnamed_addr constant i64 3
`
``
60
`+
; x86_64: @y0 = internal unnamed_addr constant ptr @x3
`
``
61
`+
; x86_64: @y1 = internal unnamed_addr constant ptr @x2
`
``
62
`+
; x86_64: @y2 = internal unnamed_addr constant ptr @x1
`
``
63
`+
; x86_64: @y3 = internal unnamed_addr constant ptr @x0
`
``
64
`+
; x86_64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
`
``
65
`+
;.
`
``
66
`+
define ptr @load_relative_1(i64 %offset) {
`
``
67
`+
; x86_64-apple-darwin-LABEL: define ptr @load_relative_1(
`
``
68
`+
; x86_64-apple-darwin-SAME: i64 [[OFFSET:%.*]]) {
`
``
69
`+
; x86_64-apple-darwin-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
70
`+
; x86_64-apple-darwin-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
71
`+
; x86_64-apple-darwin-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
72
`+
;
`
``
73
`+
; aarch64-LABEL: define ptr @load_relative_1(
`
``
74
`+
; aarch64-SAME: i64 [[OFFSET:%.*]]) {
`
``
75
`+
; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
76
`+
; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
77
`+
; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
78
`+
;
`
``
79
`+
; x86_64-LABEL: define ptr @load_relative_1(
`
``
80
`+
; x86_64-SAME: i64 [[OFFSET:%.*]]) {
`
``
81
`+
; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
82
`+
; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
83
`+
; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
84
`+
;
`
``
85
`+
%gep = getelementptr inbounds [3 x ptr], ptr @load_relative_1.table, i64 0, i64 %offset
`
``
86
`+
%load = load ptr, ptr %gep
`
``
87
`+
ret ptr %load
`
``
88
`+
}
`
``
89
+
``
90
`+
define ptr @load_relative_2(i64 %offset) {
`
``
91
`+
; x86_64-apple-darwin-LABEL: define ptr @load_relative_2(
`
``
92
`+
; x86_64-apple-darwin-SAME: i64 [[OFFSET:%.*]]) {
`
``
93
`+
; x86_64-apple-darwin-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
94
`+
; x86_64-apple-darwin-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
95
`+
; x86_64-apple-darwin-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
96
`+
;
`
``
97
`+
; aarch64-LABEL: define ptr @load_relative_2(
`
``
98
`+
; aarch64-SAME: i64 [[OFFSET:%.*]]) {
`
``
99
`+
; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
100
`+
; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
101
`+
; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
102
`+
;
`
``
103
`+
; x86_64-LABEL: define ptr @load_relative_2(
`
``
104
`+
; x86_64-SAME: i64 [[OFFSET:%.*]]) {
`
``
105
`+
; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
`
``
106
`+
; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])
`
``
107
`+
; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
`
``
108
`+
;
`
``
109
`+
%gep = getelementptr inbounds [4 x ptr], ptr @load_relative_2.table, i64 0, i64 %offset
`
``
110
`+
%load = load ptr, ptr %gep
`
``
111
`+
ret ptr %load
`
``
112
`+
}
`
``
113
`+
;.
`
``
114
`+
; x86_64-apple-darwin: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
`
``
115
`+
;.
`
``
116
`+
; aarch64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
`
``
117
`+
;.
`
``
118
`+
; x86_64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
`
``
119
`+
;.
`