[llvm-commits] [llvm] r70056 - in /llvm/trunk/lib/CodeGen/SelectionDAG: LegalizeFloatTypes.cpp LegalizeTypes.cpp LegalizeTypes.h LegalizeTypesGeneric.cpp

Dan Gohman gohman at apple.com
Sat Apr 25 10:55:53 PDT 2009


Author: djg
Date: Sat Apr 25 12:55:53 2009
New Revision: 70056

URL: http://llvm.org/viewvc/llvm-project?rev=70056&view=rev
Log:
Refactor the code to grab the low and high parts of a value
using EXTRACT_ELEMENT into a utility function.

Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h
    llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp

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

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp Sat Apr 25 12:55:53 2009
@@ -860,12 +860,7 @@
                                          RTLIB::ADD_F32, RTLIB::ADD_F64,
                                          RTLIB::ADD_F80, RTLIB::ADD_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FCEIL(SDNode *N,
@@ -874,12 +869,7 @@
                                          RTLIB::CEIL_F32, RTLIB::CEIL_F64,
                                          RTLIB::CEIL_F80, RTLIB::CEIL_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FCOS(SDNode *N,
@@ -888,12 +878,7 @@
                                          RTLIB::COS_F32, RTLIB::COS_F64,
                                          RTLIB::COS_F80, RTLIB::COS_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FDIV(SDNode *N, SDValue &Lo,
@@ -906,12 +891,7 @@
                                           RTLIB::DIV_PPCF128),
                              N->getValueType(0), Ops, 2, false,
                              N->getDebugLoc());
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FEXP(SDNode *N,
@@ -920,12 +900,7 @@
                                          RTLIB::EXP_F32, RTLIB::EXP_F64,
                                          RTLIB::EXP_F80, RTLIB::EXP_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FEXP2(SDNode *N,
@@ -934,12 +909,7 @@
                                          RTLIB::EXP2_F32, RTLIB::EXP2_F64,
                                          RTLIB::EXP2_F80, RTLIB::EXP2_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FFLOOR(SDNode *N,
@@ -948,12 +918,7 @@
                                          RTLIB::FLOOR_F32,RTLIB::FLOOR_F64,
                                          RTLIB::FLOOR_F80,RTLIB::FLOOR_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FLOG(SDNode *N,
@@ -962,12 +927,7 @@
                                          RTLIB::LOG_F32, RTLIB::LOG_F64,
                                          RTLIB::LOG_F80, RTLIB::LOG_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FLOG2(SDNode *N,
@@ -976,12 +936,7 @@
                                          RTLIB::LOG2_F32, RTLIB::LOG2_F64,
                                          RTLIB::LOG2_F80, RTLIB::LOG2_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FLOG10(SDNode *N,
@@ -990,12 +945,7 @@
                                          RTLIB::LOG10_F32,RTLIB::LOG10_F64,
                                          RTLIB::LOG10_F80,RTLIB::LOG10_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FMUL(SDNode *N, SDValue &Lo,
@@ -1008,12 +958,7 @@
                                           RTLIB::MUL_PPCF128),
                              N->getValueType(0), Ops, 2, false,
                              N->getDebugLoc());
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FNEARBYINT(SDNode *N,
@@ -1024,12 +969,7 @@
                                          RTLIB::NEARBYINT_F80,
                                          RTLIB::NEARBYINT_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FNEG(SDNode *N, SDValue &Lo,
@@ -1053,12 +993,7 @@
                                          RTLIB::POW_F32, RTLIB::POW_F64,
                                          RTLIB::POW_F80, RTLIB::POW_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FPOWI(SDNode *N,
@@ -1067,12 +1002,7 @@
                                          RTLIB::POWI_F32, RTLIB::POWI_F64,
                                          RTLIB::POWI_F80, RTLIB::POWI_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FRINT(SDNode *N,
@@ -1081,12 +1011,7 @@
                                          RTLIB::RINT_F32, RTLIB::RINT_F64,
                                          RTLIB::RINT_F80, RTLIB::RINT_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FSIN(SDNode *N,
@@ -1095,12 +1020,7 @@
                                          RTLIB::SIN_F32, RTLIB::SIN_F64,
                                          RTLIB::SIN_F80, RTLIB::SIN_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FSQRT(SDNode *N,
@@ -1109,12 +1029,7 @@
                                          RTLIB::SQRT_F32, RTLIB::SQRT_F64,
                                          RTLIB::SQRT_F80, RTLIB::SQRT_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FSUB(SDNode *N, SDValue &Lo,
@@ -1127,12 +1042,7 @@
                                           RTLIB::SUB_PPCF128),
                              N->getValueType(0), Ops, 2, false,
                              N->getDebugLoc());
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_FTRUNC(SDNode *N,
@@ -1141,12 +1051,7 @@
                                          RTLIB::TRUNC_F32, RTLIB::TRUNC_F64,
                                          RTLIB::TRUNC_F80, RTLIB::TRUNC_PPCF128),
                             N, false);
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
-  DebugLoc dl = N->getDebugLoc();
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(0));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Call,
-                   DAG.getIntPtrConstant(1));
+  GetPairElements(Call, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandFloatRes_LOAD(SDNode *N, SDValue &Lo,
@@ -1214,10 +1119,7 @@
     assert(LC != RTLIB::UNKNOWN_LIBCALL && "Unsupported XINT_TO_FP!");
 
     Hi = MakeLibCall(LC, VT, &Src, 1, true, dl);
-    Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Hi,
-                     DAG.getIntPtrConstant(0));
-    Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Hi,
-                     DAG.getIntPtrConstant(1));
+    GetPairElements(Hi, Lo, Hi);
   }
 
   if (isSigned)
@@ -1252,8 +1154,7 @@
                                      MVT::ppcf128));
   Lo = DAG.getNode(ISD::SELECT_CC, dl, VT, Src, DAG.getConstant(0, SrcVT),
                    Lo, Hi, DAG.getCondCode(ISD::SETLT));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Lo, DAG.getIntPtrConstant(1));
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Lo, DAG.getIntPtrConstant(0));
+  GetPairElements(Lo, Lo, Hi);
 }
 
 

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

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Sat Apr 25 12:55:53 2009
@@ -933,6 +933,18 @@
   }
 }
 
