Skip to content

Commit e522b56

Browse files
committed
Prepend all intrinsics with # when building for Arm64EC
1 parent 52ae02d commit e522b56

File tree

1 file changed

+15
-34
lines changed

1 file changed

+15
-34
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,40 +1716,21 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
17161716
setMaxAtomicSizeInBitsSupported(128);
17171717

17181718
if (Subtarget->isWindowsArm64EC()) {
1719-
// FIXME: are there other intrinsics we need to add here?
1720-
setLibcallName(RTLIB::MEMCPY, "#memcpy");
1721-
setLibcallName(RTLIB::MEMSET, "#memset");
1722-
setLibcallName(RTLIB::MEMMOVE, "#memmove");
1723-
setLibcallName(RTLIB::REM_F32, "#fmodf");
1724-
setLibcallName(RTLIB::REM_F64, "#fmod");
1725-
setLibcallName(RTLIB::FMA_F32, "#fmaf");
1726-
setLibcallName(RTLIB::FMA_F64, "#fma");
1727-
setLibcallName(RTLIB::SQRT_F32, "#sqrtf");
1728-
setLibcallName(RTLIB::SQRT_F64, "#sqrt");
1729-
setLibcallName(RTLIB::CBRT_F32, "#cbrtf");
1730-
setLibcallName(RTLIB::CBRT_F64, "#cbrt");
1731-
setLibcallName(RTLIB::LOG_F32, "#logf");
1732-
setLibcallName(RTLIB::LOG_F64, "#log");
1733-
setLibcallName(RTLIB::LOG2_F32, "#log2f");
1734-
setLibcallName(RTLIB::LOG2_F64, "#log2");
1735-
setLibcallName(RTLIB::LOG10_F32, "#log10f");
1736-
setLibcallName(RTLIB::LOG10_F64, "#log10");
1737-
setLibcallName(RTLIB::EXP_F32, "#expf");
1738-
setLibcallName(RTLIB::EXP_F64, "#exp");
1739-
setLibcallName(RTLIB::EXP2_F32, "#exp2f");
1740-
setLibcallName(RTLIB::EXP2_F64, "#exp2");
1741-
setLibcallName(RTLIB::EXP10_F32, "#exp10f");
1742-
setLibcallName(RTLIB::EXP10_F64, "#exp10");
1743-
setLibcallName(RTLIB::SIN_F32, "#sinf");
1744-
setLibcallName(RTLIB::SIN_F64, "#sin");
1745-
setLibcallName(RTLIB::COS_F32, "#cosf");
1746-
setLibcallName(RTLIB::COS_F64, "#cos");
1747-
setLibcallName(RTLIB::POW_F32, "#powf");
1748-
setLibcallName(RTLIB::POW_F64, "#pow");
1749-
setLibcallName(RTLIB::LDEXP_F32, "#ldexpf");
1750-
setLibcallName(RTLIB::LDEXP_F64, "#ldexp");
1751-
setLibcallName(RTLIB::FREXP_F32, "#frexpf");
1752-
setLibcallName(RTLIB::FREXP_F64, "#frexp");
1719+
// FIXME: are there intrinsics we need to exclude from this?
1720+
for (int i = 0; i < RTLIB::UNKNOWN_LIBCALL; ++i) {
1721+
auto code = static_cast<RTLIB::Libcall>(i);
1722+
auto libcallName = getLibcallName(code);
1723+
if ((libcallName != nullptr) && (libcallName[0] != '#')) {
1724+
// Note that this is a leak, but since nothing should be modifying the
1725+
// libcall names after this point these allocations should last until
1726+
// the end of the process.
1727+
auto len = strlen(libcallName);
1728+
auto newLibcallName = new char[len + 2];
1729+
newLibcallName[0] = '#';
1730+
memcpy(newLibcallName + 1, libcallName, len + 1);
1731+
setLibcallName(code, newLibcallName);
1732+
}
1733+
}
17531734
}
17541735
}
17551736

0 commit comments

Comments
 (0)