Skip to content

Commit 87e8ce3

Browse files
authored
[llvm] Re-use original global name in RelLookupTableConverter (#93626)
Prior, the reltable we create was "reltable." + FuncName which can result in multiple tables named "reltable." + FuncName + ".{number}" if we substitute multiple tables in a function. Since we replace the original global, it makes it easier to just take over the original global's name. Functionally, this doesn't change the IR emitted, just global names. This is a subset of PR 93355 that I'm breaking into multiple patches.
1 parent 3fcf363 commit 87e8ce3

File tree

3 files changed

+35
-35
lines changed

3 files changed

+35
-35
lines changed

llvm/lib/Transforms/Utils/RelLookupTableConverter.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ static GlobalVariable *createRelLookupTable(Function &Func,
100100
ArrayType::get(Type::getInt32Ty(M.getContext()), NumElts);
101101

102102
GlobalVariable *RelLookupTable = new GlobalVariable(
103-
M, IntArrayTy, LookupTable.isConstant(), LookupTable.getLinkage(),
104-
nullptr, "reltable." + Func.getName(), &LookupTable,
105-
LookupTable.getThreadLocalMode(), LookupTable.getAddressSpace(),
106-
LookupTable.isExternallyInitialized());
103+
M, IntArrayTy, LookupTable.isConstant(), LookupTable.getLinkage(),
104+
nullptr, LookupTable.getName() + ".rel", &LookupTable,
105+
LookupTable.getThreadLocalMode(), LookupTable.getAddressSpace(),
106+
LookupTable.isExternallyInitialized());
107107

108108
uint64_t Idx = 0;
109109
SmallVector<Constant *, 64> RelLookupTableContents(NumElts);

llvm/test/Transforms/RelLookupTableConverter/X86/opaque-ptr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ target triple = "x86_64-unknown-linux-gnu"
1515
define ptr @test(i32 %cond) {
1616
; CHECK-LABEL: @test(
1717
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 [[COND:%.*]], 2
18-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.test, i32 [[RELTABLE_SHIFT]])
18+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @table1.rel, i32 [[RELTABLE_SHIFT]])
1919
; CHECK-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
2020
;
2121
%switch.gep = getelementptr inbounds [3 x ptr], ptr @table1, i32 0, i32 %cond

llvm/test/Transforms/RelLookupTableConverter/X86/relative_lookup_table.ll

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -73,51 +73,51 @@ target triple = "x86_64-unknown-linux-gnu"
7373
; CHECK: @switch.table.external_linkage = private unnamed_addr constant [3 x ptr] [ptr @a1, ptr @b1, ptr @c1], align
7474

7575
; Lookup table check for integer pointers that have internal linkage
76-
; CHECK: @reltable.internal_linkage = private unnamed_addr constant [3 x i32]
76+
; CHECK: @switch.table.internal_linkage.rel = private unnamed_addr constant [3 x i32]
7777
; CHECK-SAME: [
78-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @reltable.internal_linkage to i64)) to i32),
79-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @b2 to i64), i64 ptrtoint (ptr @reltable.internal_linkage to i64)) to i32),
80-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @c2 to i64), i64 ptrtoint (ptr @reltable.internal_linkage to i64)) to i32)
78+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @switch.table.internal_linkage.rel to i64)) to i32),
79+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @b2 to i64), i64 ptrtoint (ptr @switch.table.internal_linkage.rel to i64)) to i32),
80+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @c2 to i64), i64 ptrtoint (ptr @switch.table.internal_linkage.rel to i64)) to i32)
8181
; CHECK-SAME: ], align 4
8282

8383
; Relative switch lookup table for strings
84-
; CHECK: @reltable.string_table = private unnamed_addr constant [3 x i32]
84+
; CHECK: @switch.table.string_table.rel = private unnamed_addr constant [3 x i32]
8585
; CHECK-SAME: [
86-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @reltable.string_table to i64)) to i32),
87-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.1 to i64), i64 ptrtoint (ptr @reltable.string_table to i64)) to i32),
88-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @reltable.string_table to i64)) to i32)
86+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @switch.table.string_table.rel to i64)) to i32),
87+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.1 to i64), i64 ptrtoint (ptr @switch.table.string_table.rel to i64)) to i32),
88+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @switch.table.string_table.rel to i64)) to i32)
8989
; CHECK-SAME: ], align 4
9090

