diff options
Diffstat (limited to 'flang/lib/Optimizer/Transforms')
-rw-r--r-- | flang/lib/Optimizer/Transforms/AffinePromotion.cpp | 2 | ||||
-rw-r--r-- | flang/lib/Optimizer/Transforms/CUFOpConversion.cpp | 7 | ||||
-rw-r--r-- | flang/lib/Optimizer/Transforms/StackArrays.cpp | 2 |
3 files changed, 8 insertions, 3 deletions
diff --git a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp index 061a7d2..bdc3418 100644 --- a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp +++ b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp @@ -474,7 +474,7 @@ public: mlir::PatternRewriter &rewriter) const override { LLVM_DEBUG(llvm::dbgs() << "AffineLoopConversion: rewriting loop:\n"; loop.dump();); - LLVM_ATTRIBUTE_UNUSED auto loopAnalysis = + [[maybe_unused]] auto loopAnalysis = functionAnalysis.getChildLoopAnalysis(loop); if (!loopAnalysis.canPromoteToAffine()) return rewriter.notifyMatchFailure(loop, "cannot promote to affine"); diff --git a/flang/lib/Optimizer/Transforms/CUFOpConversion.cpp b/flang/lib/Optimizer/Transforms/CUFOpConversion.cpp index 609a1fc..759e3a65d 100644 --- a/flang/lib/Optimizer/Transforms/CUFOpConversion.cpp +++ b/flang/lib/Optimizer/Transforms/CUFOpConversion.cpp @@ -558,6 +558,7 @@ static mlir::Value emboxSrc(mlir::PatternRewriter &rewriter, if (srcTy.isInteger(1)) { // i1 is not a supported type in the descriptor and it is actually coming // from a LOGICAL constant. Use the destination type to avoid mismatch. + assert(dstEleTy && "expect dst element type to be set"); srcTy = dstEleTy; src = createConvertOp(rewriter, loc, srcTy, src); addr = builder.createTemporary(loc, srcTy); @@ -652,7 +653,8 @@ struct CUFDataTransferOpConversion // Initialization of an array from a scalar value should be implemented // via a kernel launch. Use the flang runtime via the Assign function // until we have more infrastructure. - mlir::Value src = emboxSrc(rewriter, op, symtab); + mlir::Type dstEleTy = fir::unwrapInnerType(fir::unwrapRefType(dstTy)); + mlir::Value src = emboxSrc(rewriter, op, symtab, dstEleTy); mlir::Value dst = emboxDst(rewriter, op, symtab); mlir::func::FuncOp func = fir::runtime::getRuntimeFunc<mkRTKey(CUFDataTransferCstDesc)>( @@ -739,6 +741,9 @@ struct CUFDataTransferOpConversion fir::StoreOp::create(builder, loc, val, box); return box; } + if (mlir::isa<fir::BaseBoxType>(val.getType())) + if (auto loadOp = mlir::dyn_cast<fir::LoadOp>(val.getDefiningOp())) + return loadOp.getMemref(); return val; }; diff --git a/flang/lib/Optimizer/Transforms/StackArrays.cpp b/flang/lib/Optimizer/Transforms/StackArrays.cpp index 80b3f68..8601499 100644 --- a/flang/lib/Optimizer/Transforms/StackArrays.cpp +++ b/flang/lib/Optimizer/Transforms/StackArrays.cpp @@ -561,7 +561,7 @@ static mlir::Value convertAllocationType(mlir::PatternRewriter &rewriter, return stack; fir::HeapType firHeapTy = mlir::cast<fir::HeapType>(heapTy); - LLVM_ATTRIBUTE_UNUSED fir::ReferenceType firRefTy = + [[maybe_unused]] fir::ReferenceType firRefTy = mlir::cast<fir::ReferenceType>(stackTy); assert(firHeapTy.getElementType() == firRefTy.getElementType() && "Allocations must have the same type"); |