[clang] [CIR] Correctly pass func self-comdat & alignment (PR #223773)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 15 12:07:55 PDT 2026
================
@@ -3142,37 +3149,53 @@ mlir::LogicalResult CIRToLLVMGlobalOpLowering::matchAndRewrite(
return mlir::success();
}
-mlir::SymbolRefAttr
-CIRToLLVMGlobalOpLowering::getComdatAttr(cir::GlobalOp &op,
- mlir::OpBuilder &builder) const {
- if (!op.getComdat())
- return mlir::SymbolRefAttr{};
-
- mlir::ModuleOp modOp = op->getParentOfType<mlir::ModuleOp>();
+static mlir::SymbolRefAttr getComdatAttrHelper(mlir::ModuleOp modOp,
+ mlir::OpBuilder &builder,
+ StringRef symName,
+ mlir::LLVM::ComdatOp &comdatOp,
+ StringRef comdatName) {
mlir::OpBuilder::InsertionGuard guard(builder);
- StringRef comdatName("__llvm_comdat_globals");
if (!comdatOp) {
builder.setInsertionPointToStart(modOp.getBody());
comdatOp =
mlir::LLVM::ComdatOp::create(builder, modOp.getLoc(), comdatName);
}
- if (auto comdatSelector = comdatOp.lookupSymbol<mlir::LLVM::ComdatSelectorOp>(
- op.getSymName())) {
+ if (auto comdatSelector =
+ comdatOp.lookupSymbol<mlir::LLVM::ComdatSelectorOp>(symName)) {
return mlir::SymbolRefAttr::get(
builder.getContext(), comdatName,
mlir::FlatSymbolRefAttr::get(comdatSelector.getSymNameAttr()));
}
builder.setInsertionPointToStart(&comdatOp.getBody().back());
auto selectorOp = mlir::LLVM::ComdatSelectorOp::create(
- builder, comdatOp.getLoc(), op.getSymName(),
- mlir::LLVM::comdat::Comdat::Any, /*sym_visibility=*/nullptr);
+ builder, comdatOp.getLoc(), symName, mlir::LLVM::comdat::Comdat::Any,
+ /*sym_visibility=*/nullptr);
return mlir::SymbolRefAttr::get(
builder.getContext(), comdatName,
mlir::FlatSymbolRefAttr::get(selectorOp.getSymNameAttr()));
}
+mlir::SymbolRefAttr
+CIRToLLVMGlobalOpLowering::getComdatAttr(cir::GlobalOp &op,
+ mlir::OpBuilder &builder) const {
+ if (!op.getComdat())
+ return mlir::SymbolRefAttr{};
+ return getComdatAttrHelper(op->getParentOfType<mlir::ModuleOp>(), builder,
+ op.getSymName(), comdatOp,
+ "__llvm_comdat_globals");
+}
+
+mlir::SymbolRefAttr
+CIRToLLVMFuncOpLowering::getComdatAttr(cir::FuncOp &op,
+ mlir::OpBuilder &builder) const {
+ if (!op.getComdat())
+ return mlir::SymbolRefAttr{};
+ return getComdatAttrHelper(op->getParentOfType<mlir::ModuleOp>(), builder,
+ op.getSymName(), comdatOp, "__llvm_comdat_funcs");
----------------
andykaylor wrote:
Is this visible in any testing?
https://github.com/llvm/llvm-project/pull/223773
More information about the cfe-commits
mailing list