9191
; Relative switch lookup table for strings with holes, where holes are filled with relative offset to default values
92-
; CHECK: @reltable.string_table_holes = private unnamed_addr constant [4 x i32]
92+
; CHECK: @switch.table.string_table_holes.rel = private unnamed_addr constant [4 x i32]
9393
; CHECK-SAME: [
94-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @reltable.string_table_holes to i64)) to i32),
95-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.3 to i64), i64 ptrtoint (ptr @reltable.string_table_holes to i64)) to i32),
96-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @reltable.string_table_holes to i64)) to i32),
97-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.4 to i64), i64 ptrtoint (ptr @reltable.string_table_holes to i64)) to i32)
94+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @switch.table.string_table_holes.rel to i64)) to i32),
95+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.3 to i64), i64 ptrtoint (ptr @switch.table.string_table_holes.rel to i64)) to i32),
96+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @switch.table.string_table_holes.rel to i64)) to i32),
97+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.4 to i64), i64 ptrtoint (ptr @switch.table.string_table_holes.rel to i64)) to i32)
9898
; CHECK-SAME: ], align 4
9999

100100
; Single value check
101-
; CHECK: @reltable.single_value = private unnamed_addr constant [3 x i32]
101+
; CHECK: @switch.table.single_value.rel = private unnamed_addr constant [3 x i32]
102102
; CHECK-SAME: [
103-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @reltable.single_value to i64)) to i32),
104-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.1 to i64), i64 ptrtoint (ptr @reltable.single_value to i64)) to i32),
105-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @reltable.single_value to i64)) to i32)
103+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str to i64), i64 ptrtoint (ptr @switch.table.single_value.rel to i64)) to i32),
104+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.1 to i64), i64 ptrtoint (ptr @switch.table.single_value.rel to i64)) to i32),
105+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.2 to i64), i64 ptrtoint (ptr @switch.table.single_value.rel to i64)) to i32)
106106
; CHECK-SAME: ], align 4
107107
;
108108

109109
; Relative lookup table for the loop hoist check test
110-
; CHECK: @reltable.loop_hoist = internal unnamed_addr constant [2 x i32]
110+
; CHECK: @table.rel = internal unnamed_addr constant [2 x i32]
111111
; CHECK-SAME: [
112-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.8 to i64), i64 ptrtoint (ptr @reltable.loop_hoist to i64)) to i32),
113-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.9 to i64), i64 ptrtoint (ptr @reltable.loop_hoist to i64)) to i32)
112+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.8 to i64), i64 ptrtoint (ptr @table.rel to i64)) to i32),
113+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.9 to i64), i64 ptrtoint (ptr @table.rel to i64)) to i32)
114114
; CHECK-SAME: ], align 4
115115

116116
; Relative look up table for the test where gep is not immediately followed by a load check
117-
; CHECK: @reltable.gep_is_not_imm_followed_by_load = internal unnamed_addr constant [2 x i32]
117+
; CHECK: @table2.rel = internal unnamed_addr constant [2 x i32]
118118
; CHECK-SAME: [
119-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.8 to i64), i64 ptrtoint (ptr @reltable.gep_is_not_imm_followed_by_load to i64)) to i32),
120-
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.9 to i64), i64 ptrtoint (ptr @reltable.gep_is_not_imm_followed_by_load to i64)) to i32)
119+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.8 to i64), i64 ptrtoint (ptr @table2.rel to i64)) to i32),
120+
; CHECK-SAME: i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.9 to i64), i64 ptrtoint (ptr @table2.rel to i64)) to i32)
121121
; CHECK-SAME: ], align 4
122122

