-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[NFC] RuntimeLibcalls: Prefix the impls with 'Impl_' #153850
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-backend-msp430 @llvm/pr-subscribers-llvm-ir Author: Daniel Paoliello (dpaoliello) ChangesAs noted in #153256, TableGen is generating reserved names for RuntimeLibcalls, which resulted in a build failure for Arm64EC since To avoid using reserved names, all impl names will now be prefixed with While I was churning the dependent code, I also paid back the TODO to move the impl enum into its own namespace and use an
I added a Patch is 45.96 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/153850.diff 12 Files Affected:
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index 308be543de2bd..43a91f88752e6 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -50,7 +50,8 @@ static inline auto libcalls() {
}
static inline auto libcall_impls() {
- return enum_seq(static_cast<RTLIB::LibcallImpl>(1), RTLIB::NumLibcallImpls);
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(1),
+ static_cast<RTLIB::LibcallImpl>(RTLIB::NumLibcallImpls));
}
/// A simple container for information about the supported runtime calls.
@@ -85,9 +86,10 @@ struct RuntimeLibcallsInfo {
static StringRef getLibcallImplName(RTLIB::LibcallImpl CallImpl) {
if (CallImpl == RTLIB::Unsupported)
return StringRef();
- return StringRef(RuntimeLibcallImplNameTable.getCString(
- RuntimeLibcallNameOffsetTable[CallImpl]),
- RuntimeLibcallNameSizeTable[CallImpl]);
+ return StringRef(
+ RuntimeLibcallImplNameTable.getCString(
+ RuntimeLibcallNameOffsetTable[static_cast<size_t>(CallImpl)]),
+ RuntimeLibcallNameSizeTable[static_cast<size_t>(CallImpl)]);
}
/// Return the lowering's selection of implementation call for \p Call
@@ -98,18 +100,18 @@ struct RuntimeLibcallsInfo {
/// Set the CallingConv that should be used for the specified libcall
/// implementation
void setLibcallImplCallingConv(RTLIB::LibcallImpl Call, CallingConv::ID CC) {
- LibcallImplCallingConvs[Call] = CC;
+ LibcallImplCallingConvs[static_cast<size_t>(Call)] = CC;
}
// FIXME: Remove this wrapper in favor of directly using
// getLibcallImplCallingConv
CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const {
- return LibcallImplCallingConvs[LibcallImpls[Call]];
+ return LibcallImplCallingConvs[static_cast<size_t>(LibcallImpls[Call])];
}
/// Get the CallingConv that should be used for the specified libcall.
CallingConv::ID getLibcallImplCallingConv(RTLIB::LibcallImpl Call) const {
- return LibcallImplCallingConvs[Call];
+ return LibcallImplCallingConvs[static_cast<size_t>(Call)];
}
ArrayRef<RTLIB::LibcallImpl> getLibcallImpls() const {
@@ -130,7 +132,7 @@ struct RuntimeLibcallsInfo {
/// Return the libcall provided by \p Impl
static RTLIB::Libcall getLibcallFromImpl(RTLIB::LibcallImpl Impl) {
- return ImplToLibcall[Impl];
+ return ImplToLibcall[static_cast<size_t>(Impl)];
}
/// Check if a function name is a recognized runtime call of any kind. This
@@ -156,7 +158,8 @@ struct RuntimeLibcallsInfo {
for (RTLIB::LibcallImpl Impl : lookupLibcallImplName(FuncName)) {
// FIXME: This should not depend on looking up ImplToLibcall, only the
// list of libcalls for the module.
- RTLIB::LibcallImpl Recognized = LibcallImpls[ImplToLibcall[Impl]];
+ RTLIB::LibcallImpl Recognized =
+ LibcallImpls[ImplToLibcall[static_cast<size_t>(Impl)]];
if (Recognized != RTLIB::Unsupported)
return Recognized;
}
diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
index 96c9cde622b45..b0e3c6b759427 100644
--- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -507,83 +507,94 @@ bool PreISelIntrinsicLowering::lowerIntrinsics(Module &M) const {
});
break;
case Intrinsic::objc_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_autorelease);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autorelease);
break;
case Intrinsic::objc_autoreleasePoolPop:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPop);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPop);
break;
case Intrinsic::objc_autoreleasePoolPush:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPush);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPush);
break;
case Intrinsic::objc_autoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_autoreleaseReturnValue);
break;
case Intrinsic::objc_copyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_copyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_copyWeak);
break;
case Intrinsic::objc_destroyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_destroyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_destroyWeak);
break;
case Intrinsic::objc_initWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_initWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_initWeak);
break;
case Intrinsic::objc_loadWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeak);
break;
case Intrinsic::objc_loadWeakRetained:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeakRetained);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeakRetained);
break;
case Intrinsic::objc_moveWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_moveWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_moveWeak);
break;
case Intrinsic::objc_release:
- Changed |= lowerObjCCall(F, RTLIB::objc_release, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_release, true);
break;
case Intrinsic::objc_retain:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain, true);
break;
case Intrinsic::objc_retainAutorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainAutorelease);
break;
case Intrinsic::objc_retainAutoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleaseReturnValue);
break;
case Intrinsic::objc_retainAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleasedReturnValue);
break;
case Intrinsic::objc_claimAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_claimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_claimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainBlock:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainBlock);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainBlock);
break;
case Intrinsic::objc_storeStrong:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeStrong);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeStrong);
break;
case Intrinsic::objc_storeWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeWeak);
break;
case Intrinsic::objc_unsafeClaimAutoreleasedReturnValue:
- Changed |=
- lowerObjCCall(F, RTLIB::objc_unsafeClaimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_unsafeClaimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainedObject);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainedObject);
break;
case Intrinsic::objc_unretainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedObject);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedObject);
break;
case Intrinsic::objc_unretainedPointer:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedPointer);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedPointer);
break;
case Intrinsic::objc_retain_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain_autorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain_autorelease);
break;
case Intrinsic::objc_sync_enter:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_enter);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_enter);
break;
case Intrinsic::objc_sync_exit:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_exit);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_exit);
break;
case Intrinsic::exp:
case Intrinsic::exp2:
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 350948a92a3ae..bd7994a2e669a 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -612,23 +612,23 @@ RTLIB::Libcall RTLIB::getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize) {
ISD::CondCode TargetLoweringBase::getSoftFloatCmpLibcallPredicate(
RTLIB::LibcallImpl Impl) const {
switch (Impl) {
- case RTLIB::__aeabi_dcmpeq__une:
- case RTLIB::__aeabi_fcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__une:
// Usage in the eq case, so we have to invert the comparison.
return ISD::SETEQ;
- case RTLIB::__aeabi_dcmpeq__oeq:
- case RTLIB::__aeabi_fcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__oeq:
// Normal comparison to boolean value.
return ISD::SETNE;
- case RTLIB::__aeabi_dcmplt:
- case RTLIB::__aeabi_dcmple:
- case RTLIB::__aeabi_dcmpge:
- case RTLIB::__aeabi_dcmpgt:
- case RTLIB::__aeabi_dcmpun:
- case RTLIB::__aeabi_fcmplt:
- case RTLIB::__aeabi_fcmple:
- case RTLIB::__aeabi_fcmpge:
- case RTLIB::__aeabi_fcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpun:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpgt:
/// The AEABI versions return a typical boolean value, so we can compare
/// against the integer result as simply != 0.
return ISD::SETNE;
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 88cb192c08781..09f6b053eb942 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -34,7 +34,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
setTargetRuntimeLibcallSets(TT, FloatABI, EABIVersion, ABIName);
if (ExceptionModel == ExceptionHandling::SjLj)
- setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
+ setLibcallImpl(RTLIB::UNWIND_RESUME,
+ RTLIB::LibcallImpl::Impl__Unwind_SjLj_Resume);
if (TT.isARM() || TT.isThumb()) {
// The half <-> float conversion functions are always soft-float on
@@ -42,13 +43,19 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
// hard-float calling convention by default.
if (!TT.isWatchABI()) {
if (isAAPCS_ABI(TT, ABIName)) {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_AAPCS);
} else {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_APCS);
}
}
@@ -56,7 +63,7 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
}
if (TT.getArch() == Triple::ArchType::msp430) {
- setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___mspabi_mpyll,
CallingConv::MSP430_BUILTIN);
}
}
@@ -73,10 +80,9 @@ RuntimeLibcallsInfo::libcallImplNameHit(uint16_t NameOffsetEntry,
++NumAliases;
}
- RTLIB::LibcallImpl ImplStart = static_cast<RTLIB::LibcallImpl>(
- &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
- &RuntimeLibcallNameOffsetTable[0]);
- return enum_seq(ImplStart,
+ size_t ImplStart = &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
+ &RuntimeLibcallNameOffsetTable[0];
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(ImplStart),
static_cast<RTLIB::LibcallImpl>(ImplStart + NumAliases));
}
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index 830156359e9e8..3a90e8ddf8f65 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -529,56 +529,56 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Single-precision floating-point arithmetic.
- { RTLIB::ADD_F32, RTLIB::__addsf3vfp },
- { RTLIB::SUB_F32, RTLIB::__subsf3vfp },
- { RTLIB::MUL_F32, RTLIB::__mulsf3vfp },
- { RTLIB::DIV_F32, RTLIB::__divsf3vfp },
+ { RTLIB::ADD_F32, RTLIB::LibcallImpl::Impl___addsf3vfp },
+ { RTLIB::SUB_F32, RTLIB::LibcallImpl::Impl___subsf3vfp },
+ { RTLIB::MUL_F32, RTLIB::LibcallImpl::Impl___mulsf3vfp },
+ { RTLIB::DIV_F32, RTLIB::LibcallImpl::Impl___divsf3vfp },
// Double-precision floating-point arithmetic.
- { RTLIB::ADD_F64, RTLIB::__adddf3vfp },
- { RTLIB::SUB_F64, RTLIB::__subdf3vfp },
- { RTLIB::MUL_F64, RTLIB::__muldf3vfp },
- { RTLIB::DIV_F64, RTLIB::__divdf3vfp },
+ { RTLIB::ADD_F64, RTLIB::LibcallImpl::Impl___adddf3vfp },
+ { RTLIB::SUB_F64, RTLIB::LibcallImpl::Impl___subdf3vfp },
+ { RTLIB::MUL_F64, RTLIB::LibcallImpl::Impl___muldf3vfp },
+ { RTLIB::DIV_F64, RTLIB::LibcallImpl::Impl___divdf3vfp },
// Single-precision comparisons.
- { RTLIB::OEQ_F32, RTLIB::__eqsf2vfp },
- { RTLIB::UNE_F32, RTLIB::__nesf2vfp },
- { RTLIB::OLT_F32, RTLIB::__ltsf2vfp },
- { RTLIB::OLE_F32, RTLIB::__lesf2vfp },
- { RTLIB::OGE_F32, RTLIB::__gesf2vfp },
- { RTLIB::OGT_F32, RTLIB::__gtsf2vfp },
- { RTLIB::UO_F32, RTLIB::__unordsf2vfp },
+ { RTLIB::OEQ_F32, RTLIB::LibcallImpl::Impl___eqsf2vfp },
+ { RTLIB::UNE_F32, RTLIB::LibcallImpl::Impl___nesf2vfp },
+ { RTLIB::OLT_F32, RTLIB::LibcallImpl::Impl___ltsf2vfp },
+ { RTLIB::OLE_F32, RTLIB::LibcallImpl::Impl___lesf2vfp },
+ { RTLIB::OGE_F32, RTLIB::LibcallImpl::Impl___gesf2vfp },
+ { RTLIB::OGT_F32, RTLIB::LibcallImpl::Impl___gtsf2vfp },
+ { RTLIB::UO_F32, RTLIB::LibcallImpl::Impl___unordsf2vfp },
// Double-precision comparisons.
- { RTLIB::OEQ_F64, RTLIB::__eqdf2vfp },
- { RTLIB::UNE_F64, RTLIB::__nedf2vfp },
- { RTLIB::OLT_F64, RTLIB::__ltdf2vfp },
- { RTLIB::OLE_F64, RTLIB::__ledf2vfp },
- { RTLIB::OGE_F64, RTLIB::__gedf2vfp },
- { RTLIB::OGT_F64, RTLIB::__gtdf2vfp },
- { RTLIB::UO_F64, RTLIB::__unorddf2vfp },
+ { RTLIB::OEQ_F64, RTLIB::LibcallImpl::Impl___eqdf2vfp },
+ { RTLIB::UNE_F64, RTLIB::LibcallImpl::Impl___nedf2vfp },
+ { RTLIB::OLT_F64, RTLIB::LibcallImpl::Impl___ltdf2vfp },
+ { RTLIB::OLE_F64, RTLIB::LibcallImpl::Impl___ledf2vfp },
+ { RTLIB::OGE_F64, RTLIB::LibcallImpl::Impl___gedf2vfp },
+ { RTLIB::OGT_F64, RTLIB::LibcallImpl::Impl___gtdf2vfp },
+ { RTLIB::UO_F64, RTLIB::LibcallImpl::Impl___unorddf2vfp },
// Floating-point to integer conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
- { RTLIB::FPTOSINT_F64_I32, RTLIB::__fixdfsivfp },
- { RTLIB::FPTOUINT_F64_I32, RTLIB::__fixunsdfsivfp },
- { RTLIB::FPTOSINT_F32_I32, RTLIB::__fixsfsivfp },
- { RTLIB::FPTOUINT_F32_I32, RTLIB::__fixunssfsivfp },
+ { RTLIB::FPTOSINT_F64_I32, RTLIB::LibcallImpl::Impl___fixdfsivfp },
+ { RTLIB::FPTOUINT_F64_I32, RTLIB::LibcallImpl::Impl___fixunsdfsivfp },
+ { RTLIB::FPTOSINT_F32_I32, RTLIB::LibcallImpl::Impl___fixsfsivfp },
+ { RTLIB::FPTOUINT_F32_I32, RTLIB::LibcallImpl::Impl___fixunssfsivfp },
// Conversions between floating types.
- { RTLIB::FPROUND_F64_F32, RTLIB::__truncdfsf2vfp },
- { RTLIB::FPEXT_F32_F64, RTLIB::__extendsfdf2vfp },
+ { RTLIB::FPROUND_F64_F32, RTLIB::LibcallImpl::Impl___truncdfsf2vfp },
+ { RTLIB::FPEXT_F32_F64, RTLIB::LibcallImpl::Impl___extendsfdf2vfp },
// Integer to floating-point conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
// FIXME: There appears to be some naming inconsistency in ARM libgcc:
// e.g., __floatunsidf vs. __floatunssidfvfp.
- { RTLIB::SINTTOFP_I32_F64, RTLIB::__floatsidfvfp },
- { RTLIB::UINTTOFP_I32_F64, RTLIB::__floatunssidfvfp },
- { RTLIB::SINTTOFP_I32_F32, RTLIB::__floatsisfvfp },
- { RTLIB::UINTTOFP_I32_F32, RTLIB::__floatunssisfvfp },
+ { RTLIB::SINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatsidfvfp },
+ { RTLIB::UINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatunssidfvfp },
+ { RTLIB::SINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatsisfvfp },
+ { RTLIB::UINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatunssisfvfp },
};
// clang-format on
diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
index 6da5e66be4ad8..cae82635610ed 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
@@ -154,9 +154,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw},
+ {RTLIB::MUL_I16, RTLIB::LibcallImpl::Impl___mspabi_mpyi_hw},
+ {RTLIB::MUL_I32, RTLIB::LibcallImpl::Impl___mspabi_mpyl_hw},
+ {RTLIB::MUL_I64, RTLIB::LibcallImpl::Impl___mspabi_mpyll_hw},
// TODO The __mspabi_mpysl*_hw functions ARE implemented in libgcc
// TODO The __mspabi_mpyul*_hw functions ARE implemented in libgcc
};
@@ -169,9 +169,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw32},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw32},
+ {RTLIB::MUL_I16, RTLIB::LibcallI...
[truncated]
|
|
@llvm/pr-subscribers-tablegen Author: Daniel Paoliello (dpaoliello) ChangesAs noted in #153256, TableGen is generating reserved names for RuntimeLibcalls, which resulted in a build failure for Arm64EC since To avoid using reserved names, all impl names will now be prefixed with While I was churning the dependent code, I also paid back the TODO to move the impl enum into its own namespace and use an
I added a Patch is 45.96 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/153850.diff 12 Files Affected:
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index 308be543de2bd..43a91f88752e6 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -50,7 +50,8 @@ static inline auto libcalls() {
}
static inline auto libcall_impls() {
- return enum_seq(static_cast<RTLIB::LibcallImpl>(1), RTLIB::NumLibcallImpls);
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(1),
+ static_cast<RTLIB::LibcallImpl>(RTLIB::NumLibcallImpls));
}
/// A simple container for information about the supported runtime calls.
@@ -85,9 +86,10 @@ struct RuntimeLibcallsInfo {
static StringRef getLibcallImplName(RTLIB::LibcallImpl CallImpl) {
if (CallImpl == RTLIB::Unsupported)
return StringRef();
- return StringRef(RuntimeLibcallImplNameTable.getCString(
- RuntimeLibcallNameOffsetTable[CallImpl]),
- RuntimeLibcallNameSizeTable[CallImpl]);
+ return StringRef(
+ RuntimeLibcallImplNameTable.getCString(
+ RuntimeLibcallNameOffsetTable[static_cast<size_t>(CallImpl)]),
+ RuntimeLibcallNameSizeTable[static_cast<size_t>(CallImpl)]);
}
/// Return the lowering's selection of implementation call for \p Call
@@ -98,18 +100,18 @@ struct RuntimeLibcallsInfo {
/// Set the CallingConv that should be used for the specified libcall
/// implementation
void setLibcallImplCallingConv(RTLIB::LibcallImpl Call, CallingConv::ID CC) {
- LibcallImplCallingConvs[Call] = CC;
+ LibcallImplCallingConvs[static_cast<size_t>(Call)] = CC;
}
// FIXME: Remove this wrapper in favor of directly using
// getLibcallImplCallingConv
CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const {
- return LibcallImplCallingConvs[LibcallImpls[Call]];
+ return LibcallImplCallingConvs[static_cast<size_t>(LibcallImpls[Call])];
}
/// Get the CallingConv that should be used for the specified libcall.
CallingConv::ID getLibcallImplCallingConv(RTLIB::LibcallImpl Call) const {
- return LibcallImplCallingConvs[Call];
+ return LibcallImplCallingConvs[static_cast<size_t>(Call)];
}
ArrayRef<RTLIB::LibcallImpl> getLibcallImpls() const {
@@ -130,7 +132,7 @@ struct RuntimeLibcallsInfo {
/// Return the libcall provided by \p Impl
static RTLIB::Libcall getLibcallFromImpl(RTLIB::LibcallImpl Impl) {
- return ImplToLibcall[Impl];
+ return ImplToLibcall[static_cast<size_t>(Impl)];
}
/// Check if a function name is a recognized runtime call of any kind. This
@@ -156,7 +158,8 @@ struct RuntimeLibcallsInfo {
for (RTLIB::LibcallImpl Impl : lookupLibcallImplName(FuncName)) {
// FIXME: This should not depend on looking up ImplToLibcall, only the
// list of libcalls for the module.
- RTLIB::LibcallImpl Recognized = LibcallImpls[ImplToLibcall[Impl]];
+ RTLIB::LibcallImpl Recognized =
+ LibcallImpls[ImplToLibcall[static_cast<size_t>(Impl)]];
if (Recognized != RTLIB::Unsupported)
return Recognized;
}
diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
index 96c9cde622b45..b0e3c6b759427 100644
--- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -507,83 +507,94 @@ bool PreISelIntrinsicLowering::lowerIntrinsics(Module &M) const {
});
break;
case Intrinsic::objc_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_autorelease);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autorelease);
break;
case Intrinsic::objc_autoreleasePoolPop:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPop);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPop);
break;
case Intrinsic::objc_autoreleasePoolPush:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPush);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPush);
break;
case Intrinsic::objc_autoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_autoreleaseReturnValue);
break;
case Intrinsic::objc_copyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_copyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_copyWeak);
break;
case Intrinsic::objc_destroyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_destroyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_destroyWeak);
break;
case Intrinsic::objc_initWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_initWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_initWeak);
break;
case Intrinsic::objc_loadWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeak);
break;
case Intrinsic::objc_loadWeakRetained:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeakRetained);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeakRetained);
break;
case Intrinsic::objc_moveWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_moveWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_moveWeak);
break;
case Intrinsic::objc_release:
- Changed |= lowerObjCCall(F, RTLIB::objc_release, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_release, true);
break;
case Intrinsic::objc_retain:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain, true);
break;
case Intrinsic::objc_retainAutorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainAutorelease);
break;
case Intrinsic::objc_retainAutoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleaseReturnValue);
break;
case Intrinsic::objc_retainAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleasedReturnValue);
break;
case Intrinsic::objc_claimAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_claimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_claimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainBlock:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainBlock);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainBlock);
break;
case Intrinsic::objc_storeStrong:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeStrong);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeStrong);
break;
case Intrinsic::objc_storeWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeWeak);
break;
case Intrinsic::objc_unsafeClaimAutoreleasedReturnValue:
- Changed |=
- lowerObjCCall(F, RTLIB::objc_unsafeClaimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_unsafeClaimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainedObject);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainedObject);
break;
case Intrinsic::objc_unretainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedObject);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedObject);
break;
case Intrinsic::objc_unretainedPointer:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedPointer);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedPointer);
break;
case Intrinsic::objc_retain_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain_autorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain_autorelease);
break;
case Intrinsic::objc_sync_enter:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_enter);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_enter);
break;
case Intrinsic::objc_sync_exit:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_exit);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_exit);
break;
case Intrinsic::exp:
case Intrinsic::exp2:
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 350948a92a3ae..bd7994a2e669a 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -612,23 +612,23 @@ RTLIB::Libcall RTLIB::getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize) {
ISD::CondCode TargetLoweringBase::getSoftFloatCmpLibcallPredicate(
RTLIB::LibcallImpl Impl) const {
switch (Impl) {
- case RTLIB::__aeabi_dcmpeq__une:
- case RTLIB::__aeabi_fcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__une:
// Usage in the eq case, so we have to invert the comparison.
return ISD::SETEQ;
- case RTLIB::__aeabi_dcmpeq__oeq:
- case RTLIB::__aeabi_fcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__oeq:
// Normal comparison to boolean value.
return ISD::SETNE;
- case RTLIB::__aeabi_dcmplt:
- case RTLIB::__aeabi_dcmple:
- case RTLIB::__aeabi_dcmpge:
- case RTLIB::__aeabi_dcmpgt:
- case RTLIB::__aeabi_dcmpun:
- case RTLIB::__aeabi_fcmplt:
- case RTLIB::__aeabi_fcmple:
- case RTLIB::__aeabi_fcmpge:
- case RTLIB::__aeabi_fcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpun:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpgt:
/// The AEABI versions return a typical boolean value, so we can compare
/// against the integer result as simply != 0.
return ISD::SETNE;
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 88cb192c08781..09f6b053eb942 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -34,7 +34,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
setTargetRuntimeLibcallSets(TT, FloatABI, EABIVersion, ABIName);
if (ExceptionModel == ExceptionHandling::SjLj)
- setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
+ setLibcallImpl(RTLIB::UNWIND_RESUME,
+ RTLIB::LibcallImpl::Impl__Unwind_SjLj_Resume);
if (TT.isARM() || TT.isThumb()) {
// The half <-> float conversion functions are always soft-float on
@@ -42,13 +43,19 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
// hard-float calling convention by default.
if (!TT.isWatchABI()) {
if (isAAPCS_ABI(TT, ABIName)) {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_AAPCS);
} else {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_APCS);
}
}
@@ -56,7 +63,7 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
}
if (TT.getArch() == Triple::ArchType::msp430) {
- setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___mspabi_mpyll,
CallingConv::MSP430_BUILTIN);
}
}
@@ -73,10 +80,9 @@ RuntimeLibcallsInfo::libcallImplNameHit(uint16_t NameOffsetEntry,
++NumAliases;
}
- RTLIB::LibcallImpl ImplStart = static_cast<RTLIB::LibcallImpl>(
- &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
- &RuntimeLibcallNameOffsetTable[0]);
- return enum_seq(ImplStart,
+ size_t ImplStart = &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
+ &RuntimeLibcallNameOffsetTable[0];
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(ImplStart),
static_cast<RTLIB::LibcallImpl>(ImplStart + NumAliases));
}
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index 830156359e9e8..3a90e8ddf8f65 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -529,56 +529,56 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Single-precision floating-point arithmetic.
- { RTLIB::ADD_F32, RTLIB::__addsf3vfp },
- { RTLIB::SUB_F32, RTLIB::__subsf3vfp },
- { RTLIB::MUL_F32, RTLIB::__mulsf3vfp },
- { RTLIB::DIV_F32, RTLIB::__divsf3vfp },
+ { RTLIB::ADD_F32, RTLIB::LibcallImpl::Impl___addsf3vfp },
+ { RTLIB::SUB_F32, RTLIB::LibcallImpl::Impl___subsf3vfp },
+ { RTLIB::MUL_F32, RTLIB::LibcallImpl::Impl___mulsf3vfp },
+ { RTLIB::DIV_F32, RTLIB::LibcallImpl::Impl___divsf3vfp },
// Double-precision floating-point arithmetic.
- { RTLIB::ADD_F64, RTLIB::__adddf3vfp },
- { RTLIB::SUB_F64, RTLIB::__subdf3vfp },
- { RTLIB::MUL_F64, RTLIB::__muldf3vfp },
- { RTLIB::DIV_F64, RTLIB::__divdf3vfp },
+ { RTLIB::ADD_F64, RTLIB::LibcallImpl::Impl___adddf3vfp },
+ { RTLIB::SUB_F64, RTLIB::LibcallImpl::Impl___subdf3vfp },
+ { RTLIB::MUL_F64, RTLIB::LibcallImpl::Impl___muldf3vfp },
+ { RTLIB::DIV_F64, RTLIB::LibcallImpl::Impl___divdf3vfp },
// Single-precision comparisons.
- { RTLIB::OEQ_F32, RTLIB::__eqsf2vfp },
- { RTLIB::UNE_F32, RTLIB::__nesf2vfp },
- { RTLIB::OLT_F32, RTLIB::__ltsf2vfp },
- { RTLIB::OLE_F32, RTLIB::__lesf2vfp },
- { RTLIB::OGE_F32, RTLIB::__gesf2vfp },
- { RTLIB::OGT_F32, RTLIB::__gtsf2vfp },
- { RTLIB::UO_F32, RTLIB::__unordsf2vfp },
+ { RTLIB::OEQ_F32, RTLIB::LibcallImpl::Impl___eqsf2vfp },
+ { RTLIB::UNE_F32, RTLIB::LibcallImpl::Impl___nesf2vfp },
+ { RTLIB::OLT_F32, RTLIB::LibcallImpl::Impl___ltsf2vfp },
+ { RTLIB::OLE_F32, RTLIB::LibcallImpl::Impl___lesf2vfp },
+ { RTLIB::OGE_F32, RTLIB::LibcallImpl::Impl___gesf2vfp },
+ { RTLIB::OGT_F32, RTLIB::LibcallImpl::Impl___gtsf2vfp },
+ { RTLIB::UO_F32, RTLIB::LibcallImpl::Impl___unordsf2vfp },
// Double-precision comparisons.
- { RTLIB::OEQ_F64, RTLIB::__eqdf2vfp },
- { RTLIB::UNE_F64, RTLIB::__nedf2vfp },
- { RTLIB::OLT_F64, RTLIB::__ltdf2vfp },
- { RTLIB::OLE_F64, RTLIB::__ledf2vfp },
- { RTLIB::OGE_F64, RTLIB::__gedf2vfp },
- { RTLIB::OGT_F64, RTLIB::__gtdf2vfp },
- { RTLIB::UO_F64, RTLIB::__unorddf2vfp },
+ { RTLIB::OEQ_F64, RTLIB::LibcallImpl::Impl___eqdf2vfp },
+ { RTLIB::UNE_F64, RTLIB::LibcallImpl::Impl___nedf2vfp },
+ { RTLIB::OLT_F64, RTLIB::LibcallImpl::Impl___ltdf2vfp },
+ { RTLIB::OLE_F64, RTLIB::LibcallImpl::Impl___ledf2vfp },
+ { RTLIB::OGE_F64, RTLIB::LibcallImpl::Impl___gedf2vfp },
+ { RTLIB::OGT_F64, RTLIB::LibcallImpl::Impl___gtdf2vfp },
+ { RTLIB::UO_F64, RTLIB::LibcallImpl::Impl___unorddf2vfp },
// Floating-point to integer conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
- { RTLIB::FPTOSINT_F64_I32, RTLIB::__fixdfsivfp },
- { RTLIB::FPTOUINT_F64_I32, RTLIB::__fixunsdfsivfp },
- { RTLIB::FPTOSINT_F32_I32, RTLIB::__fixsfsivfp },
- { RTLIB::FPTOUINT_F32_I32, RTLIB::__fixunssfsivfp },
+ { RTLIB::FPTOSINT_F64_I32, RTLIB::LibcallImpl::Impl___fixdfsivfp },
+ { RTLIB::FPTOUINT_F64_I32, RTLIB::LibcallImpl::Impl___fixunsdfsivfp },
+ { RTLIB::FPTOSINT_F32_I32, RTLIB::LibcallImpl::Impl___fixsfsivfp },
+ { RTLIB::FPTOUINT_F32_I32, RTLIB::LibcallImpl::Impl___fixunssfsivfp },
// Conversions between floating types.
- { RTLIB::FPROUND_F64_F32, RTLIB::__truncdfsf2vfp },
- { RTLIB::FPEXT_F32_F64, RTLIB::__extendsfdf2vfp },
+ { RTLIB::FPROUND_F64_F32, RTLIB::LibcallImpl::Impl___truncdfsf2vfp },
+ { RTLIB::FPEXT_F32_F64, RTLIB::LibcallImpl::Impl___extendsfdf2vfp },
// Integer to floating-point conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
// FIXME: There appears to be some naming inconsistency in ARM libgcc:
// e.g., __floatunsidf vs. __floatunssidfvfp.
- { RTLIB::SINTTOFP_I32_F64, RTLIB::__floatsidfvfp },
- { RTLIB::UINTTOFP_I32_F64, RTLIB::__floatunssidfvfp },
- { RTLIB::SINTTOFP_I32_F32, RTLIB::__floatsisfvfp },
- { RTLIB::UINTTOFP_I32_F32, RTLIB::__floatunssisfvfp },
+ { RTLIB::SINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatsidfvfp },
+ { RTLIB::UINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatunssidfvfp },
+ { RTLIB::SINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatsisfvfp },
+ { RTLIB::UINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatunssisfvfp },
};
// clang-format on
diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
index 6da5e66be4ad8..cae82635610ed 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
@@ -154,9 +154,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw},
+ {RTLIB::MUL_I16, RTLIB::LibcallImpl::Impl___mspabi_mpyi_hw},
+ {RTLIB::MUL_I32, RTLIB::LibcallImpl::Impl___mspabi_mpyl_hw},
+ {RTLIB::MUL_I64, RTLIB::LibcallImpl::Impl___mspabi_mpyll_hw},
// TODO The __mspabi_mpysl*_hw functions ARE implemented in libgcc
// TODO The __mspabi_mpyul*_hw functions ARE implemented in libgcc
};
@@ -169,9 +169,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw32},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw32},
+ {RTLIB::MUL_I16, RTLIB::LibcallI...
[truncated]
|
|
@llvm/pr-subscribers-backend-arm Author: Daniel Paoliello (dpaoliello) ChangesAs noted in #153256, TableGen is generating reserved names for RuntimeLibcalls, which resulted in a build failure for Arm64EC since To avoid using reserved names, all impl names will now be prefixed with While I was churning the dependent code, I also paid back the TODO to move the impl enum into its own namespace and use an
I added a Patch is 45.96 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/153850.diff 12 Files Affected:
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index 308be543de2bd..43a91f88752e6 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -50,7 +50,8 @@ static inline auto libcalls() {
}
static inline auto libcall_impls() {
- return enum_seq(static_cast<RTLIB::LibcallImpl>(1), RTLIB::NumLibcallImpls);
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(1),
+ static_cast<RTLIB::LibcallImpl>(RTLIB::NumLibcallImpls));
}
/// A simple container for information about the supported runtime calls.
@@ -85,9 +86,10 @@ struct RuntimeLibcallsInfo {
static StringRef getLibcallImplName(RTLIB::LibcallImpl CallImpl) {
if (CallImpl == RTLIB::Unsupported)
return StringRef();
- return StringRef(RuntimeLibcallImplNameTable.getCString(
- RuntimeLibcallNameOffsetTable[CallImpl]),
- RuntimeLibcallNameSizeTable[CallImpl]);
+ return StringRef(
+ RuntimeLibcallImplNameTable.getCString(
+ RuntimeLibcallNameOffsetTable[static_cast<size_t>(CallImpl)]),
+ RuntimeLibcallNameSizeTable[static_cast<size_t>(CallImpl)]);
}
/// Return the lowering's selection of implementation call for \p Call
@@ -98,18 +100,18 @@ struct RuntimeLibcallsInfo {
/// Set the CallingConv that should be used for the specified libcall
/// implementation
void setLibcallImplCallingConv(RTLIB::LibcallImpl Call, CallingConv::ID CC) {
- LibcallImplCallingConvs[Call] = CC;
+ LibcallImplCallingConvs[static_cast<size_t>(Call)] = CC;
}
// FIXME: Remove this wrapper in favor of directly using
// getLibcallImplCallingConv
CallingConv::ID getLibcallCallingConv(RTLIB::Libcall Call) const {
- return LibcallImplCallingConvs[LibcallImpls[Call]];
+ return LibcallImplCallingConvs[static_cast<size_t>(LibcallImpls[Call])];
}
/// Get the CallingConv that should be used for the specified libcall.
CallingConv::ID getLibcallImplCallingConv(RTLIB::LibcallImpl Call) const {
- return LibcallImplCallingConvs[Call];
+ return LibcallImplCallingConvs[static_cast<size_t>(Call)];
}
ArrayRef<RTLIB::LibcallImpl> getLibcallImpls() const {
@@ -130,7 +132,7 @@ struct RuntimeLibcallsInfo {
/// Return the libcall provided by \p Impl
static RTLIB::Libcall getLibcallFromImpl(RTLIB::LibcallImpl Impl) {
- return ImplToLibcall[Impl];
+ return ImplToLibcall[static_cast<size_t>(Impl)];
}
/// Check if a function name is a recognized runtime call of any kind. This
@@ -156,7 +158,8 @@ struct RuntimeLibcallsInfo {
for (RTLIB::LibcallImpl Impl : lookupLibcallImplName(FuncName)) {
// FIXME: This should not depend on looking up ImplToLibcall, only the
// list of libcalls for the module.
- RTLIB::LibcallImpl Recognized = LibcallImpls[ImplToLibcall[Impl]];
+ RTLIB::LibcallImpl Recognized =
+ LibcallImpls[ImplToLibcall[static_cast<size_t>(Impl)]];
if (Recognized != RTLIB::Unsupported)
return Recognized;
}
diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
index 96c9cde622b45..b0e3c6b759427 100644
--- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -507,83 +507,94 @@ bool PreISelIntrinsicLowering::lowerIntrinsics(Module &M) const {
});
break;
case Intrinsic::objc_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_autorelease);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autorelease);
break;
case Intrinsic::objc_autoreleasePoolPop:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPop);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPop);
break;
case Intrinsic::objc_autoreleasePoolPush:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleasePoolPush);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_autoreleasePoolPush);
break;
case Intrinsic::objc_autoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_autoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_autoreleaseReturnValue);
break;
case Intrinsic::objc_copyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_copyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_copyWeak);
break;
case Intrinsic::objc_destroyWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_destroyWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_destroyWeak);
break;
case Intrinsic::objc_initWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_initWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_initWeak);
break;
case Intrinsic::objc_loadWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeak);
break;
case Intrinsic::objc_loadWeakRetained:
- Changed |= lowerObjCCall(F, RTLIB::objc_loadWeakRetained);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_loadWeakRetained);
break;
case Intrinsic::objc_moveWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_moveWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_moveWeak);
break;
case Intrinsic::objc_release:
- Changed |= lowerObjCCall(F, RTLIB::objc_release, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_release, true);
break;
case Intrinsic::objc_retain:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain, true);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain, true);
break;
case Intrinsic::objc_retainAutorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainAutorelease);
break;
case Intrinsic::objc_retainAutoreleaseReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleaseReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleaseReturnValue);
break;
case Intrinsic::objc_retainAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_retainAutoreleasedReturnValue);
break;
case Intrinsic::objc_claimAutoreleasedReturnValue:
- Changed |= lowerObjCCall(F, RTLIB::objc_claimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_claimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainBlock:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainBlock);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainBlock);
break;
case Intrinsic::objc_storeStrong:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeStrong);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeStrong);
break;
case Intrinsic::objc_storeWeak:
- Changed |= lowerObjCCall(F, RTLIB::objc_storeWeak);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_storeWeak);
break;
case Intrinsic::objc_unsafeClaimAutoreleasedReturnValue:
- Changed |=
- lowerObjCCall(F, RTLIB::objc_unsafeClaimAutoreleasedReturnValue);
+ Changed |= lowerObjCCall(
+ F, RTLIB::LibcallImpl::Impl_objc_unsafeClaimAutoreleasedReturnValue);
break;
case Intrinsic::objc_retainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_retainedObject);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retainedObject);
break;
case Intrinsic::objc_unretainedObject:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedObject);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedObject);
break;
case Intrinsic::objc_unretainedPointer:
- Changed |= lowerObjCCall(F, RTLIB::objc_unretainedPointer);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_unretainedPointer);
break;
case Intrinsic::objc_retain_autorelease:
- Changed |= lowerObjCCall(F, RTLIB::objc_retain_autorelease);
+ Changed |=
+ lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_retain_autorelease);
break;
case Intrinsic::objc_sync_enter:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_enter);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_enter);
break;
case Intrinsic::objc_sync_exit:
- Changed |= lowerObjCCall(F, RTLIB::objc_sync_exit);
+ Changed |= lowerObjCCall(F, RTLIB::LibcallImpl::Impl_objc_sync_exit);
break;
case Intrinsic::exp:
case Intrinsic::exp2:
diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 350948a92a3ae..bd7994a2e669a 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -612,23 +612,23 @@ RTLIB::Libcall RTLIB::getMEMSET_ELEMENT_UNORDERED_ATOMIC(uint64_t ElementSize) {
ISD::CondCode TargetLoweringBase::getSoftFloatCmpLibcallPredicate(
RTLIB::LibcallImpl Impl) const {
switch (Impl) {
- case RTLIB::__aeabi_dcmpeq__une:
- case RTLIB::__aeabi_fcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__une:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__une:
// Usage in the eq case, so we have to invert the comparison.
return ISD::SETEQ;
- case RTLIB::__aeabi_dcmpeq__oeq:
- case RTLIB::__aeabi_fcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpeq__oeq:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpeq__oeq:
// Normal comparison to boolean value.
return ISD::SETNE;
- case RTLIB::__aeabi_dcmplt:
- case RTLIB::__aeabi_dcmple:
- case RTLIB::__aeabi_dcmpge:
- case RTLIB::__aeabi_dcmpgt:
- case RTLIB::__aeabi_dcmpun:
- case RTLIB::__aeabi_fcmplt:
- case RTLIB::__aeabi_fcmple:
- case RTLIB::__aeabi_fcmpge:
- case RTLIB::__aeabi_fcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpgt:
+ case RTLIB::LibcallImpl::Impl___aeabi_dcmpun:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmplt:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmple:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpge:
+ case RTLIB::LibcallImpl::Impl___aeabi_fcmpgt:
/// The AEABI versions return a typical boolean value, so we can compare
/// against the integer result as simply != 0.
return ISD::SETNE;
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 88cb192c08781..09f6b053eb942 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -34,7 +34,8 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
setTargetRuntimeLibcallSets(TT, FloatABI, EABIVersion, ABIName);
if (ExceptionModel == ExceptionHandling::SjLj)
- setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
+ setLibcallImpl(RTLIB::UNWIND_RESUME,
+ RTLIB::LibcallImpl::Impl__Unwind_SjLj_Resume);
if (TT.isARM() || TT.isThumb()) {
// The half <-> float conversion functions are always soft-float on
@@ -42,13 +43,19 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
// hard-float calling convention by default.
if (!TT.isWatchABI()) {
if (isAAPCS_ABI(TT, ABIName)) {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_AAPCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_AAPCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_AAPCS);
} else {
- setLibcallImplCallingConv(RTLIB::__truncsfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__truncdfhf2, CallingConv::ARM_APCS);
- setLibcallImplCallingConv(RTLIB::__extendhfsf2, CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncsfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___truncdfhf2,
+ CallingConv::ARM_APCS);
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___extendhfsf2,
+ CallingConv::ARM_APCS);
}
}
@@ -56,7 +63,7 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
}
if (TT.getArch() == Triple::ArchType::msp430) {
- setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
+ setLibcallImplCallingConv(RTLIB::LibcallImpl::Impl___mspabi_mpyll,
CallingConv::MSP430_BUILTIN);
}
}
@@ -73,10 +80,9 @@ RuntimeLibcallsInfo::libcallImplNameHit(uint16_t NameOffsetEntry,
++NumAliases;
}
- RTLIB::LibcallImpl ImplStart = static_cast<RTLIB::LibcallImpl>(
- &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
- &RuntimeLibcallNameOffsetTable[0]);
- return enum_seq(ImplStart,
+ size_t ImplStart = &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
+ &RuntimeLibcallNameOffsetTable[0];
+ return enum_seq(static_cast<RTLIB::LibcallImpl>(ImplStart),
static_cast<RTLIB::LibcallImpl>(ImplStart + NumAliases));
}
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index 830156359e9e8..3a90e8ddf8f65 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -529,56 +529,56 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Single-precision floating-point arithmetic.
- { RTLIB::ADD_F32, RTLIB::__addsf3vfp },
- { RTLIB::SUB_F32, RTLIB::__subsf3vfp },
- { RTLIB::MUL_F32, RTLIB::__mulsf3vfp },
- { RTLIB::DIV_F32, RTLIB::__divsf3vfp },
+ { RTLIB::ADD_F32, RTLIB::LibcallImpl::Impl___addsf3vfp },
+ { RTLIB::SUB_F32, RTLIB::LibcallImpl::Impl___subsf3vfp },
+ { RTLIB::MUL_F32, RTLIB::LibcallImpl::Impl___mulsf3vfp },
+ { RTLIB::DIV_F32, RTLIB::LibcallImpl::Impl___divsf3vfp },
// Double-precision floating-point arithmetic.
- { RTLIB::ADD_F64, RTLIB::__adddf3vfp },
- { RTLIB::SUB_F64, RTLIB::__subdf3vfp },
- { RTLIB::MUL_F64, RTLIB::__muldf3vfp },
- { RTLIB::DIV_F64, RTLIB::__divdf3vfp },
+ { RTLIB::ADD_F64, RTLIB::LibcallImpl::Impl___adddf3vfp },
+ { RTLIB::SUB_F64, RTLIB::LibcallImpl::Impl___subdf3vfp },
+ { RTLIB::MUL_F64, RTLIB::LibcallImpl::Impl___muldf3vfp },
+ { RTLIB::DIV_F64, RTLIB::LibcallImpl::Impl___divdf3vfp },
// Single-precision comparisons.
- { RTLIB::OEQ_F32, RTLIB::__eqsf2vfp },
- { RTLIB::UNE_F32, RTLIB::__nesf2vfp },
- { RTLIB::OLT_F32, RTLIB::__ltsf2vfp },
- { RTLIB::OLE_F32, RTLIB::__lesf2vfp },
- { RTLIB::OGE_F32, RTLIB::__gesf2vfp },
- { RTLIB::OGT_F32, RTLIB::__gtsf2vfp },
- { RTLIB::UO_F32, RTLIB::__unordsf2vfp },
+ { RTLIB::OEQ_F32, RTLIB::LibcallImpl::Impl___eqsf2vfp },
+ { RTLIB::UNE_F32, RTLIB::LibcallImpl::Impl___nesf2vfp },
+ { RTLIB::OLT_F32, RTLIB::LibcallImpl::Impl___ltsf2vfp },
+ { RTLIB::OLE_F32, RTLIB::LibcallImpl::Impl___lesf2vfp },
+ { RTLIB::OGE_F32, RTLIB::LibcallImpl::Impl___gesf2vfp },
+ { RTLIB::OGT_F32, RTLIB::LibcallImpl::Impl___gtsf2vfp },
+ { RTLIB::UO_F32, RTLIB::LibcallImpl::Impl___unordsf2vfp },
// Double-precision comparisons.
- { RTLIB::OEQ_F64, RTLIB::__eqdf2vfp },
- { RTLIB::UNE_F64, RTLIB::__nedf2vfp },
- { RTLIB::OLT_F64, RTLIB::__ltdf2vfp },
- { RTLIB::OLE_F64, RTLIB::__ledf2vfp },
- { RTLIB::OGE_F64, RTLIB::__gedf2vfp },
- { RTLIB::OGT_F64, RTLIB::__gtdf2vfp },
- { RTLIB::UO_F64, RTLIB::__unorddf2vfp },
+ { RTLIB::OEQ_F64, RTLIB::LibcallImpl::Impl___eqdf2vfp },
+ { RTLIB::UNE_F64, RTLIB::LibcallImpl::Impl___nedf2vfp },
+ { RTLIB::OLT_F64, RTLIB::LibcallImpl::Impl___ltdf2vfp },
+ { RTLIB::OLE_F64, RTLIB::LibcallImpl::Impl___ledf2vfp },
+ { RTLIB::OGE_F64, RTLIB::LibcallImpl::Impl___gedf2vfp },
+ { RTLIB::OGT_F64, RTLIB::LibcallImpl::Impl___gtdf2vfp },
+ { RTLIB::UO_F64, RTLIB::LibcallImpl::Impl___unorddf2vfp },
// Floating-point to integer conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
- { RTLIB::FPTOSINT_F64_I32, RTLIB::__fixdfsivfp },
- { RTLIB::FPTOUINT_F64_I32, RTLIB::__fixunsdfsivfp },
- { RTLIB::FPTOSINT_F32_I32, RTLIB::__fixsfsivfp },
- { RTLIB::FPTOUINT_F32_I32, RTLIB::__fixunssfsivfp },
+ { RTLIB::FPTOSINT_F64_I32, RTLIB::LibcallImpl::Impl___fixdfsivfp },
+ { RTLIB::FPTOUINT_F64_I32, RTLIB::LibcallImpl::Impl___fixunsdfsivfp },
+ { RTLIB::FPTOSINT_F32_I32, RTLIB::LibcallImpl::Impl___fixsfsivfp },
+ { RTLIB::FPTOUINT_F32_I32, RTLIB::LibcallImpl::Impl___fixunssfsivfp },
// Conversions between floating types.
- { RTLIB::FPROUND_F64_F32, RTLIB::__truncdfsf2vfp },
- { RTLIB::FPEXT_F32_F64, RTLIB::__extendsfdf2vfp },
+ { RTLIB::FPROUND_F64_F32, RTLIB::LibcallImpl::Impl___truncdfsf2vfp },
+ { RTLIB::FPEXT_F32_F64, RTLIB::LibcallImpl::Impl___extendsfdf2vfp },
// Integer to floating-point conversions.
// i64 conversions are done via library routines even when generating VFP
// instructions, so use the same ones.
// FIXME: There appears to be some naming inconsistency in ARM libgcc:
// e.g., __floatunsidf vs. __floatunssidfvfp.
- { RTLIB::SINTTOFP_I32_F64, RTLIB::__floatsidfvfp },
- { RTLIB::UINTTOFP_I32_F64, RTLIB::__floatunssidfvfp },
- { RTLIB::SINTTOFP_I32_F32, RTLIB::__floatsisfvfp },
- { RTLIB::UINTTOFP_I32_F32, RTLIB::__floatunssisfvfp },
+ { RTLIB::SINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatsidfvfp },
+ { RTLIB::UINTTOFP_I32_F64, RTLIB::LibcallImpl::Impl___floatunssidfvfp },
+ { RTLIB::SINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatsisfvfp },
+ { RTLIB::UINTTOFP_I32_F32, RTLIB::LibcallImpl::Impl___floatunssisfvfp },
};
// clang-format on
diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
index 6da5e66be4ad8..cae82635610ed 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp
@@ -154,9 +154,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw},
+ {RTLIB::MUL_I16, RTLIB::LibcallImpl::Impl___mspabi_mpyi_hw},
+ {RTLIB::MUL_I32, RTLIB::LibcallImpl::Impl___mspabi_mpyl_hw},
+ {RTLIB::MUL_I64, RTLIB::LibcallImpl::Impl___mspabi_mpyll_hw},
// TODO The __mspabi_mpysl*_hw functions ARE implemented in libgcc
// TODO The __mspabi_mpyul*_hw functions ARE implemented in libgcc
};
@@ -169,9 +169,9 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
const RTLIB::LibcallImpl Impl;
} LibraryCalls[] = {
// Integer Multiply - EABI Table 9
- {RTLIB::MUL_I16, RTLIB::__mspabi_mpyi_hw},
- {RTLIB::MUL_I32, RTLIB::__mspabi_mpyl_hw32},
- {RTLIB::MUL_I64, RTLIB::__mspabi_mpyll_hw32},
+ {RTLIB::MUL_I16, RTLIB::LibcallI...
[truncated]
|
4cc510e to
c24adf6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Twine should not be returned by value like this. Should keep this returning the original StringRef, and add the prefix at the emission time.
I think the prefix should not be Impl, it's pretty ugly and you end up with multiple adjacent "Impls" in the name.
How about "RTLIB_", "lc_", "libcall_"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fair enough, I'll go with lci_ for LibCallImpl
nikic
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you're giving this an Impl_ prefix, I'm not sure it makes sense to also use enum class. That double-namespaces all symbols.
@arsenm thoughts? We need to have a prefix to avoid conflicting with reserved names, but would you be ok with not having an |
Yes, I don't think the enum class is necessary. RTLIB was preexisting, we could pull everything out if it if desired. |
c24adf6 to
f673c5d
Compare
f673c5d to
c3d7396
Compare
|
@arsenm ping... |
nikic
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PR title and description are out of date with the implementation.
TBH I liked your original Impl_ prefix more than lci_. RTLIB::Impl_ is more obvious than RTLIB::lci_ if you're not very familiar with this code and know that lci is short for LibCallImpl.
c3d7396 to
91ad622
Compare
|
Ok, executive decision, I'm going with |
nikic
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, but description / title still need an update as this doesn't use enum class.
As noted in #153256, TableGen is generating reserved names for RuntimeLibcalls, which resulted in a build failure for Arm64EC since
vcruntime.hdefines__security_check_cookieas a macro.To avoid using reserved names, all impl names will now be prefixed with
Impl_.NumLibcallImplswas lifted out as aconstexpr size_tinstead of being an enum field.While I was churning the dependent code, I also removed the TODO to move the impl enum into its own namespace and use an
enum class: I experimented with using anenum classand adding a namespace, but we decided it was too verbose so it was dropped.