14
14
#include " mlir/Dialect/LLVMIR/LLVMDialect.h"
15
15
#include " mlir/Dialect/LLVMIR/LLVMTypes.h"
16
16
#include " mlir/IR/MLIRContext.h"
17
+ #include " mlir/Interfaces/DataLayoutInterfaces.h"
17
18
#include " mlir/Transforms/DialectConversion.h"
18
19
19
20
namespace cir {
20
21
namespace direct {
22
+
23
+ // / Convert a CIR attribute to an LLVM attribute. May use the datalayout for
24
+ // / lowering attributes to-be-stored in memory.
21
25
mlir::Value lowerCirAttrAsValue (mlir::Operation *parentOp, mlir::Attribute attr,
22
26
mlir::ConversionPatternRewriter &rewriter,
23
- const mlir::TypeConverter *converter);
27
+ const mlir::TypeConverter *converter,
28
+ mlir::DataLayout const &dataLayout);
24
29
25
30
mlir::LLVM::Linkage convertLinkage (cir::GlobalLinkageKind linkage);
26
31
@@ -137,7 +142,13 @@ class CIRToLLVMMemSetInlineOpLowering
137
142
138
143
class CIRToLLVMPtrStrideOpLowering
139
144
: public mlir::OpConversionPattern<cir::PtrStrideOp> {
145
+ mlir::DataLayout const &dataLayout;
146
+
140
147
public:
148
+ CIRToLLVMPtrStrideOpLowering (const mlir::TypeConverter &typeConverter,
149
+ mlir::MLIRContext *context,
150
+ mlir::DataLayout const &dataLayout)
151
+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
141
152
using mlir::OpConversionPattern<cir::PtrStrideOp>::OpConversionPattern;
142
153
143
154
mlir::LogicalResult
@@ -216,9 +227,15 @@ class CIRToLLVMBrCondOpLowering
216
227
};
217
228
218
229
class CIRToLLVMCastOpLowering : public mlir ::OpConversionPattern<cir::CastOp> {
230
+ mlir::DataLayout const &dataLayout;
231
+
219
232
mlir::Type convertTy (mlir::Type ty) const ;
220
233
221
234
public:
235
+ CIRToLLVMCastOpLowering (const mlir::TypeConverter &typeConverter,
236
+ mlir::MLIRContext *context,
237
+ mlir::DataLayout const &dataLayout)
238
+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
222
239
using mlir::OpConversionPattern<cir::CastOp>::OpConversionPattern;
223
240
224
241
mlir::LogicalResult
@@ -302,12 +319,15 @@ class CIRToLLVMAllocaOpLowering
302
319
303
320
class CIRToLLVMLoadOpLowering : public mlir ::OpConversionPattern<cir::LoadOp> {
304
321
cir::LowerModule *lowerMod;
322
+ mlir::DataLayout const &dataLayout;
305
323
306
324
public:
307
325
CIRToLLVMLoadOpLowering (const mlir::TypeConverter &typeConverter,
308
326
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) {}
311
331
312
332
mlir::LogicalResult
313
333
matchAndRewrite (cir::LoadOp op, OpAdaptor,
@@ -317,12 +337,15 @@ class CIRToLLVMLoadOpLowering : public mlir::OpConversionPattern<cir::LoadOp> {
317
337
class CIRToLLVMStoreOpLowering
318
338
: public mlir::OpConversionPattern<cir::StoreOp> {
319
339
cir::LowerModule *lowerMod;
340
+ mlir::DataLayout const &dataLayout;
320
341
321
342
public:
322
343
CIRToLLVMStoreOpLowering (const mlir::TypeConverter &typeConverter,
323
344
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) {}
326
349
327
350
mlir::LogicalResult
328
351
matchAndRewrite (cir::StoreOp op, OpAdaptor,
@@ -332,12 +355,15 @@ class CIRToLLVMStoreOpLowering
332
355
class CIRToLLVMConstantOpLowering
333
356
: public mlir::OpConversionPattern<cir::ConstantOp> {
334
357
cir::LowerModule *lowerMod;
358
+ mlir::DataLayout const &dataLayout;
335
359
336
360
public:
337
361
CIRToLLVMConstantOpLowering (const mlir::TypeConverter &typeConverter,
338
362
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) {
341
367
setHasBoundedRewriteRecursion ();
342
368
}
343
369
@@ -538,12 +564,15 @@ class CIRToLLVMSwitchFlatOpLowering
538
564
class CIRToLLVMGlobalOpLowering
539
565
: public mlir::OpConversionPattern<cir::GlobalOp> {
540
566
cir::LowerModule *lowerMod;
567
+ mlir::DataLayout const &dataLayout;
541
568
542
569
public:
543
570
CIRToLLVMGlobalOpLowering (const mlir::TypeConverter &typeConverter,
544
571
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) {
547
576
setHasBoundedRewriteRecursion ();
548
577
}
549
578
@@ -904,7 +933,14 @@ class CIRToLLVMTrapOpLowering : public mlir::OpConversionPattern<cir::TrapOp> {
904
933
905
934
class CIRToLLVMInlineAsmOpLowering
906
935
: public mlir::OpConversionPattern<cir::InlineAsmOp> {
936
+ mlir::DataLayout const &dataLayout;
937
+
907
938
public:
939
+ CIRToLLVMInlineAsmOpLowering (const mlir::TypeConverter &typeConverter,
940
+ mlir::MLIRContext *context,
941
+ mlir::DataLayout const &dataLayout)
942
+ : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
943
+
908
944
using mlir::OpConversionPattern<cir::InlineAsmOp>::OpConversionPattern;
909
945
910
946
mlir::LogicalResult
0 commit comments