[Mlir-commits] [mlir] [MLIR][LLVM] Implement LLVM dialect support for global aliases (PR #125295)
Christian Ulmann
llvmlistbot at llvm.org
Mon Feb 3 12:30:49 PST 2025
================
@@ -1251,6 +1253,63 @@ LogicalResult ModuleTranslation::convertGlobals() {
return success();
}
+/// Convert aliases.
+LogicalResult ModuleTranslation::convertAliases() {
+ for (auto op : getModuleBody(mlirModule).getOps<LLVM::AliasOp>()) {
+ llvm::Type *type = convertType(op.getType());
+ llvm::Constant *cst = nullptr;
+ auto linkage = convertLinkageToLLVM(op.getLinkage());
+ llvm::Module &llvmMod = *llvmModule;
+
+ llvm::GlobalAlias *var = llvm::GlobalAlias::create(
+ type, op.getAddrSpace(), linkage, op.getSymName(), cst, &llvmMod);
+
+ var->setThreadLocalMode(op.getThreadLocal_()
+ ? llvm::GlobalAlias::GeneralDynamicTLSModel
+ : llvm::GlobalAlias::NotThreadLocal);
+
+ // Note there is no need to setup the comdat because GlobalAlias calls into
+ // the aliasee comdat information automatically.
+
+ if (op.getUnnamedAddr().has_value())
+ var->setUnnamedAddr(convertUnnamedAddrToLLVM(*op.getUnnamedAddr()));
+
+ var->setVisibility(convertVisibilityToLLVM(op.getVisibility_()));
+
+ aliasesMapping.try_emplace(op, var);
+ }
+
+ // Convert global aliases. This is done after all global aliases
+ // have been created in LLVM IR because a global body may refer to another
+ // global alias. So all aliases need to be mapped first.
+ for (auto op : getModuleBody(mlirModule).getOps<LLVM::AliasOp>()) {
+ if (Block *initializer = op.getInitializerBlock()) {
+ llvm::IRBuilder<> builder(llvmModule->getContext());
+
+ for (auto &op : initializer->without_terminator()) {
----------------
Dinistro wrote:
Nit: Don't use `auto` here.
https://github.com/llvm/llvm-project/pull/125295
More information about the Mlir-commits
mailing list