@@ -463,6 +463,37 @@ struct MatmulTransposeOpConversion
463
463
}
464
464
};
465
465
466
+ class CShiftOpConversion : public HlfirIntrinsicConversion <hlfir::CShiftOp> {
467
+ using HlfirIntrinsicConversion<hlfir::CShiftOp>::HlfirIntrinsicConversion;
468
+
469
+ llvm::LogicalResult
470
+ matchAndRewrite (hlfir::CShiftOp cshift,
471
+ mlir::PatternRewriter &rewriter) const override {
472
+ fir::FirOpBuilder builder{rewriter, cshift.getOperation ()};
473
+ const mlir::Location &loc = cshift->getLoc ();
474
+
475
+ llvm::SmallVector<IntrinsicArgument, 3 > inArgs;
476
+ mlir::Value array = cshift.getArray ();
477
+ inArgs.push_back ({array, array.getType ()});
478
+ mlir::Value shift = cshift.getShift ();
479
+ inArgs.push_back ({shift, shift.getType ()});
480
+ inArgs.push_back ({cshift.getDim (), builder.getI32Type ()});
481
+
482
+ auto *argLowering = fir::getIntrinsicArgumentLowering (" cshift" );
483
+ llvm::SmallVector<fir::ExtendedValue, 3 > args =
484
+ lowerArguments (cshift, inArgs, rewriter, argLowering);
485
+
486
+ mlir::Type scalarResultType =
487
+ hlfir::getFortranElementType (cshift.getType ());
488
+
489
+ auto [resultExv, mustBeFreed] =
490
+ fir::genIntrinsicCall (builder, loc, " cshift" , scalarResultType, args);
491
+
492
+ processReturnValue (cshift, resultExv, mustBeFreed, builder, rewriter);
493
+ return mlir::success ();
494
+ }
495
+ };
496
+
466
497
class LowerHLFIRIntrinsics
467
498
: public hlfir::impl::LowerHLFIRIntrinsicsBase<LowerHLFIRIntrinsics> {
468
499
public:
@@ -475,7 +506,8 @@ class LowerHLFIRIntrinsics
475
506
AllOpConversion, AnyOpConversion, SumOpConversion,
476
507
ProductOpConversion, TransposeOpConversion, CountOpConversion,
477
508
DotProductOpConversion, MaxvalOpConversion, MinvalOpConversion,
478
- MinlocOpConversion, MaxlocOpConversion>(context);
509
+ MinlocOpConversion, MaxlocOpConversion, CShiftOpConversion>(
510
+ context);
479
511
480
512
// While conceptually this pass is performing dialect conversion, we use
481
513
// pattern rewrites here instead of dialect conversion because this pass
0 commit comments