Skip to content

Commit bc7024e

Browse files
committed
Optimizer: fix ModulePassContext.mangle(withDeadArguments:)
If mangled the wrong argument indices.
1 parent 5b9c206 commit bc7024e

File tree

4 files changed

+7
-14
lines changed

4 files changed

+7
-14
lines changed

SwiftCompilerSources/Sources/Optimizer/PassManager/ModulePassContext.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,8 @@ struct ModulePassContext : Context, CustomStringConvertible {
201201
}
202202

203203
func mangle(withDeadArguments: [Int], from function: Function) -> String {
204-
withDeadArguments.withUnsafeBufferPointer { bufPtr in
205-
bufPtr.withMemoryRebound(to: Int.self) { valPtr in
206-
String(taking: _bridged.mangleWithDeadArgs(valPtr.baseAddress,
207-
withDeadArguments.count,
208-
function.bridged))
209-
}
204+
withDeadArguments.withBridgedArrayRef { bridgedArgIndices in
205+
String(taking: _bridged.mangleWithDeadArgs(bridgedArgIndices, function.bridged))
210206
}
211207
}
212208

include/swift/SILOptimizer/OptimizerBridging.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,7 @@ struct BridgedPassContext {
250250
bool specializeAppliesInFunction(BridgedFunction function, bool isMandatory) const;
251251
BridgedOwnedString mangleOutlinedVariable(BridgedFunction function) const;
252252
BridgedOwnedString mangleAsyncRemoved(BridgedFunction function) const;
253-
BridgedOwnedString mangleWithDeadArgs(const SwiftInt * _Nullable deadArgs,
254-
SwiftInt numDeadArgs,
255-
BridgedFunction function) const;
253+
BridgedOwnedString mangleWithDeadArgs(BridgedArrayRef bridgedDeadArgIndices, BridgedFunction function) const;
256254
BridgedOwnedString mangleWithClosureArgs(BridgedValueArray closureArgs,
257255
BridgedArrayRef closureArgIndices,
258256
BridgedFunction applySiteCallee) const;

lib/SILOptimizer/Utils/OptimizerBridging.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,14 +290,13 @@ BridgedOwnedString BridgedPassContext::mangleAsyncRemoved(BridgedFunction functi
290290
return BridgedOwnedString(Mangler.mangle());
291291
}
292292

293-
BridgedOwnedString BridgedPassContext::mangleWithDeadArgs(const SwiftInt * _Nullable deadArgs,
294-
SwiftInt numDeadArgs,
293+
BridgedOwnedString BridgedPassContext::mangleWithDeadArgs(BridgedArrayRef bridgedDeadArgIndices,
295294
BridgedFunction function) const {
296295
SILFunction *f = function.getFunction();
297296
Mangle::FunctionSignatureSpecializationMangler Mangler(f->getASTContext(),
298297
Demangle::SpecializationPass::FunctionSignatureOpts,
299298
f->getSerializedKind(), f);
300-
for (SwiftInt idx = 0; idx < numDeadArgs; idx++) {
299+
for (SwiftInt idx : bridgedDeadArgIndices.unbridged<SwiftInt>()) {
301300
Mangler.setArgumentDead((unsigned)idx);
302301
}
303302
return BridgedOwnedString(Mangler.mangle());

test/SILOptimizer/mandatory_performance_optimizations.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ bb3:
203203
}
204204

205205
// CHECK-LABEL: sil [no_locks] [perf_constraint] [ossa] @remove_metatype_arg :
206-
// CHECK: [[F:%.*]] = function_ref @$s12metatype_argTf4dnn_n : $@convention(thin) (Int, @owned Builtin.NativeObject) -> @owned Builtin.NativeObject
206+
// CHECK: [[F:%.*]] = function_ref @$s12metatype_argTf4ndn_n : $@convention(thin) (Int, @owned Builtin.NativeObject) -> @owned Builtin.NativeObject
207207
// CHECK: [[A:%.*]] = apply [[F]](%0, %1) : $@convention(thin) (Int, @owned Builtin.NativeObject) -> @owned Builtin.NativeObject
208208
// CHECK: return [[A]]
209209
// CHECK: } // end sil function 'remove_metatype_arg'
@@ -223,7 +223,7 @@ bb0(%0 : $Int, %1 : $@thick Int.Type, %2 : @owned $Builtin.NativeObject):
223223
}
224224

225225
// CHECK-LABEL: sil [no_locks] [perf_constraint] [ossa] @remove_metatype_arg_throws :
226-
// CHECK: [[F:%.*]] = function_ref @$s19metatype_arg_throwsTf4dnn_n : $@convention(thin) (Int, @owned Builtin.NativeObject) -> (@owned Builtin.NativeObject, @error any Error)
226+
// CHECK: [[F:%.*]] = function_ref @$s19metatype_arg_throwsTf4ndn_n : $@convention(thin) (Int, @owned Builtin.NativeObject) -> (@owned Builtin.NativeObject, @error any Error)
227227
// CHECK: try_apply [[F]](%0, %1) : $@convention(thin) (Int, @owned Builtin.NativeObject) -> (@owned Builtin.NativeObject, @error any Error), normal bb1, error bb2
228228
// CHECK: bb1([[R:%.*]] : @owned $Builtin.NativeObject):
229229
// CHECK: return [[R]]

0 commit comments

Comments
 (0)