[llvm-commits] [llvm] r49583 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Duncan Sands baldrick at free.fr
Sat Apr 12 10:14:18 PDT 2008


Author: baldrick
Date: Sat Apr 12 12:14:18 2008
New Revision: 49583

URL: http://llvm.org/viewvc/llvm-project?rev=49583&view=rev
Log:
Factor some libcall code.

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=49583&r1=49582&r2=49583&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sat Apr 12 12:14:18 2008
@@ -196,7 +196,7 @@
 
   void LegalizeSetCCOperands(SDOperand &LHS, SDOperand &RHS, SDOperand &CC);
     
-  SDOperand ExpandLibCall(const char *Name, SDNode *Node, bool isSigned,
+  SDOperand ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool isSigned,
                           SDOperand &Hi);
   SDOperand ExpandIntToFP(bool isSigned, MVT::ValueType DestTy,
                           SDOperand Source);
@@ -2992,7 +2992,7 @@
       }
       if (LC != RTLIB::UNKNOWN_LIBCALL) {
         SDOperand Dummy;
-        Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Dummy);
+        Result = ExpandLibCall(LC, Node, isSigned, Dummy);
         break;
       }
 
@@ -3195,7 +3195,7 @@
           RTLIB::Libcall LC = Node->getOpcode() == ISD::UREM
             ? RTLIB::UREM_I32 : RTLIB::SREM_I32;
           SDOperand Dummy;
-          Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Dummy);
+          Result = ExpandLibCall(LC, Node, isSigned, Dummy);
         }
       } else {
         assert(MVT::isFloatingPoint(VT) &&
@@ -3207,8 +3207,7 @@
           RTLIB::Libcall LC = GetFPLibCall(VT, RTLIB::REM_F32, RTLIB::REM_F64,
                                            RTLIB::REM_F80, RTLIB::REM_PPCF128);
           SDOperand Dummy;
-          Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                                 false/*sign irrelevant*/, Dummy);
+          Result = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Dummy);
         }
       }
       break;
@@ -3493,8 +3492,7 @@
         default: assert(0 && "Unreachable!");
         }
         SDOperand Dummy;
-        Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                               false/*sign irrelevant*/, Dummy);
+        Result = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Dummy);
         break;
       }
       }
@@ -3514,8 +3512,7 @@
     RTLIB::Libcall LC = GetFPLibCall(VT, RTLIB::POWI_F32, RTLIB::POWI_F64,
                                      RTLIB::POWI_F80, RTLIB::POWI_PPCF128);
     SDOperand Dummy;
-    Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                           false/*sign irrelevant*/, Dummy);
+    Result = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Dummy);
     break;
   }
   case ISD::BIT_CONVERT:
@@ -3789,8 +3786,7 @@
       default: assert(0 && "Unreachable!");
       }
       SDOperand Dummy;
-      Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                             false/*sign irrelevant*/, Dummy);
+      Result = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Dummy);
       break;
     }
     case Promote:
@@ -4669,7 +4665,7 @@
       }
       
       SDOperand Dummy;
