-
Notifications
You must be signed in to change notification settings - Fork 14.8k
[NFC] RuntimeLibcalls: Prefix the impls with 'Impl_' and use an enum class #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
base: main
Are you sure you want to change the base?
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
@@ -157,7 +157,7 @@ class RuntimeLibcallImpl { | |||
|
|||
const Record *getDef() const { return TheDef; } | |||
|
|||
StringRef getName() const { return TheDef->getName(); } | |||
Twine getName() const { return Twine("Impl_") + TheDef->getName(); } |
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.
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.
As noted in #153256, TableGen is generating reserved names for RuntimeLibcalls, which resulted in a build failure for Arm64EC since
vcruntime.h
defines__security_check_cookie
as a macro.To avoid using reserved names, all impl names will now be prefixed with
Impl_
.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
enum class
: I opted to only use anenum class
as the namespace +enum class
resulted in very verbose names.NumLibcallImpls
was lifted out as aconstexpr size_t
instead of being an enum field.I added a
constexpr
forRTLIB::Unsupported
since it is heavily used, but I'm not sure if folks would prefer to change uses toRTLIB::LibcallImpl::Unsupported
instead.