Skip to content

Commit d5e57c3

Browse files
committed
[CodeGen][ARM64EC][NFC] Factor out emitFunctionAlias and getSymbolFromMetadata in emitFunctionEntryLabel.
1 parent 5865482 commit d5e57c3

File tree

1 file changed

+32
-39
lines changed

1 file changed

+32
-39
lines changed

llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,52 +1161,45 @@ void AArch64AsmPrinter::emitFunctionEntryLabel() {
11611161
TS->emitDirectiveVariantPCS(CurrentFnSym);
11621162
}
11631163

1164+
AsmPrinter::emitFunctionEntryLabel();
1165+
11641166
if (TM.getTargetTriple().isWindowsArm64EC() &&
11651167
!MF->getFunction().hasLocalLinkage()) {
11661168
// For ARM64EC targets, a function definition's name is mangled differently
1167-
// from the normal symbol. We emit the alias from the unmangled symbol to
1168-
// mangled symbol name here.
1169-
if (MDNode *Unmangled =
1170-
MF->getFunction().getMetadata("arm64ec_unmangled_name")) {
1171-
AsmPrinter::emitFunctionEntryLabel();
1172-
1173-
if (MDNode *ECMangled =
1174-
MF->getFunction().getMetadata("arm64ec_ecmangled_name")) {
1175-
StringRef UnmangledStr =
1176-
cast<MDString>(Unmangled->getOperand(0))->getString();
1177-
MCSymbol *UnmangledSym =
1178-
MMI->getContext().getOrCreateSymbol(UnmangledStr);
1179-
StringRef ECMangledStr =
1180-
cast<MDString>(ECMangled->getOperand(0))->getString();
1181-
MCSymbol *ECMangledSym =
1182-
MMI->getContext().getOrCreateSymbol(ECMangledStr);
1183-
OutStreamer->emitSymbolAttribute(UnmangledSym, MCSA_WeakAntiDep);
1184-
OutStreamer->emitAssignment(
1185-
UnmangledSym,
1186-
MCSymbolRefExpr::create(ECMangledSym, MCSymbolRefExpr::VK_WEAKREF,
1187-
MMI->getContext()));
1188-
OutStreamer->emitSymbolAttribute(ECMangledSym, MCSA_WeakAntiDep);
1189-
OutStreamer->emitAssignment(
1190-
ECMangledSym,
1191-
MCSymbolRefExpr::create(CurrentFnSym, MCSymbolRefExpr::VK_WEAKREF,
1192-
MMI->getContext()));
1193-
return;
1169+
// from the normal symbol, emit required aliases here.
1170+
auto emitFunctionAlias = [&](MCSymbol *Src, MCSymbol *Dst) {
1171+
OutStreamer->emitSymbolAttribute(Src, MCSA_WeakAntiDep);
1172+
OutStreamer->emitAssignment(
1173+
Src, MCSymbolRefExpr::create(Dst, MCSymbolRefExpr::VK_WEAKREF,
1174+
MMI->getContext()));
1175+
};
1176+
1177+
auto getSymbolFromMetadata = [&](StringRef Name) {
1178+
MCSymbol *Sym = nullptr;
1179+
if (MDNode *Node = MF->getFunction().getMetadata(Name)) {
1180+
StringRef NameStr = cast<MDString>(Node->getOperand(0))->getString();
1181+
Sym = MMI->getContext().getOrCreateSymbol(NameStr);
1182+
}
1183+
return Sym;
1184+
};
1185+
1186+
if (MCSymbol *UnmangledSym =
1187+
getSymbolFromMetadata("arm64ec_unmangled_name")) {
1188+
MCSymbol *ECMangledSym = getSymbolFromMetadata("arm64ec_ecmangled_name");
1189+
1190+
if (ECMangledSym) {
1191+
// An external function, emit the alias from the unmangled symbol to
1192+
// mangled symbol name and the alias from the mangled symbol to guest
1193+
// exit thunk.
1194+
emitFunctionAlias(UnmangledSym, ECMangledSym);
1195+
emitFunctionAlias(ECMangledSym, CurrentFnSym);
11941196
} else {
1195-
StringRef UnmangledStr =
1196-
cast<MDString>(Unmangled->getOperand(0))->getString();
1197-
MCSymbol *UnmangledSym =
1198-
MMI->getContext().getOrCreateSymbol(UnmangledStr);
1199-
OutStreamer->emitSymbolAttribute(UnmangledSym, MCSA_WeakAntiDep);
1200-
OutStreamer->emitAssignment(
1201-
UnmangledSym,
1202-
MCSymbolRefExpr::create(CurrentFnSym, MCSymbolRefExpr::VK_WEAKREF,
1203-
MMI->getContext()));
1204-
return;
1197+
// A function implementation, emit the alias from the unmangled symbol
1198+
// to mangled symbol name.
1199+
emitFunctionAlias(UnmangledSym, CurrentFnSym);
12051200
}
12061201
}
12071202
}
1208-
1209-
return AsmPrinter::emitFunctionEntryLabel();
12101203
}
12111204

12121205
/// Small jump tables contain an unsigned byte or half, representing the offset

0 commit comments

Comments
 (0)