-      Tmp1 = ExpandLibCall(TLI.getLibcallName(LC1),
+      Tmp1 = ExpandLibCall(LC1,
                            DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
                            false /*sign irrelevant*/, Dummy);
       Tmp2 = DAG.getConstant(0, MVT::i32);
@@ -4677,8 +4673,8 @@
       if (LC2 != RTLIB::UNKNOWN_LIBCALL) {
         Tmp1 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultType(Tmp1), Tmp1, Tmp2,
                            CC);
-        LHS = ExpandLibCall(TLI.getLibcallName(LC2),
-                            DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
+        LHS = ExpandLibCall(LC2,
+                            DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val,
                             false /*sign irrelevant*/, Dummy);
         Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultType(LHS), LHS, Tmp2,
                            DAG.getCondCode(TLI.getCmpLibcallCC(LC2)));
@@ -5202,7 +5198,7 @@
 // does not fit into a register, return the lo part and set the hi part to the
 // by-reg argument.  If it does fit into a single register, return the result
 // and leave the Hi part unset.
-SDOperand SelectionDAGLegalize::ExpandLibCall(const char *Name, SDNode *Node,
+SDOperand SelectionDAGLegalize::ExpandLibCall(RTLIB::Libcall LC, SDNode *Node,
                                               bool isSigned, SDOperand &Hi) {
   assert(!IsLegalizingCall && "Cannot overlap legalization of calls!");
   // The input chain to this libcall is the entry node of the function. 
@@ -5220,7 +5216,8 @@
     Entry.isZExt = !isSigned;
     Args.push_back(Entry);
   }
-  SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy());
+  SDOperand Callee = DAG.getExternalSymbol(TLI.getLibcallName(LC),
+                                           TLI.getPointerTy());
 
   // Splice the libcall in wherever FindInputOutputChains tells us to.
   const Type *RetTy = MVT::getTypeForValueType(Node->getValueType(0));
@@ -5371,8 +5368,7 @@
   assert(TLI.getLibcallName(LC) && "Don't know how to expand this SINT_TO_FP!");
   Source = DAG.getNode(ISD::SINT_TO_FP, DestTy, Source);
   SDOperand HiPart;
-  SDOperand Result = ExpandLibCall(TLI.getLibcallName(LC), Source.Val, isSigned,
-                                   HiPart);
+  SDOperand Result = ExpandLibCall(LC, Source.Val, isSigned, HiPart);
   if (Result.getValueType() != DestTy && HiPart.Val)
     Result = DAG.getNode(ISD::BUILD_PAIR, DestTy, Result, HiPart);
   return Result;
@@ -6131,8 +6127,7 @@
         LC = RTLIB::FPTOSINT_F80_I64;
       else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
         LC = RTLIB::FPTOSINT_PPCF128_I64;
-      Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                         false/*sign irrelevant*/, Hi);
+      Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi);
     } else if (VT == MVT::i128) {
       if (Node->getOperand(0).getValueType() == MVT::f32)
         LC = RTLIB::FPTOSINT_F32_I128;
@@ -6142,8 +6137,7 @@
         LC = RTLIB::FPTOSINT_F80_I128;
       else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
         LC = RTLIB::FPTOSINT_PPCF128_I128;
-      Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                         false/*sign irrelevant*/, Hi);
+      Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi);
     } else {
       assert(0 && "Unexpected uint-to-fp conversion!");
     }
@@ -6178,8 +6172,7 @@
         LC = RTLIB::FPTOUINT_F80_I64;
       else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
         LC = RTLIB::FPTOUINT_PPCF128_I64;
-      Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                         false/*sign irrelevant*/, Hi);
+      Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi);
     } else if (VT == MVT::i128) {
       if (Node->getOperand(0).getValueType() == MVT::f32)
         LC = RTLIB::FPTOUINT_F32_I128;
@@ -6189,8 +6182,7 @@
         LC = RTLIB::FPTOUINT_F80_I128;
       else if (Node->getOperand(0).getValueType() == MVT::ppcf128)
         LC = RTLIB::FPTOUINT_PPCF128_I128;
-      Lo = ExpandLibCall(TLI.getLibcallName(LC), Node,
-                         false/*sign irrelevant*/, Hi);
+      Lo = ExpandLibCall(LC, Node, false/*sign irrelevant*/, Hi);
     } else {
       assert(0 && "Unexpected uint-to-fp conversion!");
     }
@@ -6243,8 +6235,7 @@
     }
 
     // Otherwise, emit a libcall.
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SHL_I64), Node,
-                       false/*left shift=unsigned*/, Hi);
+    Lo = ExpandLibCall(RTLIB::SHL_I64, Node, false/*left shift=unsigned*/, Hi);
     break;
   }
 
@@ -6276,8 +6267,7 @@
     }
 
     // Otherwise, emit a libcall.
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SRA_I64), Node,
-                       true/*ashr is signed*/, Hi);
+    Lo = ExpandLibCall(RTLIB::SRA_I64, Node, true/*ashr is signed*/, Hi);
     break;
   }
 
@@ -6309,8 +6299,7 @@
     }
 
     // Otherwise, emit a libcall.
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SRL_I64), Node,
-                       false/*lshr is unsigned*/, Hi);
+    Lo = ExpandLibCall(RTLIB::SRL_I64, Node, false/*lshr is unsigned*/, Hi);
     break;
   }
 
