From b7d347b1f4103c7c7af66d75dd0de37020970c15 Mon Sep 17 00:00:00 2001 From: Razvan Lupusoru Date: Thu, 20 Feb 2025 16:52:09 -0800 Subject: [PATCH] [FIR] Avoid generating llvm.undef for dummy scoping info Dummy scoping operations are generated to keep track of scopes for purpose of Fortran level analyses like Alias Analysis. For codegen, the scoping info is converted to a fir.undef during pre-codegen rewrite. Then during declare lowering, this info is no longer used - but it is still translated to llvm.undef. I cleaned up so it is simply erased. The generated LLVM should now no longer have a stray undef which looks off when trying to make sense of the IR. --- flang/lib/Optimizer/CodeGen/CodeGen.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index 439cc7a856236..bd87215eeb179 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -3575,6 +3575,14 @@ struct UndefOpConversion : public fir::FIROpConversion { llvm::LogicalResult matchAndRewrite(fir::UndefOp undef, OpAdaptor, mlir::ConversionPatternRewriter &rewriter) const override { + if (mlir::isa(undef.getType())) { + // Dummy scoping is used for Fortran analyses like AA. Once it gets to + // pre-codegen rewrite it is erased and a fir.undef is created to + // feed to the fir declare operation. Thus, during codegen, we can + // simply erase is as it is no longer used. + rewriter.eraseOp(undef); + return mlir::success(); + } rewriter.replaceOpWithNewOp( undef, convertType(undef.getType())); return mlir::success();