123123
; Lookup table check for integer pointers that have external linkage
@@ -154,7 +154,7 @@ define ptr @internal_linkage(i32 %cond) {
154154
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
155155
; CHECK: switch.lookup:
156156
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 %cond, 2
157-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.internal_linkage, i32 [[RELTABLE_SHIFT]])
157+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @switch.table.internal_linkage.rel, i32 [[RELTABLE_SHIFT]])
158158
; CHECK-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
159159
; CHECK: return:
160160
; CHECK-NEXT: ret ptr @d2
@@ -180,7 +180,7 @@ define ptr @string_table(i32 %cond) {
180180
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
181181
; CHECK: switch.lookup:
182182
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 %cond, 2
183-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.string_table, i32 [[RELTABLE_SHIFT]])
183+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @switch.table.string_table.rel, i32 [[RELTABLE_SHIFT]])
184184
; CHECK-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
185185
; CHECK: return:
186186
; CHECK-NEXT: ret ptr @.str.3
@@ -206,7 +206,7 @@ define ptr @string_table_holes(i32 %cond) {
206206
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
207207
; CHECK: switch.lookup:
208208
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 [[COND]], 2
209-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.string_table_holes, i32 [[RELTABLE_SHIFT]])
209+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @switch.table.string_table_holes.rel, i32 [[RELTABLE_SHIFT]])
210210
; CHECK-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
211211
; CHECK: return:
212212
; CHECK-NEXT: ret ptr @.str.3
@@ -235,7 +235,7 @@ define void @single_value(i32 %cond) {
235235
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
236236
; CHECK: switch.lookup:
237237
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 [[COND]], 2
238-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.single_value, i32 [[RELTABLE_SHIFT]])
238+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @switch.table.single_value.rel, i32 [[RELTABLE_SHIFT]])
239239
; CHECK: sw.epilog:
240240
; CHECK-NEXT: [[STR1:%.*]] = phi ptr [ @.str.5, %entry ], [ @.str.7, %switch.lookup ]
241241
; CHECK-NEXT: [[STR2:%.*]] = phi ptr [ @.str.6, %entry ], [ [[RELTABLE_INTRINSIC]], [[SWITCH_LOOKUP]] ]
@@ -265,7 +265,7 @@ define ptr @user_defined_lookup_table(i32 %cond) {
265265
; CHECK: cond.false:
266266
; CHECK-NEXT: [[IDX_PROM:%.*]] = sext i32 [[COND]] to i64
267267
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[IDX_PROM]], 2
268-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @reltable.user_defined_lookup_table, i64 [[RELTABLE_SHIFT]])
268+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @user_defined_lookup_table.table.rel, i64 [[RELTABLE_SHIFT]])
269269
; CHECK-NEXT: br label %cond.end
270270
; CHECK: cond.end:
271271
; CHECK-NEXT: [[COND1:%.*]] = phi ptr [ [[RELTABLE_INTRINSIC]], %cond.false ], [ @.str.3, %entry ]
@@ -296,7 +296,7 @@ define ptr @loop_hoist(i32 %x) {
296296
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 [[X:%.*]], 2
297297
; CHECK-NEXT: br i1 [[TMP0]], label %if.done, label %if.false
298298
; CHECK: if.false:
299-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.loop_hoist, i32 [[RELTABLE_SHIFT]])
299+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @table.rel, i32 [[RELTABLE_SHIFT]])
300300
; CHECK-NEXT: br label %if.done
301301
; CHECK: if.done:
302302
; CHECK-NEXT: [[TMP2:%.*]] = phi ptr [ @.str.10, %entry ], [ [[RELTABLE_INTRINSIC]], %if.false ]
@@ -327,7 +327,7 @@ define ptr @gep_is_not_imm_followed_by_load(i32 %x) {
327327
; CHECK: entry:
328328
; CHECK-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i32 [[X:%.*]], 2
329329
; CHECK-NEXT: call void @may_not_return()
330-
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @reltable.gep_is_not_imm_followed_by_load, i32 [[RELTABLE_SHIFT]])
330+
; CHECK-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i32(ptr @table2.rel, i32 [[RELTABLE_SHIFT]])
331331
; CHECK-NEXT: ret ptr [[RELTABLE_INTRINSIC]]
332332
;
333333
entry:

0 commit comments

Comments
 (0)