@@ -84,6 +84,8 @@ struct LoweringPreparePass : public LoweringPrepareBase<LoweringPreparePass> {
8484 void lowerGlobalOp (GlobalOp op);
8585 void lowerDynamicCastOp (DynamicCastOp op);
8686 void lowerStdFindOp (StdFindOp op);
87+ void lowerStdVectorCtorOp (StdVectorCtorOp op);
88+ void lowerStdVectorDtorOp (StdVectorDtorOp op);
8789 void lowerIterBeginOp (IterBeginOp op);
8890 void lowerIterEndOp (IterEndOp op);
8991 void lowerToMemCpy (StoreOp op);
@@ -1496,6 +1498,28 @@ void LoweringPreparePass::lowerStdFindOp(StdFindOp op) {
14961498 op.erase ();
14971499}
14981500
1501+ void LoweringPreparePass::lowerStdVectorCtorOp (StdVectorCtorOp op) {
1502+ CIRBaseBuilderTy builder (getContext ());
1503+ builder.setInsertionPointAfter (op.getOperation ());
1504+ auto call =
1505+ builder.createCallOp (op.getLoc (), op.getOriginalFnAttr (), mlir::Type{},
1506+ mlir::ValueRange{op.getOperand ()});
1507+
1508+ op.replaceAllUsesWith (call);
1509+ op.erase ();
1510+ }
1511+
1512+ void LoweringPreparePass::lowerStdVectorDtorOp (StdVectorDtorOp op) {
1513+ CIRBaseBuilderTy builder (getContext ());
1514+ builder.setInsertionPointAfter (op.getOperation ());
1515+ auto call =
1516+ builder.createCallOp (op.getLoc (), op.getOriginalFnAttr (), mlir::Type{},
1517+ mlir::ValueRange{op.getOperand ()});
1518+
1519+ op.replaceAllUsesWith (call);
1520+ op.erase ();
1521+ }
1522+
14991523void LoweringPreparePass::lowerIterBeginOp (IterBeginOp op) {
15001524 CIRBaseBuilderTy builder (getContext ());
15011525 builder.setInsertionPointAfter (op.getOperation ());
@@ -1607,6 +1631,10 @@ void LoweringPreparePass::runOnOp(Operation *op) {
16071631 lowerDynamicCastOp (dynamicCast);
16081632 } else if (auto stdFind = dyn_cast<StdFindOp>(op)) {
16091633 lowerStdFindOp (stdFind);
1634+ } else if (auto stdVectorCtorOp = dyn_cast<StdVectorCtorOp>(op)) {
1635+ lowerStdVectorCtorOp (stdVectorCtorOp);
1636+ } else if (auto stdVectorDtorOp = dyn_cast<StdVectorDtorOp>(op)) {
1637+ lowerStdVectorDtorOp (stdVectorDtorOp);
16101638 } else if (auto iterBegin = dyn_cast<IterBeginOp>(op)) {
16111639 lowerIterBeginOp (iterBegin);
16121640 } else if (auto iterEnd = dyn_cast<IterEndOp>(op)) {
@@ -1652,8 +1680,9 @@ void LoweringPreparePass::runOnOperation() {
16521680
16531681 op->walk ([&](Operation *op) {
16541682 if (isa<UnaryOp, BinOp, CastOp, ComplexBinOp, CmpThreeWayOp, VAArgOp,
1655- GlobalOp, DynamicCastOp, StdFindOp, IterEndOp, IterBeginOp,
1656- ArrayCtor, ArrayDtor, cir::FuncOp, StoreOp, ThrowOp, CallOp>(op))
1683+ GlobalOp, DynamicCastOp, StdFindOp, StdVectorCtorOp,
1684+ StdVectorDtorOp, IterEndOp, IterBeginOp, ArrayCtor, ArrayDtor,
1685+ cir::FuncOp, StoreOp, ThrowOp, CallOp>(op))
16571686 opsToTransform.push_back (op);
16581687 });
16591688
0 commit comments