diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2025-03-25 10:46:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-25 10:46:02 -0700 |
commit | 74c2c049d12cf9c2aa1ce8bcf16048f4a084dd90 (patch) | |
tree | f514d38d71538c37bf44fa8579fd7682e324adc2 | |
parent | 357306572d4734a75e649284b4808299d0aba9c8 (diff) | |
download | llvm-74c2c049d12cf9c2aa1ce8bcf16048f4a084dd90.zip llvm-74c2c049d12cf9c2aa1ce8bcf16048f4a084dd90.tar.gz llvm-74c2c049d12cf9c2aa1ce8bcf16048f4a084dd90.tar.bz2 |
[MLIR][LLVM] Add weak_odr to allowed linkage for alias (#132840)
I missed this when originally introduced the feature (note the verifier
message already contains it), this fixes a small bug.
-rw-r--r-- | mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp | 1 | ||||
-rw-r--r-- | mlir/test/Dialect/LLVMIR/alias.mlir | 10 | ||||
-rw-r--r-- | mlir/test/Target/LLVMIR/Import/alias.ll | 7 |
3 files changed, 13 insertions, 5 deletions
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index 309cee6..18a70cc 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -2646,6 +2646,7 @@ LogicalResult AliasOp::verify() { case Linkage::Internal: case Linkage::Private: case Linkage::Weak: + case Linkage::WeakODR: case Linkage::Linkonce: case Linkage::LinkonceODR: case Linkage::AvailableExternally: diff --git a/mlir/test/Dialect/LLVMIR/alias.mlir b/mlir/test/Dialect/LLVMIR/alias.mlir index 807843a..efba248 100644 --- a/mlir/test/Dialect/LLVMIR/alias.mlir +++ b/mlir/test/Dialect/LLVMIR/alias.mlir @@ -26,23 +26,23 @@ llvm.mlir.alias external @_ZTV1D : !llvm.struct<(array<3 x ptr>)> { // ----- -llvm.mlir.global external @zed(42 : i32) : i32 +llvm.mlir.global weak_odr @zed(42 : i32) : i32 -llvm.mlir.alias external @foo : i32 { +llvm.mlir.alias weak_odr @foo : i32 { %0 = llvm.mlir.addressof @zed : !llvm.ptr llvm.return %0 : !llvm.ptr } -llvm.mlir.alias external @foo2 : i16 { +llvm.mlir.alias weak_odr @foo2 : i16 { %0 = llvm.mlir.addressof @zed : !llvm.ptr llvm.return %0 : !llvm.ptr } -// CHECK: llvm.mlir.alias external @foo : i32 { +// CHECK: llvm.mlir.alias weak_odr @foo : i32 { // CHECK: %[[ADDR:.*]] = llvm.mlir.addressof @zed : !llvm.ptr // CHECK: llvm.return %[[ADDR]] : !llvm.ptr // CHECK: } -// CHECK: llvm.mlir.alias external @foo2 : i16 { +// CHECK: llvm.mlir.alias weak_odr @foo2 : i16 { // CHECK: %[[ADDR:.*]] = llvm.mlir.addressof @zed : !llvm.ptr // CHECK: llvm.return %[[ADDR]] : !llvm.ptr // CHECK: } diff --git a/mlir/test/Target/LLVMIR/Import/alias.ll b/mlir/test/Target/LLVMIR/Import/alias.ll index 23eaecb..7015d12 100644 --- a/mlir/test/Target/LLVMIR/Import/alias.ll +++ b/mlir/test/Target/LLVMIR/Import/alias.ll @@ -62,6 +62,13 @@ entry: ; // ----- +@glob.private2 = private constant [32 x i32] zeroinitializer +@glob2 = weak_odr hidden alias [32 x i32], inttoptr (i64 add (i64 ptrtoint (ptr @glob.private2 to i64), i64 1234) to ptr) + +; CHECK: llvm.mlir.alias weak_odr hidden @glob2 {dso_local} : !llvm.array<32 x i32> { + +; // ----- + @g1 = private global i32 0 @g2 = internal constant ptr @a1 @g3 = internal constant ptr @a2 |