Skip to content

Commit a8f3d42

Browse files
Merge pull request #23462 from aschwaighofer/dynamic_replaceable_thunk_is_tail
IRGen: The call to the dynamic implementation is a tail call
2 parents 82152b4 + add98ad commit a8f3d42

File tree

2 files changed

+2
-1
lines changed

2 files changed

+2
-1
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,6 +2057,7 @@ static void emitDynamicallyReplaceableThunk(IRGenModule &IGM,
20572057
forwardedArgs.push_back(&arg);
20582058
auto *Res =
20592059
B.CreateCall(FunctionPointer(typeFnPtr, signature), forwardedArgs);
2060+
Res->setTailCall();
20602061
if (implFn->getReturnType()->isVoidTy())
20612062
B.CreateRetVoid();
20622063
else

test/IRGen/dynamic_replaceable.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
// CHECK-NEXT: entry:
2626
// CHECK-NEXT: [[FUN_PTR:%.*]] = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_dynamically_replaceableTX, i32 0, i32 0)
2727
// CHECK-NEXT: [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()*
28-
// CHECK-NEXT: call swiftcc void [[TYPED_PTR]]()
28+
// CHECK-NEXT: tail call swiftcc void [[TYPED_PTR]]()
2929
// CHECK-NEXT: ret void
3030
// CHECK-NEXT: }
3131

0 commit comments

Comments
 (0)