1414#include " mlir/Dialect/LLVMIR/LLVMDialect.h"
1515#include " mlir/Dialect/LLVMIR/LLVMTypes.h"
1616#include " mlir/IR/MLIRContext.h"
17+ #include " mlir/Interfaces/DataLayoutInterfaces.h"
1718#include " mlir/Transforms/DialectConversion.h"
1819
1920namespace cir {
2021namespace direct {
22+
23+ // / Convert a CIR attribute to an LLVM attribute. May use the datalayout for
24+ // / lowering attributes to-be-stored in memory.
2125mlir::Value lowerCirAttrAsValue (mlir::Operation *parentOp, mlir::Attribute attr,
2226 mlir::ConversionPatternRewriter &rewriter,
23- const mlir::TypeConverter *converter);
27+ const mlir::TypeConverter *converter,
28+ mlir::DataLayout const &dataLayout);
2429
2530mlir::LLVM::Linkage convertLinkage (cir::GlobalLinkageKind linkage);
2631
@@ -137,7 +142,13 @@ class CIRToLLVMMemSetInlineOpLowering
137142
138143class CIRToLLVMPtrStrideOpLowering
139144 : public mlir::OpConversionPattern<cir::PtrStrideOp> {
145+ mlir::DataLayout const &dataLayout;
146+
140147public:
148+ CIRToLLVMPtrStrideOpLowering (const mlir::TypeConverter &typeConverter,
149+ mlir::MLIRContext *context,
150+ mlir::DataLayout const &dataLayout)
151+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
141152 using mlir::OpConversionPattern<cir::PtrStrideOp>::OpConversionPattern;
142153
143154 mlir::LogicalResult
@@ -216,9 +227,15 @@ class CIRToLLVMBrCondOpLowering
216227};
217228
218229class CIRToLLVMCastOpLowering : public mlir ::OpConversionPattern<cir::CastOp> {
230+ mlir::DataLayout const &dataLayout;
231+
219232 mlir::Type convertTy (mlir::Type ty) const ;
220233
221234public:
235+ CIRToLLVMCastOpLowering (const mlir::TypeConverter &typeConverter,
236+ mlir::MLIRContext *context,
237+ mlir::DataLayout const &dataLayout)
238+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
222239 using mlir::OpConversionPattern<cir::CastOp>::OpConversionPattern;
223240
224241 mlir::LogicalResult
@@ -302,12 +319,15 @@ class CIRToLLVMAllocaOpLowering
302319
303320class CIRToLLVMLoadOpLowering : public mlir ::OpConversionPattern<cir::LoadOp> {
304321 cir::LowerModule *lowerMod;
322+ mlir::DataLayout const &dataLayout;
305323
306324public:
307325 CIRToLLVMLoadOpLowering (const mlir::TypeConverter &typeConverter,
308326 mlir::MLIRContext *context,
309- cir::LowerModule *lowerModule)
310- : OpConversionPattern(typeConverter, context), lowerMod(lowerModule) {}
327+ cir::LowerModule *lowerModule,
328+ mlir::DataLayout const &dataLayout)
329+ : OpConversionPattern(typeConverter, context), lowerMod(lowerModule),
330+ dataLayout (dataLayout) {}
311331
312332 mlir::LogicalResult
313333 matchAndRewrite (cir::LoadOp op, OpAdaptor,
@@ -317,12 +337,15 @@ class CIRToLLVMLoadOpLowering : public mlir::OpConversionPattern<cir::LoadOp> {
317337class CIRToLLVMStoreOpLowering
318338 : public mlir::OpConversionPattern<cir::StoreOp> {
319339 cir::LowerModule *lowerMod;
340+ mlir::DataLayout const &dataLayout;
320341
321342public:
322343 CIRToLLVMStoreOpLowering (const mlir::TypeConverter &typeConverter,
323344 mlir::MLIRContext *context,
324- cir::LowerModule *lowerModule)
325- : OpConversionPattern(typeConverter, context), lowerMod(lowerModule) {}
345+ cir::LowerModule *lowerModule,
346+ mlir::DataLayout const &dataLayout)
347+ : OpConversionPattern(typeConverter, context), lowerMod(lowerModule),
348+ dataLayout (dataLayout) {}
326349
327350 mlir::LogicalResult
328351 matchAndRewrite (cir::StoreOp op, OpAdaptor,
@@ -332,12 +355,15 @@ class CIRToLLVMStoreOpLowering
332355class CIRToLLVMConstantOpLowering
333356 : public mlir::OpConversionPattern<cir::ConstantOp> {
334357 cir::LowerModule *lowerMod;
358+ mlir::DataLayout const &dataLayout;
335359
336360public:
337361 CIRToLLVMConstantOpLowering (const mlir::TypeConverter &typeConverter,
338362 mlir::MLIRContext *context,
339- cir::LowerModule *lowerModule)
340- : OpConversionPattern(typeConverter, context), lowerMod(lowerModule) {
363+ cir::LowerModule *lowerModule,
364+ mlir::DataLayout const &dataLayout)
365+ : OpConversionPattern(typeConverter, context), lowerMod(lowerModule),
366+ dataLayout (dataLayout) {
341367 setHasBoundedRewriteRecursion ();
342368 }
343369
@@ -538,12 +564,15 @@ class CIRToLLVMSwitchFlatOpLowering
538564class CIRToLLVMGlobalOpLowering
539565 : public mlir::OpConversionPattern<cir::GlobalOp> {
540566 cir::LowerModule *lowerMod;
567+ mlir::DataLayout const &dataLayout;
541568
542569public:
543570 CIRToLLVMGlobalOpLowering (const mlir::TypeConverter &typeConverter,
544571 mlir::MLIRContext *context,
545- cir::LowerModule *lowerModule)
546- : OpConversionPattern(typeConverter, context), lowerMod(lowerModule) {
572+ cir::LowerModule *lowerModule,
573+ mlir::DataLayout const &dataLayout)
574+ : OpConversionPattern(typeConverter, context), lowerMod(lowerModule),
575+ dataLayout (dataLayout) {
547576 setHasBoundedRewriteRecursion ();
548577 }
549578
@@ -904,7 +933,14 @@ class CIRToLLVMTrapOpLowering : public mlir::OpConversionPattern<cir::TrapOp> {
904933
905934class CIRToLLVMInlineAsmOpLowering
906935 : public mlir::OpConversionPattern<cir::InlineAsmOp> {
936+ mlir::DataLayout const &dataLayout;
937+
907938public:
939+ CIRToLLVMInlineAsmOpLowering (const mlir::TypeConverter &typeConverter,
940+ mlir::MLIRContext *context,
941+ mlir::DataLayout const &dataLayout)
942+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
943+
908944 using mlir::OpConversionPattern<cir::InlineAsmOp>::OpConversionPattern;
909945
910946 mlir::LogicalResult
0 commit comments