Skip to content

Commit eeaf9a8

Browse files
authored
[FIRRTL] LowerTypes: Manually compact newArgs vector (#7831)
1 parent 6754869 commit eeaf9a8

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

lib/Dialect/FIRRTL/Transforms/LowerTypes.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,8 +1147,9 @@ bool TypeLoweringVisitor::visitDecl(FModuleOp module) {
11471147
auto newArgs = llvm::map_to_vector(module.getPorts(), [](auto pi) {
11481148
return PortInfoWithIP{pi, std::nullopt};
11491149
});
1150-
for (size_t argIndex = 0, argsRemoved = 0; argIndex < newArgs.size();
1151-
++argIndex) {
1150+
1151+
size_t argsRemoved = 0;
1152+
for (size_t argIndex = 0; argIndex < newArgs.size(); ++argIndex) {
11521153
SmallVector<Value> lowerings;
11531154
if (lowerArg(module, argIndex, argsRemoved, newArgs, lowerings)) {
11541155
auto arg = module.getArgument(argIndex);
@@ -1161,10 +1162,17 @@ bool TypeLoweringVisitor::visitDecl(FModuleOp module) {
11611162
}
11621163

11631164
// Remove block args that have been lowered.
1164-
body->eraseArguments(argsToRemove);
1165-
for (auto deadArg = argsToRemove.find_last(); deadArg != -1;
1166-
deadArg = argsToRemove.find_prev(deadArg))
1167-
newArgs.erase(newArgs.begin() + deadArg);
1165+
if (argsRemoved != 0) {
1166+
body->eraseArguments(argsToRemove);
1167+
size_t size = newArgs.size();
1168+
for (size_t src = 0, dst = 0; src < size; ++src) {
1169+
if (argsToRemove[src])
1170+
continue;
1171+
newArgs[dst] = newArgs[src];
1172+
++dst;
1173+
}
1174+
newArgs.erase(newArgs.end() - argsRemoved, newArgs.end());
1175+
}
11681176

11691177
SmallVector<NamedAttribute, 8> newModuleAttrs;
11701178

0 commit comments

Comments
 (0)