1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instsimplify -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@a = external global i8 7*9880d681SAndroid Build Coastguard Worker@b = external global i8 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker@c1 = constant i32 trunc (i64 sub (i64 ptrtoint (i8* @a to i64), i64 ptrtoint (i32* @c1 to i64)) to i32) 10*9880d681SAndroid Build Coastguard Worker@c2 = constant [7 x i32] [i32 0, i32 0, 11*9880d681SAndroid Build Coastguard Workeri32 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*9880d681SAndroid Build Coastguard Workeri32 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*9880d681SAndroid Build Coastguard Workeri32 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*9880d681SAndroid Build Coastguard Workeri32 trunc (i64 sub (i64 ptrtoint (i8* @b to i64), i64 1) to i32), 15*9880d681SAndroid Build Coastguard Workeri32 trunc (i64 sub (i64 0, i64 ptrtoint (i32* getelementptr ([7 x i32], [7 x i32]* @c2, i32 0, i32 2) to i64)) to i32) 16*9880d681SAndroid Build Coastguard Worker] 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; CHECK: @f1 19*9880d681SAndroid Build Coastguard Workerdefine i8* @f1() { 20*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* @a 21*9880d681SAndroid Build Coastguard Worker %l = call i8* @llvm.load.relative.i32(i8* bitcast (i32* @c1 to i8*), i32 0) 22*9880d681SAndroid Build Coastguard Worker ret i8* %l 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker; CHECK: @f2 26*9880d681SAndroid Build Coastguard Workerdefine i8* @f2() { 27*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* @a 28*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; CHECK: @f3 33*9880d681SAndroid Build Coastguard Workerdefine i8* @f3() { 34*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* @b 35*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK: @f4 40*9880d681SAndroid Build Coastguard Workerdefine i8* @f4() { 41*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* % 42*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; CHECK: @f5 47*9880d681SAndroid Build Coastguard Workerdefine i8* @f5() { 48*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* % 49*9880d681SAndroid Build Coastguard Worker %l = call i8* @llvm.load.relative.i32(i8* zeroinitializer, i32 0) 50*9880d681SAndroid Build Coastguard Worker ret i8* %l 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; CHECK: @f6 54*9880d681SAndroid Build Coastguard Workerdefine i8* @f6() { 55*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* % 56*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; CHECK: @f7 61*9880d681SAndroid Build Coastguard Workerdefine i8* @f7() { 62*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* % 63*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; CHECK: @f8 68*9880d681SAndroid Build Coastguard Workerdefine i8* @f8() { 69*9880d681SAndroid Build Coastguard Worker ; CHECK: ret i8* % 70*9880d681SAndroid Build Coastguard Worker %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*9880d681SAndroid Build Coastguard Worker ret i8* %l 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.load.relative.i32(i8*, i32) 75*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.load.relative.i64(i8*, i64) 76