@@ -77,6 +77,7 @@ struct LoweringPreparePass : public LoweringPrepareBase<LoweringPreparePass> {
7777 void lowerComplexBinOp (ComplexBinOp op);
7878 void lowerThreeWayCmpOp (CmpThreeWayOp op);
7979 void lowerVAArgOp (VAArgOp op);
80+ void lowerDeleteArrayOp (DeleteArrayOp op);
8081 void lowerGlobalOp (GlobalOp op);
8182 void lowerDynamicCastOp (DynamicCastOp op);
8283 void lowerStdFindOp (StdFindOp op);
@@ -157,6 +158,8 @@ struct LoweringPreparePass : public LoweringPrepareBase<LoweringPreparePass> {
157158 // / Tracks current module.
158159 ModuleOp theModule;
159160
161+ std::optional<cir::CIRDataLayout> datalayout;
162+
160163 // / Tracks existing dynamic initializers.
161164 llvm::StringMap<uint32_t > dynamicInitializerNames;
162165 llvm::SmallVector<FuncOp, 4 > dynamicInitializers;
@@ -344,16 +347,26 @@ static void canonicalizeIntrinsicThreeWayCmp(CIRBaseBuilderTy &builder,
344347void LoweringPreparePass::lowerVAArgOp (VAArgOp op) {
345348 CIRBaseBuilderTy builder (getContext ());
346349 builder.setInsertionPoint (op);
347- cir::CIRDataLayout datalayout (theModule);
348350
349- auto res = cxxABI->lowerVAArg (builder, op, datalayout);
351+ auto res = cxxABI->lowerVAArg (builder, op, * datalayout);
350352 if (res) {
351353 op.replaceAllUsesWith (res);
352354 op.erase ();
353355 }
354356 return ;
355357}
356358
359+ void LoweringPreparePass::lowerDeleteArrayOp (DeleteArrayOp op) {
360+ CIRBaseBuilderTy builder (getContext ());
361+ builder.setInsertionPoint (op);
362+
363+ cxxABI->lowerDeleteArray (builder, op, *datalayout);
364+ // DeleteArrayOp won't have a result, so we don't need to replace
365+ // the uses.
366+ op.erase ();
367+ return ;
368+ }
369+
357370void LoweringPreparePass::lowerUnaryOp (UnaryOp op) {
358371 auto ty = op.getType ();
359372 if (!mlir::isa<cir::ComplexType>(ty))
@@ -1188,6 +1201,7 @@ void LoweringPreparePass::runOnOperation() {
11881201 auto *op = getOperation ();
11891202 if (isa<::mlir::ModuleOp>(op)) {
11901203 theModule = cast<::mlir::ModuleOp>(op);
1204+ datalayout.emplace (theModule);
11911205 }
11921206
11931207 llvm::SmallVector<Operation *> opsToTransform;
0 commit comments