diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -827,6 +827,20 @@ } }; +/// Lower fir.len_param_index +struct LenParamIndexOpConversion + : public FIROpConversion { + using FIROpConversion::FIROpConversion; + + // FIXME: this should be specialized by the runtime target + mlir::LogicalResult + matchAndRewrite(fir::LenParamIndexOp lenp, OpAdaptor, + mlir::ConversionPatternRewriter &rewriter) const override { + return rewriter.notifyMatchFailure( + lenp, "fir.len_param_index codegen is not implemented yet"); + } +}; + /// Lower `fir.gentypedesc` to a global constant. struct GenTypeDescOpConversion : public FIROpConversion { using FIROpConversion::FIROpConversion; @@ -2179,14 +2193,15 @@ EmboxProcOpConversion, ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion, HasValueOpConversion, GenTypeDescOpConversion, GlobalLenOpConversion, GlobalOpConversion, InsertOnRangeOpConversion, - InsertValueOpConversion, IsPresentOpConversion, LoadOpConversion, - NegcOpConversion, NoReassocOpConversion, MulcOpConversion, - SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion, - SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion, - ShiftOpConversion, SliceOpConversion, StoreOpConversion, - StringLitOpConversion, SubcOpConversion, UnboxCharOpConversion, - UnboxProcOpConversion, UndefOpConversion, UnreachableOpConversion, - ZeroOpConversion>(typeConverter); + InsertValueOpConversion, IsPresentOpConversion, + LenParamIndexOpConversion, LoadOpConversion, NegcOpConversion, + NoReassocOpConversion, MulcOpConversion, SelectCaseOpConversion, + SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion, + ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion, + SliceOpConversion, StoreOpConversion, StringLitOpConversion, + SubcOpConversion, UnboxCharOpConversion, UnboxProcOpConversion, + UndefOpConversion, UnreachableOpConversion, ZeroOpConversion>( + typeConverter); mlir::populateStdToLLVMConversionPatterns(typeConverter, pattern); mlir::arith::populateArithmeticToLLVMConversionPatterns(typeConverter, pattern); diff --git a/flang/test/Fir/convert-to-llvm-invalid.fir b/flang/test/Fir/convert-to-llvm-invalid.fir --- a/flang/test/Fir/convert-to-llvm-invalid.fir +++ b/flang/test/Fir/convert-to-llvm-invalid.fir @@ -86,6 +86,16 @@ // ----- +// Test `fir.len_param_index` conversion failure. Not implemented yet. + +func @lenparamindex() { + // expected-error@+1{{failed to legalize operation 'fir.len_param_index'}} + %0 = fir.len_param_index l1, !fir.type + return +} + +// ----- + // Test `fir.gentypedesc` conversion failure. Not implemented yet. func @gentypedesc() {