Skip to content

Commit 8b5e0b8

Browse files
Merge pull request #69058 from kateinoigakukun/pr-e02f83f5dfca816f3961e7cf6e06a98b2816e77c
[IRGen] Use addCompactFunctionReference for dynamic replacement
2 parents c6ab10c + 5763741 commit 8b5e0b8

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1978,16 +1978,17 @@ void IRGenerator::emitDynamicReplacements() {
19781978
auto keyRef = IGM.getAddrOfLLVMVariableOrGOTEquivalent(
19791979
LinkEntity::forDynamicallyReplaceableFunctionKey(origFunc));
19801980

1981-
llvm::Constant *newFnPtr = llvm::ConstantExpr::getBitCast(
1982-
newFunc->isAsync()
1983-
? IGM.getAddrOfAsyncFunctionPointer(
1984-
LinkEntity::forSILFunction(newFunc))
1985-
: IGM.getAddrOfSILFunction(newFunc, NotForDefinition),
1986-
IGM.Int8PtrTy);
1987-
19881981
auto replacement = replacementsArray.beginStruct();
19891982
replacement.addRelativeAddress(keyRef); // tagged relative reference.
1990-
replacement.addRelativeAddress(newFnPtr); // direct relative reference.
1983+
if (newFunc->isAsync()) {
1984+
replacement.addRelativeAddress(llvm::ConstantExpr::getBitCast(
1985+
IGM.getAddrOfAsyncFunctionPointer(
1986+
LinkEntity::forSILFunction(newFunc)),
1987+
IGM.Int8PtrTy));
1988+
} else {
1989+
replacement.addCompactFunctionReference(IGM.getAddrOfSILFunction(
1990+
newFunc, NotForDefinition)); // direct relative reference.
1991+
}
19911992
replacement.addRelativeAddress(
19921993
replacementLinkEntry); // direct relative reference.
19931994
replacement.addInt32(

0 commit comments

Comments
 (0)