https://github.com/Lancern created 
https://github.com/llvm/llvm-project/pull/179971

This patch removes `cir::LowerModule` from the `LowerToLLVM` pass.

>From a7f834e078f666722d16db035989390f9e09e5f0 Mon Sep 17 00:00:00 2001
From: Sirui Mu <[email protected]>
Date: Fri, 6 Feb 2026 00:02:35 +0800
Subject: [PATCH] [CIR][NFC] Remove LowerModule from LowerToLLVM

---
 .../CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 43 ++++++++-----------
 .../CIR/Lowering/DirectToLLVM/LowerToLLVM.h   |  2 -
 clang/utils/TableGen/CIRLoweringEmitter.cpp   | 10 ++---
 3 files changed, 20 insertions(+), 35 deletions(-)

diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index a0a2b30cf9a52..8fa3ac5943d71 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -268,10 +268,8 @@ class CIRAttrToValue {
 public:
   CIRAttrToValue(mlir::Operation *parentOp,
                  mlir::ConversionPatternRewriter &rewriter,
-                 const mlir::TypeConverter *converter,
-                 cir::LowerModule *lowerMod)
-      : parentOp(parentOp), rewriter(rewriter), converter(converter),
-        lowerMod(lowerMod) {}
+                 const mlir::TypeConverter *converter)
+      : parentOp(parentOp), rewriter(rewriter), converter(converter) {}
 
   mlir::Value visit(mlir::Attribute attr) {
     return llvm::TypeSwitch<mlir::Attribute, mlir::Value>(attr)
@@ -300,16 +298,14 @@ class CIRAttrToValue {
   mlir::Operation *parentOp;
   mlir::ConversionPatternRewriter &rewriter;
   const mlir::TypeConverter *converter;
-  [[maybe_unused]] cir::LowerModule *lowerMod;
 };
 
 /// Switches on the type of attribute and calls the appropriate conversion.
 mlir::Value lowerCirAttrAsValue(mlir::Operation *parentOp,
                                 const mlir::Attribute attr,
                                 mlir::ConversionPatternRewriter &rewriter,
-                                const mlir::TypeConverter *converter,
-                                cir::LowerModule *lowerMod) {
-  CIRAttrToValue valueConverter(parentOp, rewriter, converter, lowerMod);
+                                const mlir::TypeConverter *converter) {
+  CIRAttrToValue valueConverter(parentOp, rewriter, converter);
   mlir::Value value = valueConverter.visit(attr);
   if (!value)
     llvm_unreachable("unhandled attribute type");
@@ -1895,8 +1891,7 @@ mlir::LogicalResult 
CIRToLLVMConstantOpLowering::matchAndRewrite(
     }
     // Lower GlobalViewAttr to llvm.mlir.addressof
     if (auto gv = mlir::dyn_cast<cir::GlobalViewAttr>(op.getValue())) {
-      auto newOp =
-          lowerCirAttrAsValue(op, gv, rewriter, getTypeConverter(), lowerMod);
+      auto newOp = lowerCirAttrAsValue(op, gv, rewriter, getTypeConverter());
       rewriter.replaceOp(op, newOp);
       return mlir::success();
     }
@@ -1908,33 +1903,32 @@ mlir::LogicalResult 
CIRToLLVMConstantOpLowering::matchAndRewrite(
 
     std::optional<mlir::Attribute> denseAttr;
     if (constArr && hasTrailingZeros(constArr)) {
-      const mlir::Value newOp = lowerCirAttrAsValue(
-          op, constArr, rewriter, getTypeConverter(), lowerMod);
+      const mlir::Value newOp =
+          lowerCirAttrAsValue(op, constArr, rewriter, getTypeConverter());
       rewriter.replaceOp(op, newOp);
       return mlir::success();
     } else if (constArr &&
                (denseAttr = lowerConstArrayAttr(constArr, typeConverter))) {
       attr = denseAttr.value();
     } else {
-      const mlir::Value initVal = lowerCirAttrAsValue(
-          op, op.getValue(), rewriter, typeConverter, lowerMod);
+      const mlir::Value initVal =
+          lowerCirAttrAsValue(op, op.getValue(), rewriter, typeConverter);
       rewriter.replaceOp(op, initVal);
       return mlir::success();
     }
   } else if (const auto recordAttr =
                  mlir::dyn_cast<cir::ConstRecordAttr>(op.getValue())) {
-    auto initVal =
-        lowerCirAttrAsValue(op, recordAttr, rewriter, typeConverter, lowerMod);
+    auto initVal = lowerCirAttrAsValue(op, recordAttr, rewriter, 
typeConverter);
     rewriter.replaceOp(op, initVal);
     return mlir::success();
   } else if (const auto vecTy = mlir::dyn_cast<cir::VectorType>(op.getType())) 
{
     rewriter.replaceOp(op, lowerCirAttrAsValue(op, op.getValue(), rewriter,
-                                               getTypeConverter(), lowerMod));
+                                               getTypeConverter()));
     return mlir::success();
   } else if (auto recTy = mlir::dyn_cast<cir::RecordType>(op.getType())) {
     if (mlir::isa<cir::ZeroAttr, cir::UndefAttr>(attr)) {
       mlir::Value initVal =
-          lowerCirAttrAsValue(op, attr, rewriter, typeConverter, lowerMod);
+          lowerCirAttrAsValue(op, attr, rewriter, typeConverter);
       rewriter.replaceOp(op, initVal);
       return mlir::success();
     }
@@ -2292,7 +2286,7 @@ 
CIRToLLVMGlobalOpLowering::matchAndRewriteRegionInitializedGlobal(
   // to the appropriate value.
   const mlir::Location loc = op.getLoc();
   setupRegionInitializedLLVMGlobalOp(op, rewriter);
-  CIRAttrToValue valueConverter(op, rewriter, typeConverter, lowerMod);
+  CIRAttrToValue valueConverter(op, rewriter, typeConverter);
   mlir::Value value = valueConverter.visit(init);
   mlir::LLVM::ReturnOp::create(rewriter, loc, value);
   return mlir::success();
@@ -3025,8 +3019,7 @@ mlir::LogicalResult 
CIRToLLVMSelectOpLowering::matchAndRewrite(
 }
 
 static void prepareTypeConverter(mlir::LLVMTypeConverter &converter,
-                                 mlir::DataLayout &dataLayout,
-                                 cir::LowerModule *lowerModule) {
+                                 mlir::DataLayout &dataLayout) {
   converter.addConversion([&](cir::PointerType type) -> mlir::Type {
     unsigned addrSpace =
         type.getAddrSpace() ? type.getAddrSpace().getValue().getUInt() : 0;
@@ -3324,9 +3317,7 @@ void ConvertCIRToLLVMPass::runOnOperation() {
   mlir::ModuleOp module = getOperation();
   mlir::DataLayout dl(module);
   mlir::LLVMTypeConverter converter(&getContext());
-  std::unique_ptr<cir::LowerModule> lowerModule =
-      cir::createLowerModule(module);
-  prepareTypeConverter(converter, dl, lowerModule.get());
+  prepareTypeConverter(converter, dl);
 
   /// Tracks the state required to lower CIR `LabelOp` and `BlockAddressOp`.
   /// Maps labels to their corresponding `BlockTagOp` and keeps bookkeeping
@@ -3335,13 +3326,13 @@ void ConvertCIRToLLVMPass::runOnOperation() {
   LLVMBlockAddressInfo blockInfoAddr;
   mlir::RewritePatternSet patterns(&getContext());
   patterns.add<CIRToLLVMBlockAddressOpLowering, CIRToLLVMLabelOpLowering>(
-      converter, patterns.getContext(), lowerModule.get(), dl, blockInfoAddr);
+      converter, patterns.getContext(), dl, blockInfoAddr);
 
   patterns.add<
 #define GET_LLVM_LOWERING_PATTERNS_LIST
 #include "clang/CIR/Dialect/IR/CIRLowering.inc"
 #undef GET_LLVM_LOWERING_PATTERNS_LIST
-      >(converter, patterns.getContext(), lowerModule.get(), dl);
+      >(converter, patterns.getContext(), dl);
 
   processCIRAttrs(module);
 
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h 
b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
index 7235794c3f9b4..0b5872f963317 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
@@ -12,8 +12,6 @@
 #ifndef CLANG_CIR_LOWERTOLLVM_H
 #define CLANG_CIR_LOWERTOLLVM_H
 
-#include "LowerModule.h"
-
 #include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
 #include "mlir/Dialect/LLVMIR/LLVMDialect.h"
 #include "mlir/Transforms/DialectConversion.h"
diff --git a/clang/utils/TableGen/CIRLoweringEmitter.cpp 
b/clang/utils/TableGen/CIRLoweringEmitter.cpp
index d50373bb8b5dc..21c3caca7c66d 100644
--- a/clang/utils/TableGen/CIRLoweringEmitter.cpp
+++ b/clang/utils/TableGen/CIRLoweringEmitter.cpp
@@ -140,7 +140,6 @@ void GenerateLLVMLoweringPattern(llvm::StringRef OpName,
 
   Code << "class " << PatternName
        << " : public mlir::OpConversionPattern<cir::" << OpName << "> {\n";
-  Code << "  [[maybe_unused]] cir::LowerModule *lowerMod;\n";
   Code << "  [[maybe_unused]] mlir::DataLayout const &dataLayout;\n";
 
   if (CustomCtor) {
@@ -156,10 +155,8 @@ void GenerateLLVMLoweringPattern(llvm::StringRef OpName,
 
   // Constructor
   Code << "  " << PatternName
-       << "(mlir::TypeConverter const "
-          "&typeConverter, mlir::MLIRContext *context, "
-          "cir::LowerModule *lowerMod, mlir::DataLayout const "
-          "&dataLayout";
+       << "(const mlir::TypeConverter &typeConverter, "
+          "mlir::MLIRContext *context, const mlir::DataLayout &dataLayout";
 
   if (CustomCtor)
     emitCustomParamList(Code, CustomCtor->Params);
@@ -167,8 +164,7 @@ void GenerateLLVMLoweringPattern(llvm::StringRef OpName,
   Code << ")\n";
 
   Code << "    : OpConversionPattern<cir::" << OpName
-       << ">(typeConverter, context), lowerMod(lowerMod), "
-          "dataLayout(dataLayout)";
+       << ">(typeConverter, context), dataLayout(dataLayout)";
 
   if (CustomCtor)
     emitCustomInitList(Code, CustomCtor->Params);

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to