Skip to content

Commit 4e6f812

Browse files
authored
[mlir][llvm] Align linkage enum order with LLVM (NFC) (#118484)
This change doesn't introduce any functional differences but aligns the implementation more closely with LLVM's representation. Previously, the code generated a lookup table to map MLIR enums to LLVM enums due to the lack of one-to-one correspondence. With this refactoring, the generated code now casts directly from one enum to another.
1 parent db4cbe5 commit 4e6f812

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

mlir/include/mlir-c/Dialect/LLVM.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -175,17 +175,17 @@ MLIR_CAPI_EXPORTED MlirAttribute mlirLLVMComdatAttrGet(MlirContext ctx,
175175
MlirLLVMComdat comdat);
176176

177177
enum MlirLLVMLinkage {
178-
MlirLLVMLinkagePrivate = 0,
179-
MlirLLVMLinkageInternal = 1,
180-
MlirLLVMLinkageAvailableExternally = 2,
181-
MlirLLVMLinkageLinkonce = 3,
178+
MlirLLVMLinkageExternal = 0,
179+
MlirLLVMLinkageAvailableExternally = 1,
180+
MlirLLVMLinkageLinkonce = 2,
181+
MlirLLVMLinkageLinkonceODR = 3,
182182
MlirLLVMLinkageWeak = 4,
183-
MlirLLVMLinkageCommon = 5,
183+
MlirLLVMLinkageWeakODR = 5,
184184
MlirLLVMLinkageAppending = 6,
185-
MlirLLVMLinkageExternWeak = 7,
186-
MlirLLVMLinkageLinkonceODR = 8,
187-
MlirLLVMLinkageWeakODR = 9,
188-
MlirLLVMLinkageExternal = 10,
185+
MlirLLVMLinkageInternal = 7,
186+
MlirLLVMLinkagePrivate = 8,
187+
MlirLLVMLinkageExternWeak = 9,
188+
MlirLLVMLinkageCommon = 10,
189189
};
190190
typedef enum MlirLLVMLinkage MlirLLVMLinkage;
191191

mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -615,40 +615,40 @@ def ICmpPredicate : LLVM_EnumAttr<
615615
//===----------------------------------------------------------------------===//
616616

617617
// Linkage attribute is used on functions and globals. The order follows that of
618-
// https://llvm.org/docs/LangRef.html#linkage-types. The names are equivalent to
619-
// visible names in the IR rather than to enum values names in llvm::GlobalValue
620-
// since the latter is easier to change.
621-
def LinkagePrivate
622-
: LLVM_EnumAttrCase<"Private", "private", "PrivateLinkage", 0>;
623-
def LinkageInternal
624-
: LLVM_EnumAttrCase<"Internal", "internal", "InternalLinkage", 1>;
618+
// llvm::GlobalValue::LinkageTypes from llvm/IR/GlobalValue.h. The names are
619+
// equivalent to visible names in the IR rather than to enum values names in
620+
// llvm::GlobalValue since the latter is easier to change.
621+
def LinkageExternal
622+
: LLVM_EnumAttrCase<"External", "external", "ExternalLinkage", 0>;
625623
def LinkageAvailableExternally
626624
: LLVM_EnumAttrCase<"AvailableExternally", "available_externally",
627-
"AvailableExternallyLinkage", 2>;
625+
"AvailableExternallyLinkage", 1>;
628626
def LinkageLinkonce
629-
: LLVM_EnumAttrCase<"Linkonce", "linkonce", "LinkOnceAnyLinkage", 3>;
627+
: LLVM_EnumAttrCase<"Linkonce", "linkonce", "LinkOnceAnyLinkage", 2>;
628+
def LinkageLinkonceODR
629+
: LLVM_EnumAttrCase<"LinkonceODR", "linkonce_odr", "LinkOnceODRLinkage", 3>;
630630
def LinkageWeak
631631
: LLVM_EnumAttrCase<"Weak", "weak", "WeakAnyLinkage", 4>;
632-
def LinkageCommon
633-
: LLVM_EnumAttrCase<"Common", "common", "CommonLinkage", 5>;
632+
def LinkageWeakODR
633+
: LLVM_EnumAttrCase<"WeakODR", "weak_odr", "WeakODRLinkage", 5>;
634634
def LinkageAppending
635635
: LLVM_EnumAttrCase<"Appending", "appending", "AppendingLinkage", 6>;
636+
def LinkageInternal
637+
: LLVM_EnumAttrCase<"Internal", "internal", "InternalLinkage", 7>;
638+
def LinkagePrivate
639+
: LLVM_EnumAttrCase<"Private", "private", "PrivateLinkage", 8>;
636640
def LinkageExternWeak
637-
: LLVM_EnumAttrCase<"ExternWeak", "extern_weak", "ExternalWeakLinkage", 7>;
638-
def LinkageLinkonceODR
639-
: LLVM_EnumAttrCase<"LinkonceODR", "linkonce_odr", "LinkOnceODRLinkage", 8>;
640-
def LinkageWeakODR
641-
: LLVM_EnumAttrCase<"WeakODR", "weak_odr", "WeakODRLinkage", 9>;
642-
def LinkageExternal
643-
: LLVM_EnumAttrCase<"External", "external", "ExternalLinkage", 10>;
641+
: LLVM_EnumAttrCase<"ExternWeak", "extern_weak", "ExternalWeakLinkage", 9>;
642+
def LinkageCommon
643+
: LLVM_EnumAttrCase<"Common", "common", "CommonLinkage", 10>;
644644

645645
def LinkageEnum : LLVM_EnumAttr<
646646
"Linkage",
647647
"::llvm::GlobalValue::LinkageTypes",
648648
"LLVM linkage types",
649-
[LinkagePrivate, LinkageInternal, LinkageAvailableExternally,
650-
LinkageLinkonce, LinkageWeak, LinkageCommon, LinkageAppending,
651-
LinkageExternWeak, LinkageLinkonceODR, LinkageWeakODR, LinkageExternal]> {
649+
[LinkageExternal, LinkageAvailableExternally, LinkageLinkonce,
650+
LinkageLinkonceODR, LinkageWeak, LinkageWeakODR, LinkageAppending,
651+
LinkageInternal, LinkagePrivate, LinkageExternWeak, LinkageCommon]> {
652652
let cppNamespace = "::mlir::LLVM::linkage";
653653
}
654654

0 commit comments

Comments
 (0)