xref: /llvm-project/llvm/test/Transforms/InstSimplify/load-relative.ll (revision 04b944e23050e4e0c6ee983cc9bc17740315ea4f)
1b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
2cee313d2SEric Christopher
3cee313d2SEric Christophertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4cee313d2SEric Christophertarget triple = "x86_64-unknown-linux-gnu"
5cee313d2SEric Christopher
6cee313d2SEric Christopher@a = external global i8
7cee313d2SEric Christopher@b = external global i8
8cee313d2SEric Christopher
9*04b944e2SNikita Popov@c1 = constant i32 trunc (i64 sub (i64 ptrtoint (ptr @a to i64), i64 ptrtoint (ptr @c1 to i64)) to i32)
10cee313d2SEric Christopher@c2 = constant [7 x i32] [i32 0, i32 0,
11*04b944e2SNikita Popovi32 trunc (i64 sub (i64 ptrtoint (ptr @a to i64), i64 ptrtoint (ptr getelementptr ([7 x i32], ptr @c2, i32 0, i32 2) to i64)) to i32),
12*04b944e2SNikita Popovi32 trunc (i64 sub (i64 ptrtoint (ptr @b to i64), i64 ptrtoint (ptr getelementptr ([7 x i32], ptr @c2, i32 0, i32 2) to i64)) to i32),
13*04b944e2SNikita Popovi32 trunc (i64 add (i64 ptrtoint (ptr @b to i64), i64 ptrtoint (ptr getelementptr ([7 x i32], ptr @c2, i32 0, i32 2) to i64)) to i32),
14*04b944e2SNikita Popovi32 trunc (i64 sub (i64 ptrtoint (ptr @b to i64), i64 1) to i32),
15*04b944e2SNikita Popovi32 trunc (i64 sub (i64 0, i64 ptrtoint (ptr getelementptr ([7 x i32], ptr @c2, i32 0, i32 2) to i64)) to i32)
16cee313d2SEric Christopher]
17cee313d2SEric Christopher
18cee313d2SEric Christopher; CHECK: @f1
19*04b944e2SNikita Popovdefine ptr @f1() {
20*04b944e2SNikita Popov  ; CHECK: ret ptr @a
21*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr @c1, i32 0)
22*04b944e2SNikita Popov  ret ptr %l
23cee313d2SEric Christopher}
24cee313d2SEric Christopher
25cee313d2SEric Christopher; CHECK: @f2
26*04b944e2SNikita Popovdefine ptr @f2() {
27*04b944e2SNikita Popov  ; CHECK: ret ptr @a
28*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 0)
29*04b944e2SNikita Popov  ret ptr %l
30cee313d2SEric Christopher}
31cee313d2SEric Christopher
32cee313d2SEric Christopher; CHECK: @f3
33*04b944e2SNikita Popovdefine ptr @f3() {
34*04b944e2SNikita Popov  ; CHECK: ret ptr @b
35*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i64(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i64 4)
36*04b944e2SNikita Popov  ret ptr %l
37cee313d2SEric Christopher}
38cee313d2SEric Christopher
39cee313d2SEric Christopher; CHECK: @f4
40*04b944e2SNikita Popovdefine ptr @f4() {
41*04b944e2SNikita Popov  ; CHECK: ret ptr %
42*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 1)
43*04b944e2SNikita Popov  ret ptr %l
44cee313d2SEric Christopher}
45cee313d2SEric Christopher
46cee313d2SEric Christopher; CHECK: @f5
47*04b944e2SNikita Popovdefine ptr @f5() {
48*04b944e2SNikita Popov  ; CHECK: ret ptr %
49*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr zeroinitializer, i32 0)
50*04b944e2SNikita Popov  ret ptr %l
51cee313d2SEric Christopher}
52cee313d2SEric Christopher
53cee313d2SEric Christopher; CHECK: @f6
54*04b944e2SNikita Popovdefine ptr @f6() {
55*04b944e2SNikita Popov  ; CHECK: ret ptr %
56*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 8)
57*04b944e2SNikita Popov  ret ptr %l
58cee313d2SEric Christopher}
59cee313d2SEric Christopher
60cee313d2SEric Christopher; CHECK: @f7
61*04b944e2SNikita Popovdefine ptr @f7() {
62*04b944e2SNikita Popov  ; CHECK: ret ptr %
63*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 12)
64*04b944e2SNikita Popov  ret ptr %l
65cee313d2SEric Christopher}
66cee313d2SEric Christopher
67cee313d2SEric Christopher; CHECK: @f8
68*04b944e2SNikita Popovdefine ptr @f8() {
69*04b944e2SNikita Popov  ; CHECK: ret ptr %
70*04b944e2SNikita Popov  %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 16)
71*04b944e2SNikita Popov  ret ptr %l
72cee313d2SEric Christopher}
73cee313d2SEric Christopher
74*04b944e2SNikita Popovdeclare ptr @llvm.load.relative.i32(ptr, i32)
75*04b944e2SNikita Popovdeclare ptr @llvm.load.relative.i64(ptr, i64)
76