================ @@ -649,6 +649,41 @@ void CIRGenFunction::emitNullabilityCheck(LValue lhs, mlir::Value rhs, assert(!cir::MissingFeatures::sanitizers()); } +/// Destroys all the elements of the given array, beginning from last to first. +/// The array cannot be zero-length. +/// +/// \param begin - a type* denoting the first element of the array +/// \param end - a type* denoting one past the end of the array +/// \param elementType - the element type of the array +/// \param destroyer - the function to call to destroy elements +void CIRGenFunction::emitArrayDestroy(mlir::Value begin, mlir::Value end, + QualType elementType, + CharUnits elementAlign, + Destroyer *destroyer, + bool checkZeroLength) { + assert(!elementType->isArrayType()); + if (checkZeroLength) + cgm.errorNYI("emitArrayDestroy: check for zero length"); + + // Differently from LLVM traditional codegen, use a higher level + // representation instead of lowering directly to a loop. + mlir::Type cirElementType = convertTypeForMem(elementType); + cir::PointerType ptrToElmType = builder.getPointerTo(cirElementType); + + // Emit the dtor call that will execute for every array element. + builder.create<cir::ArrayDtor>( ---------------- xlauko wrote:
We should probably align with mlir work of transforming from `builder.create` to `Op::create` At some point I will give passthrough what is upstreamed and fix it, but new stuff can be fixed on the fly directly. So this should be `cir::ArrayDtor::create(builder, ...` See more info here https://github.com/llvm/llvm-project/pull/147168 https://github.com/llvm/llvm-project/pull/150499 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits