diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index aca8f96a37f9c..c5c14414041ad 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -246,7 +246,7 @@ class FIROpConversion : public mlir::ConvertOpToLLVMPattern { mlir::LLVM::GEPOp genGEP(mlir::Location loc, mlir::Type ty, mlir::ConversionPatternRewriter &rewriter, mlir::Value base, ARGS... args) const { - llvm::SmallVector cv{args...}; + llvm::SmallVector cv = {args...}; return rewriter.create(loc, ty, base, cv); } @@ -275,8 +275,10 @@ class FIROpAndTypeConversion : public FIROpConversion { doRewrite(FromOp addr, mlir::Type ty, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const = 0; }; +} // namespace -// Lower `fir.address_of` operation to `llvm.address_of` operation. +namespace { +/// Lower `fir.address_of` operation to `llvm.address_of` operation. struct AddrOfOpConversion : public FIROpConversion { using FIROpConversion::FIROpConversion; @@ -299,7 +301,9 @@ getDependentTypeMemSizeFn(fir::RecordType recTy, fir::AllocaOp op, mlir::ConversionPatternRewriter &rewriter) { auto module = op->getParentOfType(); std::string name = recTy.getName().str() + "P.mem.size"; - return module.lookupSymbol(name); + if (auto memSizeFunc = module.lookupSymbol(name)) + return memSizeFunc; + TODO(op.getLoc(), "did not find allocation function"); } // Compute the alloc scale size (constant factors encoded in the array type). @@ -366,8 +370,7 @@ struct AllocaOpConversion : public FIROpConversion { auto call = rewriter.create( loc, ity, lenParams, llvm::ArrayRef{attr}); size = call.getResult(0); - ty = mlir::LLVM::LLVMPointerType::get( - mlir::IntegerType::get(alloc.getContext(), 8)); + ty = ::getVoidPtrType(alloc.getContext()); } else { return emitError(loc, "unexpected type ") << scalarType << " with type parameters"; @@ -637,7 +640,7 @@ struct StringLitOpConversion : public FIROpConversion { } }; -// `fir.call` -> `llvm.call` +/// `fir.call` -> `llvm.call` struct CallOpConversion : public FIROpConversion { using FIROpConversion::FIROpConversion; @@ -678,7 +681,7 @@ struct CmpcOpConversion : public FIROpConversion { mlir::Type resTy = convertType(cmp.getType()); mlir::Location loc = cmp.getLoc(); auto pos0 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(0)); - llvm::SmallVector rp{ + llvm::SmallVector rp = { rewriter.create(loc, eleTy, operands[0], pos0), rewriter.create(loc, eleTy, operands[1], @@ -686,14 +689,14 @@ struct CmpcOpConversion : public FIROpConversion { auto rcp = rewriter.create(loc, resTy, rp, cmp->getAttrs()); auto pos1 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(1)); - llvm::SmallVector ip{ + llvm::SmallVector ip = { rewriter.create(loc, eleTy, operands[0], pos1), rewriter.create(loc, eleTy, operands[1], pos1)}; auto icp = rewriter.create(loc, resTy, ip, cmp->getAttrs()); - llvm::SmallVector cp{rcp, icp}; + llvm::SmallVector cp = {rcp, icp}; switch (cmp.getPredicate()) { case mlir::arith::CmpFPredicate::OEQ: // .EQ. rewriter.replaceOpWithNewOp(cmp, resTy, cp); @@ -992,7 +995,7 @@ computeDerivedTypeSize(mlir::Location loc, mlir::Type ptrTy, mlir::Type idxTy, mlir::ConversionPatternRewriter &rewriter) { auto nullPtr = rewriter.create(loc, ptrTy); mlir::Value one = genConstantIndex(loc, idxTy, rewriter, 1); - llvm::SmallVector args{one}; + llvm::SmallVector args = {one}; auto gep = rewriter.create(loc, ptrTy, nullPtr, args); return rewriter.create(loc, idxTy, gep); } @@ -1005,12 +1008,12 @@ struct AllocMemOpConversion : public FIROpConversion { mlir::LogicalResult matchAndRewrite(fir::AllocMemOp heap, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override { - auto heapTy = heap.getType(); - auto ty = convertType(heapTy); + mlir::Type heapTy = heap.getType(); + mlir::Type ty = convertType(heapTy); mlir::LLVM::LLVMFuncOp mallocFunc = getMalloc(heap, rewriter); mlir::Location loc = heap.getLoc(); auto ity = lowerTy().indexType(); - auto dataTy = fir::unwrapRefType(heapTy); + mlir::Type dataTy = fir::unwrapRefType(heapTy); if (fir::isRecordWithTypeParameters(fir::unwrapSequenceType(dataTy))) TODO(loc, "fir.allocmem codegen of derived type with length parameters"); mlir::Value size = genTypeSizeInBytes(loc, ity, rewriter, ty); @@ -1080,8 +1083,6 @@ struct FreeMemOpConversion : public FIROpConversion { }; } // namespace -namespace {} // namespace - /// Common base class for embox to descriptor conversion. template struct EmboxCommonConversion : public FIROpConversion { @@ -1130,7 +1131,7 @@ struct EmboxCommonConversion : public FIROpConversion { return recTy && recTy.getNumLenParams() > 0; } static bool isDerivedType(fir::BoxType boxTy) { - return unwrapIfDerived(boxTy) != nullptr; + return static_cast(unwrapIfDerived(boxTy)); } // Get the element size and CFI type code of the boxed value. @@ -2000,8 +2001,8 @@ struct InsertOnRangeOpConversion type = t.getElementType(); } - llvm::SmallVector lBounds; - llvm::SmallVector uBounds; + llvm::SmallVector lBounds; + llvm::SmallVector uBounds; // Unzip the upper and lower bound and convert to a row major format. mlir::DenseIntElementsAttr coor = range.getCoor(); @@ -2391,7 +2392,7 @@ struct CoordinateOpConversion } auto voidPtrBase = rewriter.create(loc, voidPtrTy, resultAddr); - llvm::SmallVector args{off}; + llvm::SmallVector args = {off}; resultAddr = rewriter.create(loc, voidPtrTy, voidPtrBase, args); i += arrTy.getDimension() - 1; @@ -2618,7 +2619,7 @@ struct GlobalOpConversion : public FIROpConversion { if (global.getType().isa()) tyAttr = tyAttr.cast().getElementType(); auto loc = global.getLoc(); - mlir::Attribute initAttr{}; + mlir::Attribute initAttr; if (global.getInitVal()) initAttr = global.getInitVal().getValue(); auto linkage = convertLinkage(global.getLinkName()); @@ -3321,8 +3322,6 @@ namespace { /// /// This pass lowers all FIR dialect operations to LLVM IR dialect. An /// MLIR pass is used to lower residual Std dialect to LLVM IR dialect. -/// -/// This pass is not complete yet. We are upstreaming it in small patches. class FIRToLLVMLowering : public fir::FIRToLLVMLoweringBase { public: FIRToLLVMLowering() = default;