@@ -650,6 +650,23 @@ struct BoxTypeDescOpConversion : public FIROpConversion<fir::BoxTypeDescOp> {
650
650
}
651
651
};
652
652
653
+ // / Lower `fir.box_typecode` to a sequence of operations to extract the type
654
+ // / code in the boxed value.
655
+ struct BoxTypeCodeOpConversion : public FIROpConversion <fir::BoxTypeCodeOp> {
656
+ using FIROpConversion::FIROpConversion;
657
+
658
+ mlir::LogicalResult
659
+ matchAndRewrite (fir::BoxTypeCodeOp op, OpAdaptor adaptor,
660
+ mlir::ConversionPatternRewriter &rewriter) const override {
661
+ mlir::Value box = adaptor.getOperands ()[0 ];
662
+ auto loc = box.getLoc ();
663
+ auto ty = convertType (op.getType ());
664
+ auto typeCode = getValueFromBox (loc, box, ty, rewriter, kTypePosInBox );
665
+ rewriter.replaceOp (op, typeCode);
666
+ return mlir::success ();
667
+ }
668
+ };
669
+
653
670
// / Lower `fir.string_lit` to LLVM IR dialect operation.
654
671
struct StringLitOpConversion : public FIROpConversion <fir::StringLitOp> {
655
672
using FIROpConversion::FIROpConversion;
@@ -3584,24 +3601,24 @@ class FIRToLLVMLowering
3584
3601
AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
3585
3602
BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
3586
3603
BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
3587
- BoxProcHostOpConversion, BoxRankOpConversion, BoxTypeDescOpConversion ,
3588
- CallOpConversion, CmpcOpConversion, ConstcOpConversion ,
3589
- ConvertOpConversion, CoordinateOpConversion, DispatchOpConversion ,
3590
- DispatchTableOpConversion, DTEntryOpConversion, DivcOpConversion ,
3591
- EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion ,
3592
- ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion ,
3593
- FreeMemOpConversion, GenTypeDescOpConversion, GlobalLenOpConversion ,
3594
- GlobalOpConversion, HasValueOpConversion, InsertOnRangeOpConversion ,
3595
- InsertValueOpConversion, IsPresentOpConversion ,
3596
- LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion ,
3597
- NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion ,
3598
- SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion ,
3599
- ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion ,
3600
- SliceOpConversion, StoreOpConversion, StringLitOpConversion ,
3601
- SubcOpConversion, UnboxCharOpConversion, UnboxProcOpConversion ,
3602
- UndefOpConversion, UnreachableOpConversion, XArrayCoorOpConversion ,
3603
- XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(
3604
- typeConverter, options, bindingTables);
3604
+ BoxProcHostOpConversion, BoxRankOpConversion, BoxTypeCodeOpConversion ,
3605
+ BoxTypeDescOpConversion, CallOpConversion, CmpcOpConversion ,
3606
+ ConstcOpConversion, ConvertOpConversion, CoordinateOpConversion ,
3607
+ DispatchOpConversion, DispatchTableOpConversion, DTEntryOpConversion ,
3608
+ DivcOpConversion, EmboxOpConversion, EmboxCharOpConversion ,
3609
+ EmboxProcOpConversion, ExtractValueOpConversion, FieldIndexOpConversion ,
3610
+ FirEndOpConversion, FreeMemOpConversion, GenTypeDescOpConversion ,
3611
+ GlobalLenOpConversion, GlobalOpConversion, HasValueOpConversion ,
3612
+ InsertOnRangeOpConversion, InsertValueOpConversion ,
3613
+ IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion ,
3614
+ MulcOpConversion, NegcOpConversion, NoReassocOpConversion ,
3615
+ SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion ,
3616
+ SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion ,
3617
+ ShiftOpConversion, SliceOpConversion, StoreOpConversion ,
3618
+ StringLitOpConversion, SubcOpConversion, UnboxCharOpConversion ,
3619
+ UnboxProcOpConversion, UndefOpConversion, UnreachableOpConversion ,
3620
+ XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
3621
+ ZeroOpConversion>( typeConverter, options, bindingTables);
3605
3622
mlir::populateFuncToLLVMConversionPatterns (typeConverter, pattern);
3606
3623
mlir::populateOpenMPToLLVMConversionPatterns (typeConverter, pattern);
3607
3624
mlir::arith::populateArithToLLVMConversionPatterns (typeConverter, pattern);
0 commit comments