|
20 | 20 | @y3 = internal unnamed_addr constant ptr @x0
|
21 | 21 | @load_relative_2.table = private unnamed_addr constant [4 x ptr] [ptr @y3, ptr @y2, ptr @y1, ptr @y0]
|
22 | 22 |
|
| 23 | +@b0 = private unnamed_addr constant [8 x i8] c"00000000" |
| 24 | +@b1 = private unnamed_addr constant [8 x i8] c"11111111" |
| 25 | +@b2 = private unnamed_addr constant [8 x i8] c"22222222" |
| 26 | +@load_relative_3.table = private unnamed_addr constant [3 x ptr] [ |
| 27 | + ptr getelementptr inbounds (i8, ptr @b0, i64 8), |
| 28 | + ptr getelementptr inbounds (i8, ptr @b1, i64 8), |
| 29 | + ptr getelementptr inbounds (i8, ptr @b2, i64 8)] |
| 30 | + |
23 | 31 | ;.
|
24 | 32 | ; x86_64-apple-darwin: @a0 = private constant i32 0
|
25 | 33 | ; x86_64-apple-darwin: @a1 = private constant i32 1
|
|
34 | 42 | ; x86_64-apple-darwin: @y2 = internal constant ptr @x1
|
35 | 43 | ; x86_64-apple-darwin: @y3 = internal constant ptr @x0
|
36 | 44 | ; x86_64-apple-darwin: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
|
| 45 | +; x86_64-apple-darwin: @b0 = private constant [8 x i8] c"00000000" |
| 46 | +; x86_64-apple-darwin: @b1 = private constant [8 x i8] c"11111111" |
| 47 | +; x86_64-apple-darwin: @b2 = private constant [8 x i8] c"22222222" |
| 48 | +; x86_64-apple-darwin: @load_relative_3.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b0, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b1, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b2, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32)], align 4 |
37 | 49 | ;.
|
38 | 50 | ; aarch64: @a0 = private constant i32 0
|
39 | 51 | ; aarch64: @a1 = private constant i32 1
|
|
48 | 60 | ; aarch64: @y2 = internal constant ptr @x1
|
49 | 61 | ; aarch64: @y3 = internal constant ptr @x0
|
50 | 62 | ; aarch64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
|
| 63 | +; aarch64: @b0 = private constant [8 x i8] c"00000000" |
| 64 | +; aarch64: @b1 = private constant [8 x i8] c"11111111" |
| 65 | +; aarch64: @b2 = private constant [8 x i8] c"22222222" |
| 66 | +; aarch64: @load_relative_3.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b0, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b1, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b2, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32)], align 4 |
51 | 67 | ;.
|
52 | 68 | ; x86_64: @a0 = private unnamed_addr constant i32 0
|
53 | 69 | ; x86_64: @a1 = private unnamed_addr constant i32 1
|
|
62 | 78 | ; x86_64: @y2 = internal unnamed_addr constant ptr @x1
|
63 | 79 | ; x86_64: @y3 = internal unnamed_addr constant ptr @x0
|
64 | 80 | ; x86_64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4
|
| 81 | +; x86_64: @b0 = private unnamed_addr constant [8 x i8] c"00000000" |
| 82 | +; x86_64: @b1 = private unnamed_addr constant [8 x i8] c"11111111" |
| 83 | +; x86_64: @b2 = private unnamed_addr constant [8 x i8] c"22222222" |
| 84 | +; x86_64: @load_relative_3.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b0, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b1, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr getelementptr inbounds (i8, ptr @b2, i64 8) to i64), i64 ptrtoint (ptr @load_relative_3.table.rel to i64)) to i32)], align 4 |
65 | 85 | ;.
|
66 | 86 | define ptr @load_relative_1(i64 %offset) {
|
67 | 87 | ; x86_64-apple-darwin-LABEL: define ptr @load_relative_1(
|
@@ -110,6 +130,31 @@ define ptr @load_relative_2(i64 %offset) {
|
110 | 130 | %load = load ptr, ptr %gep
|
111 | 131 | ret ptr %load
|
112 | 132 | }
|
| 133 | + |
| 134 | +define ptr @load_relative_3(i64 %offset) { |
| 135 | +; x86_64-apple-darwin-LABEL: define ptr @load_relative_3( |
| 136 | +; x86_64-apple-darwin-SAME: i64 [[OFFSET:%.*]]) { |
| 137 | +; x86_64-apple-darwin-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2 |
| 138 | +; x86_64-apple-darwin-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_3.table.rel, i64 [[RELTABLE_SHIFT]]) |
| 139 | +; x86_64-apple-darwin-NEXT: ret ptr [[RELTABLE_INTRINSIC]] |
| 140 | +; |
| 141 | +; aarch64-LABEL: define ptr @load_relative_3( |
| 142 | +; aarch64-SAME: i64 [[OFFSET:%.*]]) { |
| 143 | +; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2 |
| 144 | +; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_3.table.rel, i64 [[RELTABLE_SHIFT]]) |
| 145 | +; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]] |
| 146 | +; |
| 147 | +; x86_64-LABEL: define ptr @load_relative_3( |
| 148 | +; x86_64-SAME: i64 [[OFFSET:%.*]]) { |
| 149 | +; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2 |
| 150 | +; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_3.table.rel, i64 [[RELTABLE_SHIFT]]) |
| 151 | +; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]] |
| 152 | +; |
| 153 | + %gep = getelementptr inbounds [3 x ptr], ptr @load_relative_3.table, i64 0, i64 %offset |
| 154 | + %load = load ptr, ptr %gep |
| 155 | + ret ptr %load |
| 156 | +} |
| 157 | + |
113 | 158 | ;.
|
114 | 159 | ; x86_64-apple-darwin: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }
|
115 | 160 | ;.
|
|
0 commit comments