[llvm-branch-commits] [llvm] ee74d1b - X86: use a data driven configuration of Windows x86 libcalls (NFC)
Saleem Abdulrasool via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Dec 9 14:54:56 PST 2020
Author: Saleem Abdulrasool
Date: 2020-12-09T22:49:11Z
New Revision: ee74d1b420369d1dbe18be43d71d3392536ce228
URL: https://github.com/llvm/llvm-project/commit/ee74d1b420369d1dbe18be43d71d3392536ce228
DIFF: https://github.com/llvm/llvm-project/commit/ee74d1b420369d1dbe18be43d71d3392536ce228.diff
LOG: X86: use a data driven configuration of Windows x86 libcalls (NFC)
Rather than creating a series of associated calls and ensuring that
everything is lined up, use a table driven approach that ensures that
they two always stay in sync.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 53f30af8d38b..5a77cc1f17fc 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -135,19 +135,24 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
addBypassSlowDiv(64, 32);
}
- if (Subtarget.isTargetWindowsMSVC() ||
- Subtarget.isTargetWindowsItanium()) {
- // Setup Windows compiler runtime calls.
- setLibcallName(RTLIB::SDIV_I64, "_alldiv");
- setLibcallName(RTLIB::UDIV_I64, "_aulldiv");
- setLibcallName(RTLIB::SREM_I64, "_allrem");
- setLibcallName(RTLIB::UREM_I64, "_aullrem");
- setLibcallName(RTLIB::MUL_I64, "_allmul");
- setLibcallCallingConv(RTLIB::SDIV_I64, CallingConv::X86_StdCall);
- setLibcallCallingConv(RTLIB::UDIV_I64, CallingConv::X86_StdCall);
- setLibcallCallingConv(RTLIB::SREM_I64, CallingConv::X86_StdCall);
- setLibcallCallingConv(RTLIB::UREM_I64, CallingConv::X86_StdCall);
- setLibcallCallingConv(RTLIB::MUL_I64, CallingConv::X86_StdCall);
+ // Setup Windows compiler runtime calls.
+ if (Subtarget.isTargetWindowsMSVC() || Subtarget.isTargetWindowsItanium()) {
+ static const struct {
+ const RTLIB::Libcall Op;
+ const char * const Name;
+ const CallingConv::ID CC;
+ } LibraryCalls[] = {
+ { RTLIB::SDIV_I64, "_alldiv", CallingConv::X86_StdCall },
+ { RTLIB::UDIV_I64, "_aulldiv", CallingConv::X86_StdCall },
+ { RTLIB::SREM_I64, "_allrem", CallingConv::X86_StdCall },
+ { RTLIB::UREM_I64, "_aullrem", CallingConv::X86_StdCall },
+ { RTLIB::MUL_I64, "_allmul", CallingConv::X86_StdCall },
+ };
+
+ for (const auto &LC : LibraryCalls) {
+ setLibcallName(LC.Op, LC.Name);
+ setLibcallCallingConv(LC.Op, LC.CC);
+ }
}
if (Subtarget.getTargetTriple().isOSMSVCRT()) {
More information about the llvm-branch-commits
mailing list