@@ -84,6 +84,8 @@ struct LoweringPreparePass : public LoweringPrepareBase<LoweringPreparePass> {
84
84
void lowerGlobalOp (GlobalOp op);
85
85
void lowerDynamicCastOp (DynamicCastOp op);
86
86
void lowerStdFindOp (StdFindOp op);
87
+ void lowerStdVectorCtorOp (StdVectorCtorOp op);
88
+ void lowerStdVectorDtorOp (StdVectorDtorOp op);
87
89
void lowerIterBeginOp (IterBeginOp op);
88
90
void lowerIterEndOp (IterEndOp op);
89
91
void lowerToMemCpy (StoreOp op);
@@ -1496,6 +1498,28 @@ void LoweringPreparePass::lowerStdFindOp(StdFindOp op) {
1496
1498
op.erase ();
1497
1499
}
1498
1500
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
+
1499
1523
void LoweringPreparePass::lowerIterBeginOp (IterBeginOp op) {
1500
1524
CIRBaseBuilderTy builder (getContext ());
1501
1525
builder.setInsertionPointAfter (op.getOperation ());
@@ -1607,6 +1631,10 @@ void LoweringPreparePass::runOnOp(Operation *op) {
1607
1631
lowerDynamicCastOp (dynamicCast);
1608
1632
} else if (auto stdFind = dyn_cast<StdFindOp>(op)) {
1609
1633
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);
1610
1638
} else if (auto iterBegin = dyn_cast<IterBeginOp>(op)) {
1611
1639
lowerIterBeginOp (iterBegin);
1612
1640
} else if (auto iterEnd = dyn_cast<IterEndOp>(op)) {
@@ -1652,8 +1680,9 @@ void LoweringPreparePass::runOnOperation() {
1652
1680
1653
1681
op->walk ([&](Operation *op) {
1654
1682
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))
1657
1686
opsToTransform.push_back (op);
1658
1687
});
1659
1688
0 commit comments