+/// GetPairElements - Use ISD::EXTRACT_ELEMENT nodes to extract the low and
+/// high parts of the given value.
+void DAGTypeLegalizer::GetPairElements(SDValue Pair,
+                                       SDValue &Lo, SDValue &Hi) {
+  DebugLoc dl = Pair.getDebugLoc();
+  MVT NVT = TLI.getTypeToTransformTo(Pair.getValueType());
+  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Pair,
+                   DAG.getIntPtrConstant(0));
+  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Pair,
+                   DAG.getIntPtrConstant(1));
+}
+
 SDValue DAGTypeLegalizer::GetVectorElementPointer(SDValue VecPtr, MVT EltVT,
                                                   SDValue Index) {
   DebugLoc dl = Index.getDebugLoc();

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h?rev=70056&r1=70055&r2=70056&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h Sat Apr 25 12:55:53 2009
@@ -695,6 +695,10 @@
   /// which is split (or expanded) into two not necessarily identical pieces.
   void GetSplitDestVTs(MVT InVT, MVT &LoVT, MVT &HiVT);
 
+  /// GetPairElements - Use ISD::EXTRACT_ELEMENT nodes to extract the low and
+  /// high parts of the given value.
+  void GetPairElements(SDValue Pair, SDValue &Lo, SDValue &Hi);
+
   // Generic Result Splitting.
   void SplitRes_MERGE_VALUES(SDNode *N, SDValue &Lo, SDValue &Hi);
   void SplitRes_SELECT      (SDNode *N, SDValue &Lo, SDValue &Hi);

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

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp Sat Apr 25 12:55:53 2009
@@ -135,16 +135,11 @@
   GetExpandedOp(N->getOperand(0), Lo, Hi);
   SDValue Part = cast<ConstantSDNode>(N->getOperand(1))->getZExtValue() ?
                    Hi : Lo;
-  DebugLoc dl = N->getDebugLoc();
 
   assert(Part.getValueType() == N->getValueType(0) &&
          "Type twice as big as expanded type not itself expanded!");
-  MVT NVT = TLI.getTypeToTransformTo(N->getValueType(0));
 
-  Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Part,
-                   DAG.getConstant(0, TLI.getPointerTy()));
-  Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NVT, Part,
-                   DAG.getConstant(1, TLI.getPointerTy()));
+  GetPairElements(Part, Lo, Hi);
 }
 
 void DAGTypeLegalizer::ExpandRes_EXTRACT_VECTOR_ELT(SDNode *N, SDValue &Lo,





More information about the llvm-commits mailing list