@@ -507,8 +507,11 @@ struct CUFDataTransferOpConversion
507
507
using OpRewritePattern::OpRewritePattern;
508
508
509
509
CUFDataTransferOpConversion (mlir::MLIRContext *context,
510
- const mlir::SymbolTable &symtab)
511
- : OpRewritePattern(context), symtab{symtab} {}
510
+ const mlir::SymbolTable &symtab,
511
+ mlir::DataLayout *dl,
512
+ const fir::LLVMTypeConverter *typeConverter)
513
+ : OpRewritePattern(context), symtab{symtab}, dl{dl},
514
+ typeConverter{typeConverter} {}
512
515
513
516
mlir::LogicalResult
514
517
matchAndRewrite (cuf::DataTransferOp op,
@@ -576,7 +579,13 @@ struct CUFDataTransferOpConversion
576
579
nbElement = builder.createIntegerConstant (
577
580
loc, i64Ty, seqTy.getConstantArraySize ());
578
581
}
579
- int width = computeWidth (loc, dstTy, kindMap);
582
+ unsigned width = 0 ;
583
+ if (fir::isa_derived (dstTy)) {
584
+ mlir::Type structTy = typeConverter->convertType (dstTy);
585
+ width = dl->getTypeSizeInBits (structTy) / 8 ;
586
+ } else {
587
+ width = computeWidth (loc, dstTy, kindMap);
588
+ }
580
589
mlir::Value widthValue = rewriter.create <mlir::arith::ConstantOp>(
581
590
loc, i64Ty, rewriter.getIntegerAttr (i64Ty, width));
582
591
mlir::Value bytes =
@@ -647,6 +656,8 @@ struct CUFDataTransferOpConversion
647
656
648
657
private:
649
658
const mlir::SymbolTable &symtab;
659
+ mlir::DataLayout *dl;
660
+ const fir::LLVMTypeConverter *typeConverter;
650
661
};
651
662
652
663
struct CUFLaunchOpConversion
@@ -749,6 +760,7 @@ void cuf::populateCUFToFIRConversionPatterns(
749
760
patterns.insert <CUFAllocOpConversion>(patterns.getContext (), &dl, &converter);
750
761
patterns.insert <CUFAllocateOpConversion, CUFDeallocateOpConversion,
751
762
CUFFreeOpConversion>(patterns.getContext ());
752
- patterns.insert <CUFDataTransferOpConversion, CUFLaunchOpConversion>(
753
- patterns.getContext (), symtab);
763
+ patterns.insert <CUFDataTransferOpConversion>(patterns.getContext (), symtab,
764
+ &dl, &converter);
765
+ patterns.insert <CUFLaunchOpConversion>(patterns.getContext (), symtab);
754
766
}
0 commit comments