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