Skip to content

Commit ffa4343

Browse files
committed
Pre-commit test cases
1 parent dfaa662 commit ffa4343

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
2+
; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=x86_64 -S | FileCheck -check-prefix=x86_64 %s
3+
; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=aarch64 -S | FileCheck -check-prefix=aarch64 %s
4+
5+
@a0 = private unnamed_addr constant i32 0
6+
@a1 = private unnamed_addr constant i32 1
7+
@a2 = private unnamed_addr constant i32 2
8+
@load_relative_1.table = private unnamed_addr constant [3 x ptr] [ptr @a0, ptr @a1, ptr @a2]
9+
10+
@x0 = internal unnamed_addr constant i64 0
11+
@x1 = internal unnamed_addr constant i64 1
12+
@x2 = internal unnamed_addr constant i64 2
13+
@x3 = internal unnamed_addr constant i64 3
14+
@y0 = internal unnamed_addr constant ptr @x3
15+
@y1 = internal unnamed_addr constant ptr @x2
16+
@y2 = internal unnamed_addr constant ptr @x1
17+
@y3 = internal unnamed_addr constant ptr @x0
18+
@load_relative_2.table = private unnamed_addr constant [4 x ptr] [ptr @y3, ptr @y2, ptr @y1, ptr @y0]
19+
20+
;.
21+
; x86_64: @a0 = private unnamed_addr constant i32 0
22+
; x86_64: @a1 = private unnamed_addr constant i32 1
23+
; x86_64: @a2 = private unnamed_addr constant i32 2
24+
; 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
25+
; x86_64: @x0 = internal unnamed_addr constant i64 0
26+
; x86_64: @x1 = internal unnamed_addr constant i64 1
27+
; x86_64: @x2 = internal unnamed_addr constant i64 2
28+
; x86_64: @x3 = internal unnamed_addr constant i64 3
29+
; x86_64: @y0 = internal unnamed_addr constant ptr @x3
30+
; x86_64: @y1 = internal unnamed_addr constant ptr @x2
31+
; x86_64: @y2 = internal unnamed_addr constant ptr @x1
32+
; x86_64: @y3 = internal unnamed_addr constant ptr @x0
33+
; 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
34+
;.
35+
; aarch64: @a0 = private unnamed_addr constant i32 0
36+
; aarch64: @a1 = private unnamed_addr constant i32 1
37+
; aarch64: @a2 = private unnamed_addr constant i32 2
38+
; 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
39+
; aarch64: @x0 = internal unnamed_addr constant i64 0
40+
; aarch64: @x1 = internal unnamed_addr constant i64 1
41+
; aarch64: @x2 = internal unnamed_addr constant i64 2
42+
; aarch64: @x3 = internal unnamed_addr constant i64 3
43+
; aarch64: @y0 = internal unnamed_addr constant ptr @x3
44+
; aarch64: @y1 = internal unnamed_addr constant ptr @x2
45+
; aarch64: @y2 = internal unnamed_addr constant ptr @x1
46+
; aarch64: @y3 = internal unnamed_addr constant ptr @x0
47+
; 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
48+
;.
49+
define ptr @load_relative_1(i64 %offset) {
50+
; x86_64-LABEL: define ptr @load_relative_1(
51+
; x86_64-SAME: i64 [[OFFSET:%.*]]) {
52+
; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
53+
; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])
54+
; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
55+
;
56+
; aarch64-LABEL: define ptr @load_relative_1(
57+
; aarch64-SAME: i64 [[OFFSET:%.*]]) {
58+
; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
59+
; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])
60+
; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
61+
;
62+
%gep = getelementptr inbounds [3 x ptr], ptr @load_relative_1.table, i64 0, i64 %offset
63+
%load = load ptr, ptr %gep
64+
ret ptr %load
65+
}
66+
67+
define ptr @load_relative_2(i64 %offset) {
68+
; x86_64-LABEL: define ptr @load_relative_2(
69+
; x86_64-SAME: i64 [[OFFSET:%.*]]) {
70+
; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
71+
; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])
72+
; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
73+
;
74+
; aarch64-LABEL: define ptr @load_relative_2(
75+
; aarch64-SAME: i64 [[OFFSET:%.*]]) {
76+
; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2
77+
; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])
78+
; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
79+
;
80+
%gep = getelementptr inbounds [4 x ptr], ptr @load_relative_2.table, i64 0, i64 %offset
81+
%load = load ptr, ptr %gep
82+
ret ptr %load
83+
}
84+
;.
85+
; x86_64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
86+
;.
87+
; aarch64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
88+
;.

0 commit comments

Comments
 (0)