Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / InstSimplify / load-relative.ll
blob75d38d555d329b8a840b16a3b3a6231945f1e9c3
1 ; RUN: opt < %s -passes=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 (ptr @a to i64), i64 ptrtoint (ptr @c1 to i64)) to i32)
10 @c2 = constant [7 x i32] [i32 0, i32 0,
11 i32 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 i32 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 i32 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 i32 trunc (i64 sub (i64 ptrtoint (ptr @b to i64), i64 1) to i32),
15 i32 trunc (i64 sub (i64 0, i64 ptrtoint (ptr getelementptr ([7 x i32], ptr @c2, i32 0, i32 2) to i64)) to i32)
18 ; CHECK: @f1
19 define ptr @f1() {
20   ; CHECK: ret ptr @a
21   %l = call ptr @llvm.load.relative.i32(ptr @c1, i32 0)
22   ret ptr %l
25 ; CHECK: @f2
26 define ptr @f2() {
27   ; CHECK: ret ptr @a
28   %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 0)
29   ret ptr %l
32 ; CHECK: @f3
33 define ptr @f3() {
34   ; CHECK: ret ptr @b
35   %l = call ptr @llvm.load.relative.i64(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i64 4)
36   ret ptr %l
39 ; CHECK: @f4
40 define ptr @f4() {
41   ; CHECK: ret ptr %
42   %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 1)
43   ret ptr %l
46 ; CHECK: @f5
47 define ptr @f5() {
48   ; CHECK: ret ptr %
49   %l = call ptr @llvm.load.relative.i32(ptr zeroinitializer, i32 0)
50   ret ptr %l
53 ; CHECK: @f6
54 define ptr @f6() {
55   ; CHECK: ret ptr %
56   %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 8)
57   ret ptr %l
60 ; CHECK: @f7
61 define ptr @f7() {
62   ; CHECK: ret ptr %
63   %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 12)
64   ret ptr %l
67 ; CHECK: @f8
68 define ptr @f8() {
69   ; CHECK: ret ptr %
70   %l = call ptr @llvm.load.relative.i32(ptr getelementptr ([7 x i32], ptr @c2, i64 0, i64 2), i32 16)
71   ret ptr %l
74 declare ptr @llvm.load.relative.i32(ptr, i32)
75 declare ptr @llvm.load.relative.i64(ptr, i64)