[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / Transforms / InstSimplify / load-relative.ll
blob3074ede2b6976492cfe7cdb2775b8ecd34b2c053
1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
3 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
6 @a = external global i8
7 @b = external global i8
9 @c1 = constant i32 trunc (i64 sub (i64 ptrtoint (i8* @a to i64), i64 ptrtoint (i32* @c1 to i64)) to i32)
10 @c2 = constant [7 x i32] [i32 0, i32 0,
11 i32 trunc (i64 sub (i64 ptrtoint (i8* @a to i64), i64 ptrtoint (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i32 0, i32 2) to i64)) to i32),
12 i32 trunc (i64 sub (i64 ptrtoint (i8* @b to i64), i64 ptrtoint (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i32 0, i32 2) to i64)) to i32),
13 i32 trunc (i64 add (i64 ptrtoint (i8* @b to i64), i64 ptrtoint (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i32 0, i32 2) to i64)) to i32),
14 i32 trunc (i64 sub (i64 ptrtoint (i8* @b to i64), i64 1) to i32),
15 i32 trunc (i64 sub (i64 0, i64 ptrtoint (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i32 0, i32 2) to i64)) to i32)
18 ; CHECK: @f1
19 define i8* @f1() {
20   ; CHECK: ret i8* @a
21   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* @c1 to i8*), i32 0)
22   ret i8* %l
25 ; CHECK: @f2
26 define i8* @f2() {
27   ; CHECK: ret i8* @a
28   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i32 0)
29   ret i8* %l
32 ; CHECK: @f3
33 define i8* @f3() {
34   ; CHECK: ret i8* @b
35   %l = call i8* @llvm.load.relative.i64(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i64 4)
36   ret i8* %l
39 ; CHECK: @f4
40 define i8* @f4() {
41   ; CHECK: ret i8* %
42   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i32 1)
43   ret i8* %l
46 ; CHECK: @f5
47 define i8* @f5() {
48   ; CHECK: ret i8* %
49   %l = call i8* @llvm.load.relative.i32(i8* zeroinitializer, i32 0)
50   ret i8* %l
53 ; CHECK: @f6
54 define i8* @f6() {
55   ; CHECK: ret i8* %
56   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i32 8)
57   ret i8* %l
60 ; CHECK: @f7
61 define i8* @f7() {
62   ; CHECK: ret i8* %
63   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i32 12)
64   ret i8* %l
67 ; CHECK: @f8
68 define i8* @f8() {
69   ; CHECK: ret i8* %
70   %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i64 0, i64 2) to i8*), i32 16)
71   ret i8* %l
74 declare i8* @llvm.load.relative.i32(i8*, i32)
75 declare i8* @llvm.load.relative.i64(i8*, i64)