@@ -1147,8 +1147,9 @@ bool TypeLoweringVisitor::visitDecl(FModuleOp module) {
1147
1147
auto newArgs = llvm::map_to_vector (module .getPorts (), [](auto pi) {
1148
1148
return PortInfoWithIP{pi, std::nullopt};
1149
1149
});
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) {
1152
1153
SmallVector<Value> lowerings;
1153
1154
if (lowerArg (module , argIndex, argsRemoved, newArgs, lowerings)) {
1154
1155
auto arg = module .getArgument (argIndex);
@@ -1161,10 +1162,17 @@ bool TypeLoweringVisitor::visitDecl(FModuleOp module) {
1161
1162
}
1162
1163
1163
1164
// 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
+ }
1168
1176
1169
1177
SmallVector<NamedAttribute, 8 > newModuleAttrs;
1170
1178
0 commit comments