[llvm] r281088 - ARM: move the builtins libcall CC setup

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 9 13:11:31 PDT 2016


Author: compnerd
Date: Fri Sep  9 15:11:31 2016
New Revision: 281088

URL: http://llvm.org/viewvc/llvm-project?rev=281088&view=rev
Log:
ARM: move the builtins libcall CC setup

Move the target specific setup into the target specific lowering setup.  As
pointed out by Anton, the initial change was moving this too high up the stack
resulting in a violation of the layering (the target generic code path setup
target specific bits).  Sink this into the ARM specific setup.  NFC.

Modified:
    llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp
    llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
    llvm/trunk/lib/Target/ARM/ARMISelLowering.h

Modified: llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp?rev=281088&r1=281087&r2=281088&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp (original)
+++ llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp Fri Sep  9 15:11:31 2016
@@ -489,173 +489,9 @@ static void InitLibcallNames(const char
 }
 
 /// Set default libcall CallingConvs.
-static void InitLibcallCallingConvs(CallingConv::ID *CCs, const Triple &T) {
+static void InitLibcallCallingConvs(CallingConv::ID *CCs) {
   for (int LC = 0; LC < RTLIB::UNKNOWN_LIBCALL; ++LC)
     CCs[LC] = CallingConv::C;
-
-  // The builtins on ARM always use AAPCS, irrespective of wheter C is AAPCS or
-  // AAPCS_VFP.
-  if (T.getArch() == Triple::arm || T.getArch() == Triple::thumb)
-    for (const auto LC : {
-             RTLIB::SHL_I16,
-             RTLIB::SHL_I32,
-             RTLIB::SHL_I64,
-             RTLIB::SHL_I128,
-             RTLIB::SRL_I16,
-             RTLIB::SRL_I32,
-             RTLIB::SRL_I64,
-             RTLIB::SRL_I128,
-             RTLIB::SRA_I16,
-             RTLIB::SRA_I32,
-             RTLIB::SRA_I64,
-             RTLIB::SRA_I128,
-             RTLIB::MUL_I8,
-             RTLIB::MUL_I16,
-             RTLIB::MUL_I32,
-             RTLIB::MUL_I64,
-             RTLIB::MUL_I128,
-             RTLIB::MULO_I32,
-             RTLIB::MULO_I64,
-             RTLIB::MULO_I128,
-             RTLIB::SDIV_I8,
-             RTLIB::SDIV_I16,
-             RTLIB::SDIV_I32,
-             RTLIB::SDIV_I64,
-             RTLIB::SDIV_I128,
-             RTLIB::UDIV_I8,
-             RTLIB::UDIV_I16,
-             RTLIB::UDIV_I32,
-             RTLIB::UDIV_I64,
-             RTLIB::UDIV_I128,
-             RTLIB::SREM_I8,
-             RTLIB::SREM_I16,
-             RTLIB::SREM_I32,
-             RTLIB::SREM_I64,
-             RTLIB::SREM_I128,
-             RTLIB::UREM_I8,
-             RTLIB::UREM_I16,
-             RTLIB::UREM_I32,
-             RTLIB::UREM_I64,
-             RTLIB::UREM_I128,
-             RTLIB::SDIVREM_I8,
-             RTLIB::SDIVREM_I16,
-             RTLIB::SDIVREM_I32,
-             RTLIB::SDIVREM_I64,
-             RTLIB::SDIVREM_I128,
-             RTLIB::UDIVREM_I8,
-             RTLIB::UDIVREM_I16,
-             RTLIB::UDIVREM_I32,
-             RTLIB::UDIVREM_I64,
-             RTLIB::UDIVREM_I128,
-             RTLIB::NEG_I32,
-             RTLIB::NEG_I64,
-             RTLIB::ADD_F32,
-             RTLIB::ADD_F64,
-             RTLIB::ADD_F80,
-             RTLIB::ADD_F128,
-             RTLIB::SUB_F32,
-             RTLIB::SUB_F64,
-             RTLIB::SUB_F80,
-             RTLIB::SUB_F128,
-             RTLIB::MUL_F32,
-             RTLIB::MUL_F64,
-             RTLIB::MUL_F80,
-             RTLIB::MUL_F128,
-             RTLIB::DIV_F32,
-             RTLIB::DIV_F64,
-             RTLIB::DIV_F80,
-             RTLIB::DIV_F128,
-             RTLIB::POWI_F32,
-             RTLIB::POWI_F64,
-             RTLIB::POWI_F80,
-             RTLIB::POWI_F128,
-             RTLIB::FPEXT_F64_F128,
-             RTLIB::FPEXT_F32_F128,
-             RTLIB::FPEXT_F32_F64,
-             RTLIB::FPEXT_F16_F32,
-             RTLIB::FPROUND_F32_F16,
-             RTLIB::FPROUND_F64_F16,
-             RTLIB::FPROUND_F80_F16,
-             RTLIB::FPROUND_F128_F16,
-             RTLIB::FPROUND_F64_F32,
-             RTLIB::FPROUND_F80_F32,
-             RTLIB::FPROUND_F128_F32,
-             RTLIB::FPROUND_F80_F64,
-             RTLIB::FPROUND_F128_F64,
-             RTLIB::FPTOSINT_F32_I32,
-             RTLIB::FPTOSINT_F32_I64,
-             RTLIB::FPTOSINT_F32_I128,
-             RTLIB::FPTOSINT_F64_I32,
-             RTLIB::FPTOSINT_F64_I64,
-             RTLIB::FPTOSINT_F64_I128,
-             RTLIB::FPTOSINT_F80_I32,
-             RTLIB::FPTOSINT_F80_I64,
-             RTLIB::FPTOSINT_F80_I128,
-             RTLIB::FPTOSINT_F128_I32,
-             RTLIB::FPTOSINT_F128_I64,
-             RTLIB::FPTOSINT_F128_I128,
-             RTLIB::FPTOUINT_F32_I32,
-             RTLIB::FPTOUINT_F32_I64,
-             RTLIB::FPTOUINT_F32_I128,
-             RTLIB::FPTOUINT_F64_I32,
-             RTLIB::FPTOUINT_F64_I64,
-             RTLIB::FPTOUINT_F64_I128,
-             RTLIB::FPTOUINT_F80_I32,
-             RTLIB::FPTOUINT_F80_I64,
-             RTLIB::FPTOUINT_F80_I128,
-             RTLIB::FPTOUINT_F128_I32,
-             RTLIB::FPTOUINT_F128_I64,
-             RTLIB::FPTOUINT_F128_I128,
-             RTLIB::SINTTOFP_I32_F32,
-             RTLIB::SINTTOFP_I32_F64,
-             RTLIB::SINTTOFP_I32_F80,
-             RTLIB::SINTTOFP_I32_F128,
-             RTLIB::SINTTOFP_I64_F32,
-             RTLIB::SINTTOFP_I64_F64,
-             RTLIB::SINTTOFP_I64_F80,
-             RTLIB::SINTTOFP_I64_F128,
-             RTLIB::SINTTOFP_I128_F32,
-             RTLIB::SINTTOFP_I128_F64,
-             RTLIB::SINTTOFP_I128_F80,
-             RTLIB::SINTTOFP_I128_F128,
-             RTLIB::UINTTOFP_I32_F32,
-             RTLIB::UINTTOFP_I32_F64,
-             RTLIB::UINTTOFP_I32_F80,
-             RTLIB::UINTTOFP_I32_F128,
-             RTLIB::UINTTOFP_I64_F32,
-             RTLIB::UINTTOFP_I64_F64,
-             RTLIB::UINTTOFP_I64_F80,
-             RTLIB::UINTTOFP_I64_F128,
-             RTLIB::UINTTOFP_I128_F32,
-             RTLIB::UINTTOFP_I128_F64,
-             RTLIB::UINTTOFP_I128_F80,
-             RTLIB::UINTTOFP_I128_F128,
-             RTLIB::OEQ_F32,
-             RTLIB::OEQ_F64,
-             RTLIB::OEQ_F128,
-             RTLIB::UNE_F32,
-             RTLIB::UNE_F64,
-             RTLIB::UNE_F128,
-             RTLIB::OGE_F32,
-             RTLIB::OGE_F64,
-             RTLIB::OGE_F128,
-             RTLIB::OLT_F32,
-             RTLIB::OLT_F64,
-             RTLIB::OLT_F128,
-             RTLIB::OLE_F32,
-             RTLIB::OLE_F64,
-             RTLIB::OLE_F128,
-             RTLIB::OGT_F32,
-             RTLIB::OGT_F64,
-             RTLIB::OGT_F128,
-             RTLIB::UO_F32,
-             RTLIB::UO_F64,
-             RTLIB::UO_F128,
-             RTLIB::O_F32,
-             RTLIB::O_F64,
-             RTLIB::O_F128,
-         })
-      CCs[LC] = CallingConv::ARM_AAPCS;
 }
 
 /// getFPEXT - Return the FPEXT_*_* value for the given types, or
@@ -997,7 +833,7 @@ TargetLoweringBase::TargetLoweringBase(c
 
   InitLibcallNames(LibcallRoutineNames, TM.getTargetTriple());
   InitCmpLibcallCCs(CmpLibcallCCs);
-  InitLibcallCallingConvs(LibcallCallingConvs, TM.getTargetTriple());
+  InitLibcallCallingConvs(LibcallCallingConvs);
 }
 
 void TargetLoweringBase::initActions() {

Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=281088&r1=281087&r2=281088&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Fri Sep  9 15:11:31 2016
@@ -80,6 +80,171 @@ namespace {
   };
 }
 
+void ARMTargetLowering::InitLibcallCallingConvs() {
+  // The builtins on ARM always use AAPCS, irrespective of wheter C is AAPCS or
+  // AAPCS_VFP.
+  for (const auto LC : {
+           RTLIB::SHL_I16,
+           RTLIB::SHL_I32,
+           RTLIB::SHL_I64,
+           RTLIB::SHL_I128,
+           RTLIB::SRL_I16,
+           RTLIB::SRL_I32,
+           RTLIB::SRL_I64,
+           RTLIB::SRL_I128,
+           RTLIB::SRA_I16,
+           RTLIB::SRA_I32,
+           RTLIB::SRA_I64,
+           RTLIB::SRA_I128,
+           RTLIB::MUL_I8,
+           RTLIB::MUL_I16,
+           RTLIB::MUL_I32,
+           RTLIB::MUL_I64,
+           RTLIB::MUL_I128,
+           RTLIB::MULO_I32,
+           RTLIB::MULO_I64,
+           RTLIB::MULO_I128,
+           RTLIB::SDIV_I8,
+           RTLIB::SDIV_I16,
+           RTLIB::SDIV_I32,
+           RTLIB::SDIV_I64,
+           RTLIB::SDIV_I128,
+           RTLIB::UDIV_I8,
+           RTLIB::UDIV_I16,
+           RTLIB::UDIV_I32,
+           RTLIB::UDIV_I64,
+           RTLIB::UDIV_I128,
+           RTLIB::SREM_I8,
+           RTLIB::SREM_I16,
+           RTLIB::SREM_I32,
+           RTLIB::SREM_I64,
+           RTLIB::SREM_I128,
+           RTLIB::UREM_I8,
+           RTLIB::UREM_I16,
+           RTLIB::UREM_I32,
+           RTLIB::UREM_I64,
+           RTLIB::UREM_I128,
+           RTLIB::SDIVREM_I8,
+           RTLIB::SDIVREM_I16,
+           RTLIB::SDIVREM_I32,
+           RTLIB::SDIVREM_I64,
+           RTLIB::SDIVREM_I128,
+           RTLIB::UDIVREM_I8,
+           RTLIB::UDIVREM_I16,
+           RTLIB::UDIVREM_I32,
+           RTLIB::UDIVREM_I64,
+           RTLIB::UDIVREM_I128,
+           RTLIB::NEG_I32,
+           RTLIB::NEG_I64,
+           RTLIB::ADD_F32,
+           RTLIB::ADD_F64,
+           RTLIB::ADD_F80,
+           RTLIB::ADD_F128,
+           RTLIB::SUB_F32,
+           RTLIB::SUB_F64,
+           RTLIB::SUB_F80,
+           RTLIB::SUB_F128,
+           RTLIB::MUL_F32,
+           RTLIB::MUL_F64,
+           RTLIB::MUL_F80,
+           RTLIB::MUL_F128,
+           RTLIB::DIV_F32,
+           RTLIB::DIV_F64,
+           RTLIB::DIV_F80,
+           RTLIB::DIV_F128,
+           RTLIB::POWI_F32,
+           RTLIB::POWI_F64,
+           RTLIB::POWI_F80,
+           RTLIB::POWI_F128,
+           RTLIB::FPEXT_F64_F128,
+           RTLIB::FPEXT_F32_F128,
+           RTLIB::FPEXT_F32_F64,
+           RTLIB::FPEXT_F16_F32,
+           RTLIB::FPROUND_F32_F16,
+           RTLIB::FPROUND_F64_F16,
+           RTLIB::FPROUND_F80_F16,
+           RTLIB::FPROUND_F128_F16,
+           RTLIB::FPROUND_F64_F32,
+           RTLIB::FPROUND_F80_F32,
+           RTLIB::FPROUND_F128_F32,
+           RTLIB::FPROUND_F80_F64,
+           RTLIB::FPROUND_F128_F64,
+           RTLIB::FPTOSINT_F32_I32,
+           RTLIB::FPTOSINT_F32_I64,
+           RTLIB::FPTOSINT_F32_I128,
+           RTLIB::FPTOSINT_F64_I32,
+           RTLIB::FPTOSINT_F64_I64,
+           RTLIB::FPTOSINT_F64_I128,
+           RTLIB::FPTOSINT_F80_I32,
+           RTLIB::FPTOSINT_F80_I64,
+           RTLIB::FPTOSINT_F80_I128,
+           RTLIB::FPTOSINT_F128_I32,
+           RTLIB::FPTOSINT_F128_I64,
+           RTLIB::FPTOSINT_F128_I128,
+           RTLIB::FPTOUINT_F32_I32,
+           RTLIB::FPTOUINT_F32_I64,
+           RTLIB::FPTOUINT_F32_I128,
+           RTLIB::FPTOUINT_F64_I32,
+           RTLIB::FPTOUINT_F64_I64,
+           RTLIB::FPTOUINT_F64_I128,
+           RTLIB::FPTOUINT_F80_I32,
+           RTLIB::FPTOUINT_F80_I64,
+           RTLIB::FPTOUINT_F80_I128,
+           RTLIB::FPTOUINT_F128_I32,
+           RTLIB::FPTOUINT_F128_I64,
+           RTLIB::FPTOUINT_F128_I128,
+           RTLIB::SINTTOFP_I32_F32,
+           RTLIB::SINTTOFP_I32_F64,
+           RTLIB::SINTTOFP_I32_F80,
+           RTLIB::SINTTOFP_I32_F128,
+           RTLIB::SINTTOFP_I64_F32,
+           RTLIB::SINTTOFP_I64_F64,
+           RTLIB::SINTTOFP_I64_F80,
+           RTLIB::SINTTOFP_I64_F128,
+           RTLIB::SINTTOFP_I128_F32,
+           RTLIB::SINTTOFP_I128_F64,
+           RTLIB::SINTTOFP_I128_F80,
+           RTLIB::SINTTOFP_I128_F128,
+           RTLIB::UINTTOFP_I32_F32,
+           RTLIB::UINTTOFP_I32_F64,
+           RTLIB::UINTTOFP_I32_F80,
+           RTLIB::UINTTOFP_I32_F128,
+           RTLIB::UINTTOFP_I64_F32,
+           RTLIB::UINTTOFP_I64_F64,
+           RTLIB::UINTTOFP_I64_F80,
+           RTLIB::UINTTOFP_I64_F128,
+           RTLIB::UINTTOFP_I128_F32,
+           RTLIB::UINTTOFP_I128_F64,
+           RTLIB::UINTTOFP_I128_F80,
+           RTLIB::UINTTOFP_I128_F128,
+           RTLIB::OEQ_F32,
+           RTLIB::OEQ_F64,
+           RTLIB::OEQ_F128,
+           RTLIB::UNE_F32,
+           RTLIB::UNE_F64,
+           RTLIB::UNE_F128,
+           RTLIB::OGE_F32,
+           RTLIB::OGE_F64,
+           RTLIB::OGE_F128,
+           RTLIB::OLT_F32,
+           RTLIB::OLT_F64,
+           RTLIB::OLT_F128,
+           RTLIB::OLE_F32,
+           RTLIB::OLE_F64,
+           RTLIB::OLE_F128,
+           RTLIB::OGT_F32,
+           RTLIB::OGT_F64,
+           RTLIB::OGT_F128,
+           RTLIB::UO_F32,
+           RTLIB::UO_F64,
+           RTLIB::UO_F128,
+           RTLIB::O_F32,
+           RTLIB::O_F64,
+           RTLIB::O_F128,
+       })
+  setLibcallCallingConv(LC, CallingConv::ARM_AAPCS);
+}
+
 // The APCS parameter registers.
 static const MCPhysReg GPRArgRegs[] = {
   ARM::R0, ARM::R1, ARM::R2, ARM::R3
@@ -167,6 +332,8 @@ ARMTargetLowering::ARMTargetLowering(con
 
   setBooleanVectorContents(ZeroOrNegativeOneBooleanContent);
 
+  InitLibcallCallingConvs();
+
   if (Subtarget->isTargetMachO()) {
     // Uses VFP for Thumb libfuncs if available.
     if (Subtarget->isThumb() && Subtarget->hasVFP2() &&

Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.h?rev=281088&r1=281087&r2=281088&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.h (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.h Fri Sep  9 15:11:31 2016
@@ -506,6 +506,8 @@ namespace llvm {
 
     bool HasStandaloneRem = true;
 
+    void InitLibcallCallingConvs();
+
     void addTypeForNEON(MVT VT, MVT PromotedLdStVT, MVT PromotedBitwiseVT);
     void addDRTypeForNEON(MVT VT);
     void addQRTypeForNEON(MVT VT);




More information about the llvm-commits mailing list