Skip to content

Commit e3f5986

Browse files
authored
[MLIR][mlir-link] Fix weak linkage for two weak definitions (#48)
Mimics the behaviour of llvm-link
1 parent 2171941 commit e3f5986

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

mlir/include/mlir/Linker/LLVMLinkerMixin.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,9 @@ class LLVMLinkerMixin {
293293
if (isLinkOnceLinkage(srcLinkage))
294294
return ConflictResolution::LinkFromDst;
295295

296-
if (isLinkOnceLinkage(dstLinkage) || isWeakLinkage(dstLinkage))
297-
return ConflictResolution::LinkFromSrc;
298-
299296
if (isCommonLinkage(srcLinkage)) {
297+
if (isLinkOnceLinkage(dstLinkage) || isWeakLinkage(dstLinkage))
298+
return ConflictResolution::LinkFromSrc;
300299
if (!isCommonLinkage(dstLinkage))
301300
return ConflictResolution::LinkFromDst;
302301
if (derived.getBitWidth(pair.src) > derived.getBitWidth(pair.dst))
@@ -309,10 +308,9 @@ class LLVMLinkerMixin {
309308
assert(!isAvailableExternallyLinkage(dstLinkage));
310309
if (isLinkOnceLinkage(dstLinkage) && isWeakLinkage(srcLinkage)) {
311310
return ConflictResolution::LinkFromSrc;
312-
} else {
313-
// No need to link the `src`
314-
return ConflictResolution::LinkFromDst;
315311
}
312+
// No need to link the `src`
313+
return ConflictResolution::LinkFromDst;
316314
}
317315

318316
if (isWeakForLinker(dstLinkage)) {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: mlir-link -split-input-file %s | FileCheck %s
2+
3+
// CHECK: llvm.mlir.global weak @v(0 : i8)
4+
5+
llvm.mlir.global weak @v(0 : i8) {addr_space = 0 : i32} : i8
6+
7+
llvm.func @use_v1() -> !llvm.ptr {
8+
%0 = llvm.mlir.addressof @v : !llvm.ptr
9+
llvm.return %0 : !llvm.ptr
10+
}
11+
12+
// -----
13+
14+
llvm.mlir.global weak @v(1 : i8) {addr_space = 0 : i32} : i8
15+
16+
llvm.func @use_v2() -> !llvm.ptr {
17+
%0 = llvm.mlir.addressof @v : !llvm.ptr
18+
llvm.return %0 : !llvm.ptr
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: mlir-link -split-input-file %s | FileCheck %s
2+
3+
// CHECK: llvm.mlir.global weak @v(1 : i8)
4+
5+
llvm.mlir.global weak @v(1 : i8) {addr_space = 0 : i32} : i8
6+
7+
llvm.func @use_v2() -> !llvm.ptr {
8+
%0 = llvm.mlir.addressof @v : !llvm.ptr
9+
llvm.return %0 : !llvm.ptr
10+
}
11+
12+
// -----
13+
14+
llvm.mlir.global weak @v(0 : i8) {addr_space = 0 : i32} : i8
15+
16+
llvm.func @use_v1() -> !llvm.ptr {
17+
%0 = llvm.mlir.addressof @v : !llvm.ptr
18+
llvm.return %0 : !llvm.ptr
19+
}

0 commit comments

Comments
 (0)