@@ -6467,49 +6456,48 @@
     }
 
     // If nothing else, we can make a libcall.
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::MUL_I64), Node,
-                       false/*sign irrelevant*/, Hi);
+    Lo = ExpandLibCall(RTLIB::MUL_I64, Node, false/*sign irrelevant*/, Hi);
     break;
   }
   case ISD::SDIV:
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SDIV_I64), Node, true, Hi);
+    Lo = ExpandLibCall(RTLIB::SDIV_I64, Node, true, Hi);
     break;
   case ISD::UDIV:
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::UDIV_I64), Node, true, Hi);
+    Lo = ExpandLibCall(RTLIB::UDIV_I64, Node, true, Hi);
     break;
   case ISD::SREM:
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::SREM_I64), Node, true, Hi);
+    Lo = ExpandLibCall(RTLIB::SREM_I64, Node, true, Hi);
     break;
   case ISD::UREM:
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::UREM_I64), Node, true, Hi);
+    Lo = ExpandLibCall(RTLIB::UREM_I64, Node, true, Hi);
     break;
 
   case ISD::FADD:
-    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::ADD_F32,
-                                                       RTLIB::ADD_F64,
-                                                       RTLIB::ADD_F80,
-                                                       RTLIB::ADD_PPCF128)),
+    Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::ADD_F32,
+                                        RTLIB::ADD_F64,
+                                        RTLIB::ADD_F80,
+                                        RTLIB::ADD_PPCF128),
                        Node, false, Hi);
     break;
   case ISD::FSUB:
-    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::SUB_F32,
-                                                       RTLIB::SUB_F64,
-                                                       RTLIB::SUB_F80,
-                                                       RTLIB::SUB_PPCF128)),
+    Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::SUB_F32,
+                                        RTLIB::SUB_F64,
+                                        RTLIB::SUB_F80,
+                                        RTLIB::SUB_PPCF128),
                        Node, false, Hi);
     break;
   case ISD::FMUL:
-    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::MUL_F32,
-                                                       RTLIB::MUL_F64,
-                                                       RTLIB::MUL_F80,
-                                                       RTLIB::MUL_PPCF128)),
+    Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::MUL_F32,
+                                        RTLIB::MUL_F64,
+                                        RTLIB::MUL_F80,
+                                        RTLIB::MUL_PPCF128),
                        Node, false, Hi);
     break;
   case ISD::FDIV:
-    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::DIV_F32,
-                                                       RTLIB::DIV_F64,
-                                                       RTLIB::DIV_F80,
-                                                       RTLIB::DIV_PPCF128)),
+    Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::DIV_F32,
+                                        RTLIB::DIV_F64,
+                                        RTLIB::DIV_F80,
+                                        RTLIB::DIV_PPCF128),
                        Node, false, Hi);
     break;
   case ISD::FP_EXTEND:
@@ -6524,16 +6512,16 @@
       Lo = DAG.getConstantFP(APFloat(APInt(64, 1, &zero)), MVT::f64);
       break;
     }
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::FPEXT_F32_F64), Node, true,Hi);
+    Lo = ExpandLibCall(RTLIB::FPEXT_F32_F64, Node, true, Hi);
     break;
   case ISD::FP_ROUND:
-    Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::FPROUND_F64_F32),Node,true,Hi);
+    Lo = ExpandLibCall(RTLIB::FPROUND_F64_F32, Node, true, Hi);
     break;
   case ISD::FPOWI:
-    Lo = ExpandLibCall(TLI.getLibcallName(GetFPLibCall(VT, RTLIB::POWI_F32,
-                                                       RTLIB::POWI_F64,
-                                                       RTLIB::POWI_F80,
-                                                       RTLIB::POWI_PPCF128)),
+    Lo = ExpandLibCall(GetFPLibCall(VT, RTLIB::POWI_F32,
+                                        RTLIB::POWI_F64,
+                                        RTLIB::POWI_F80,
+                                        RTLIB::POWI_PPCF128),
                        Node, false, Hi);
     break;
   case ISD::FSQRT:
@@ -6555,7 +6543,7 @@
       break;
     default: assert(0 && "Unreachable!");
     }
-    Lo = ExpandLibCall(TLI.getLibcallName(LC), Node, false, Hi);
+    Lo = ExpandLibCall(LC, Node, false, Hi);
     break;
   }
   case ISD::FABS: {





More information about the llvm-commits mailing list