[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-06-28 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.503 - 1.504
---
Log message:

Fix an assertion failure in legalizing bitcast operators on targets where
vectors are split down to single elements as part of legalization.


---
Diffs of the changes:  (+15 -23)

 LegalizeDAG.cpp |   38 +++---
 1 files changed, 15 insertions(+), 23 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.503 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.504
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.503 Wed Jun 27 11:08:04 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Jun 28 19:09:08 2007
@@ -5568,38 +5568,30 @@
   case ISD::BIT_CONVERT: {
 // We know the result is a vector.  The input may be either a vector or a
 // scalar value.
-if (!MVT::isVector(Op.getOperand(0).getValueType())) {
-  // Lower to a store/load.  FIXME: this could be improved probably.
-  SDOperand Ptr = CreateStackTemporary(Op.getOperand(0).getValueType());
+SDOperand InOp = Node-getOperand(0);
+if (!MVT::isVector(InOp.getValueType()) ||
+MVT::getVectorNumElements(InOp.getValueType()) == 1) {
+  // The input is a scalar or single-element vector.
+  // Lower to a store/load so that it can be split.
+  // FIXME: this could be improved probably.
+  SDOperand Ptr = CreateStackTemporary(InOp.getValueType());
 
   SDOperand St = DAG.getStore(DAG.getEntryNode(),
-  Op.getOperand(0), Ptr, NULL, 0);
-  St = DAG.getLoad(NewVT, St, Ptr, NULL, 0);
-  SplitVectorOp(St, Lo, Hi);
-} else {
-  // If the input is a vector type, we have to either scalarize it, pack it
-  // or convert it based on whether the input vector type is legal.
-  SDNode *InVal = Node-getOperand(0).Val;
-  unsigned NumElems = MVT::getVectorNumElements(InVal-getValueType(0));
-
-  assert(NumElems  1);
-  {
-// Split the input vector.
-SplitVectorOp(Op.getOperand(0), Lo, Hi);
-
-// Convert each of the pieces now.
-Lo = DAG.getNode(ISD::BIT_CONVERT, NewVT, Lo);
-Hi = DAG.getNode(ISD::BIT_CONVERT, NewVT, Hi);
-  }
-  break;
+  InOp, Ptr, NULL, 0);
+  InOp = DAG.getLoad(Op.getValueType(), St, Ptr, NULL, 0);
 }
+// Split the vector and convert each of the pieces now.
+SplitVectorOp(InOp, Lo, Hi);
+Lo = DAG.getNode(ISD::BIT_CONVERT, NewVT, Lo);
+Hi = DAG.getNode(ISD::BIT_CONVERT, NewVT, Hi);
+break;
   }
   }
   
   // Remember in a map if the values will be reused later.
   bool isNew = 
 SplitNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second;
-  assert(isNew  Value already expanded?!?);
+  assert(isNew  Value already split?!?);
 }
 
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-06-27 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.501 - 1.502
---
Log message:

Make the comment for ScalarizeVectorOp mention that it is only for use
with single-element vectors.


---
Diffs of the changes:  (+6 -4)

 LegalizeDAG.cpp |   10 ++
 1 files changed, 6 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.501 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.502
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.501 Mon Jun 25 11:23:39 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jun 27 09:06:22 2007
@@ -177,8 +177,9 @@
   /// two smaller values.
   void SplitVectorOp(SDOperand O, SDOperand Lo, SDOperand Hi);
   
-  /// ScalarizeVectorOp - Given an operand of vector type, convert it into the
-  /// equivalent operation that returns a scalar value.
+  /// ScalarizeVectorOp - Given an operand of single-element vector type
+  /// (e.g. v1f32), convert it into the equivalent operation that returns a
+  /// scalar (e.g. f32) value.
   SDOperand ScalarizeVectorOp(SDOperand O);
   
   /// isShuffleLegal - Return true if a vector shuffle is legal with the
@@ -5602,8 +5603,9 @@
 }
 
 
-/// ScalarizeVectorOp - Given an operand of vector type, convert it into the
-/// equivalent operation that returns a scalar (e.g. F32) value.
+/// ScalarizeVectorOp - Given an operand of single-element vector type
+/// (e.g. v1f32), convert it into the equivalent operation that returns a
+/// scalar (e.g. f32) value.
 SDOperand SelectionDAGLegalize::ScalarizeVectorOp(SDOperand Op) {
   assert(MVT::isVector(Op.getValueType()) 
  Bad ScalarizeVectorOp invocation!);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp

2007-06-27 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.502 - 1.503
SelectionDAG.cpp updated: 1.410 - 1.411
---
Log message:

Rename (shrinkify) MVT::isExtendedValueType to MVT::isExtendedVT.


---
Diffs of the changes:  (+2 -2)

 LegalizeDAG.cpp  |2 +-
 SelectionDAG.cpp |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.502 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.503
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.502 Wed Jun 27 09:06:22 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jun 27 11:08:04 2007
@@ -1714,7 +1714,7 @@
   break;
 case Expand: {
   SDOperand Lo, Hi;
-  
assert(!MVT::isExtendedValueType(Node-getOperand(i).getValueType())
+  assert(!MVT::isExtendedVT(Node-getOperand(i).getValueType()) 
  FIXME: TODO: implement returning non-legal vector types!);
   ExpandOp(Node-getOperand(i), Lo, Hi);
   NewValues.push_back(Lo);


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.410 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.411
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.410Mon Jun 25 
11:23:39 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Wed Jun 27 11:08:04 2007
@@ -2475,7 +2475,7 @@
 }
 
 SDVTList SelectionDAG::getVTList(MVT::ValueType VT) {
-  if (!MVT::isExtendedValueType(VT))
+  if (!MVT::isExtendedVT(VT))
 return makeVTList(SDNode::getValueTypeList(VT), 1);
 
   for (std::liststd::vectorMVT::ValueType ::iterator I = VTList.begin(),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp TargetLowering.cpp

2007-06-21 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.498 - 1.499
TargetLowering.cpp updated: 1.120 - 1.121
---
Log message:

Tidy up ValueType names in comments.


---
Diffs of the changes:  (+5 -5)

 LegalizeDAG.cpp|4 ++--
 TargetLowering.cpp |6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.498 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.499
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.498 Mon Jun 18 16:28:10 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Jun 21 09:48:26 2007
@@ -5649,8 +5649,8 @@
 
 
 /// PackVectorOp - Given an operand of MVT::Vector type, convert it into the
-/// equivalent operation that returns a scalar (e.g. F32) or packed value
-/// (e.g. MVT::V4F32).  When this is called, we know that PackedVT is the right
+/// equivalent operation that returns a scalar (e.g. MVT::f32) or packed value
+/// (e.g. MVT::v4f32).  When this is called, we know that PackedVT is the right
 /// type for the result.
 SDOperand SelectionDAGLegalize::PackVectorOp(SDOperand Op, 
  MVT::ValueType NewVT) {


Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.120 
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.121
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.120  Thu Jun 21 
09:42:22 2007
+++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cppThu Jun 21 09:48:26 2007
@@ -243,10 +243,10 @@
 else
   TransformToType[(MVT::ValueType)IntReg] = (MVT::ValueType)IntReg;
 
-  // If the target does not have native F64 support, expand it to I64. We will
+  // If the target does not have native f64 support, expand it to i64. We will
   // be generating soft float library calls. If the target does not have native
-  // support for F32, promote it to F64 if it is legal. Otherwise, expand it to
-  // I32.
+  // support for f32, promote it to f64 if it is legal. Otherwise, expand it to
+  // i32.
   if (isTypeLegal(MVT::f64))
 TransformToType[MVT::f64] = MVT::f64;  
   else {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

2007-06-13 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.495 - 1.496
SelectionDAG.cpp updated: 1.405 - 1.406
SelectionDAGISel.cpp updated: 1.460 - 1.461
---
Log message:

Introduce new SelectionDAG node opcodes VEXTRACT_SUBVECTOR and
VCONCAT_VECTORS. Use these for CopyToReg and CopyFromReg legalizing in
the case that the full register is to be split into subvectors instead
of scalars. This replaces uses of VBIT_CONVERT to present values as
vector-of-vector types in order to make whole subvectors accessible via
BUILD_VECTOR and EXTRACT_VECTOR_ELT.

This is in preparation for adding extended ValueType values, where
having vector-of-vector types is undesirable.


---
Diffs of the changes:  (+83 -21)

 LegalizeDAG.cpp  |   63 +++
 SelectionDAG.cpp |2 +
 SelectionDAGISel.cpp |   39 ++-
 3 files changed, 83 insertions(+), 21 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.495 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.496
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.495 Mon Jun  4 11:17:33 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jun 13 10:12:02 2007
@@ -225,6 +225,7 @@
 SDOperand Lo, SDOperand Hi);
 
   SDOperand LowerVEXTRACT_VECTOR_ELT(SDOperand Op);
+  SDOperand LowerVEXTRACT_SUBVECTOR(SDOperand Op);
   SDOperand ExpandEXTRACT_VECTOR_ELT(SDOperand Op);
   
   SDOperand getIntPtrConstant(uint64_t Val) {
@@ -1178,6 +1179,10 @@
 Result = LegalizeOp(LowerVEXTRACT_VECTOR_ELT(Op));
 break;
 
+  case ISD::VEXTRACT_SUBVECTOR: 
+Result = LegalizeOp(LowerVEXTRACT_SUBVECTOR(Op));
+break;
+
   case ISD::CALLSEQ_START: {
 SDNode *CallEnd = FindCallEndFromCallStart(Node);
 
@@ -3561,6 +3566,9 @@
   case ISD::VEXTRACT_VECTOR_ELT:
 Result = PromoteOp(LowerVEXTRACT_VECTOR_ELT(Op));
 break;
+  case ISD::VEXTRACT_SUBVECTOR:
+Result = PromoteOp(LowerVEXTRACT_SUBVECTOR(Op));
+break;
   case ISD::EXTRACT_VECTOR_ELT:
 Result = PromoteOp(ExpandEXTRACT_VECTOR_ELT(Op));
 break;
@@ -3622,6 +3630,37 @@
   }
 }
 
+/// LowerVEXTRACT_SUBVECTOR - Lower a VEXTRACT_SUBVECTOR operation.  For now
+/// we assume the operation can be split if it is not already legal.
+SDOperand SelectionDAGLegalize::LowerVEXTRACT_SUBVECTOR(SDOperand Op) {
+  // We know that operand #0 is the Vec vector.  For now we assume the index
+  // is a constant and that the extracted result is a supported hardware type.
+  SDOperand Vec = Op.getOperand(0);
+  SDOperand Idx = LegalizeOp(Op.getOperand(1));
+  
+  SDNode *InVal = Vec.Val;
+  unsigned NumElems = castConstantSDNode(*(InVal-op_end()-2))-getValue();
+  
+  if (NumElems == MVT::getVectorNumElements(Op.getValueType())) {
+// This must be an access of the desired vector length.  Return it.
+return PackVectorOp(Vec, Op.getValueType());
+  }
+
+  ConstantSDNode *CIdx = castConstantSDNode(Idx);
+  SDOperand Lo, Hi;
+  SplitVectorOp(Vec, Lo, Hi);
+  if (CIdx-getValue()  NumElems/2) {
+Vec = Lo;
+  } else {
+Vec = Hi;
+Idx = DAG.getConstant(CIdx-getValue() - NumElems/2, Idx.getValueType());
+  }
+  
+  // It's now an extract from the appropriate high or low part.  Recurse.
+  Op = DAG.UpdateNodeOperands(Op, Vec, Idx);
+  return LowerVEXTRACT_SUBVECTOR(Op);
+}
+
 /// ExpandEXTRACT_VECTOR_ELT - Expand an EXTRACT_VECTOR_ELT operation into
 /// memory traffic.
 SDOperand SelectionDAGLegalize::ExpandEXTRACT_VECTOR_ELT(SDOperand Op) {
@@ -5501,6 +5540,21 @@
 Hi = DAG.getNode(ISD::VBUILD_VECTOR, MVT::Vector, HiOps[0], HiOps.size());
 break;
   }
+  case ISD::VCONCAT_VECTORS: {
+unsigned NewNumSubvectors = (Node-getNumOperands() - 2) / 2;
+SmallVectorSDOperand, 8 LoOps(Node-op_begin(), 
+Node-op_begin()+NewNumSubvectors);
+LoOps.push_back(NewNumEltsNode);
+LoOps.push_back(TypeNode);
+Lo = DAG.getNode(ISD::VCONCAT_VECTORS, MVT::Vector, LoOps[0], 
LoOps.size());
+
+SmallVectorSDOperand, 8 HiOps(Node-op_begin()+NewNumSubvectors, 
+Node-op_end()-2);
+HiOps.push_back(NewNumEltsNode);
+HiOps.push_back(TypeNode);
+Hi = DAG.getNode(ISD::VCONCAT_VECTORS, MVT::Vector, HiOps[0], 
HiOps.size());
+break;
+  }
   case ISD::VADD:
   case ISD::VSUB:
   case ISD::VMUL:
@@ -5655,6 +5709,11 @@
   }
 }
 break;
+  case ISD::VCONCAT_VECTORS:
+assert(Node-getOperand(0).getValueType() == NewVT 
+   Concat of non-legal vectors not yet supported!);
+Result = Node-getOperand(0);
+break;
   case ISD::VINSERT_VECTOR_ELT:
 if (!MVT::isVector(NewVT)) {
   // Returning a scalar?  Must be the inserted element.
@@ -5665,6 +5724,10 @@
Node-getOperand(1), Node-getOperand(2));
 }
 break;
+  case ISD::VEXTRACT_SUBVECTOR:
+Result = 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-06-04 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.494 - 1.495
---
Log message:

Pass the DAG to SDNode::dump to let it do more detailed dumps in some cases.


---
Diffs of the changes:  (+5 -5)

 LegalizeDAG.cpp |   10 +-
 1 files changed, 5 insertions(+), 5 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.494 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.495
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.494 Fri May 18 12:52:13 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Jun  4 11:17:33 2007
@@ -648,7 +648,7 @@
 }
 // Otherwise this is an unhandled builtin node.  splat.
 #ifndef NDEBUG
-cerr  NODE: ; Node-dump(); cerr  \n;
+cerr  NODE: ; Node-dump(DAG); cerr  \n;
 #endif
 assert(0  Do not know how to legalize this operator!);
 abort();
@@ -3181,7 +3181,7 @@
 assert(0  CopyFromReg must be legal!);
   default:
 #ifndef NDEBUG
-cerr  NODE: ; Node-dump(); cerr  \n;
+cerr  NODE: ; Node-dump(DAG); cerr  \n;
 #endif
 assert(0  Do not know how to promote this operator!);
 abort();
@@ -4721,7 +4721,7 @@
 assert(0  CopyFromReg must be legal!);
   default:
 #ifndef NDEBUG
-cerr  NODE: ; Node-dump(); cerr  \n;
+cerr  NODE: ; Node-dump(DAG); cerr  \n;
 #endif
 assert(0  Do not know how to expand this operator!);
 abort();
@@ -5484,7 +5484,7 @@
   switch (Node-getOpcode()) {
   default: 
 #ifndef NDEBUG
-Node-dump();
+Node-dump(DAG);
 #endif
 assert(0  Unhandled operation in SplitVectorOp!);
   case ISD::VBUILD_VECTOR: {
@@ -5606,7 +5606,7 @@
   switch (Node-getOpcode()) {
   default: 
 #ifndef NDEBUG
-Node-dump(); cerr  \n;
+Node-dump(DAG); cerr  \n;
 #endif
 assert(0  Unknown vector operation in PackVectorOp!);
   case ISD::VADD:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp SelectionDAGPrinter.cpp TargetLowering.cpp

2007-05-18 Thread Dan Gohman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.493 - 1.494
SelectionDAGISel.cpp updated: 1.451 - 1.452
SelectionDAGPrinter.cpp updated: 1.45 - 1.46
TargetLowering.cpp updated: 1.115 - 1.116
---
Log message:

Qualify several calls to functions in the MVT namespace, for consistency.


---
Diffs of the changes:  (+25 -23)

 LegalizeDAG.cpp |   28 +++-
 SelectionDAGISel.cpp|   14 +++---
 SelectionDAGPrinter.cpp |2 +-
 TargetLowering.cpp  |4 ++--
 4 files changed, 25 insertions(+), 23 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.493 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.494
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.493 Thu May 17 13:15:41 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri May 18 12:52:13 2007
@@ -2722,7 +2722,7 @@
 case TargetLowering::Promote: {
   MVT::ValueType OVT = Tmp1.getValueType();
   MVT::ValueType NVT = TLI.getTypeToPromoteTo(Node-getOpcode(), OVT);
-  unsigned DiffBits = getSizeInBits(NVT) - getSizeInBits(OVT);
+  unsigned DiffBits = MVT::getSizeInBits(NVT) - MVT::getSizeInBits(OVT);
 
   Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1);
   Tmp1 = DAG.getNode(ISD::BSWAP, NVT, Tmp1);
@@ -2760,16 +2760,16 @@
   case ISD::CTTZ:
 //if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT)
 Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), Tmp1,
-DAG.getConstant(getSizeInBits(NVT), NVT),
+DAG.getConstant(MVT::getSizeInBits(NVT), NVT),
 ISD::SETEQ);
 Result = DAG.getNode(ISD::SELECT, NVT, Tmp2,
-   DAG.getConstant(getSizeInBits(OVT),NVT), Tmp1);
+   DAG.getConstant(MVT::getSizeInBits(OVT),NVT), Tmp1);
 break;
   case ISD::CTLZ:
 // Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))
 Result = DAG.getNode(ISD::SUB, NVT, Tmp1,
- DAG.getConstant(getSizeInBits(NVT) -
- getSizeInBits(OVT), NVT));
+ DAG.getConstant(MVT::getSizeInBits(NVT) -
+ MVT::getSizeInBits(OVT), NVT));
 break;
   }
   break;
@@ -3527,7 +3527,8 @@
 Tmp1 = DAG.getNode(ISD::ZERO_EXTEND, NVT, Tmp1);
 Tmp1 = DAG.getNode(ISD::BSWAP, NVT, Tmp1);
 Result = DAG.getNode(ISD::SRL, NVT, Tmp1,
- DAG.getConstant(getSizeInBits(NVT) - 
getSizeInBits(VT),
+ DAG.getConstant(MVT::getSizeInBits(NVT) -
+ MVT::getSizeInBits(VT),
  TLI.getShiftAmountTy()));
 break;
   case ISD::CTPOP:
@@ -3544,15 +3545,16 @@
 case ISD::CTTZ:
   // if Tmp1 == sizeinbits(NVT) then Tmp1 = sizeinbits(Old VT)
   Tmp2 = DAG.getSetCC(TLI.getSetCCResultTy(), Tmp1,
-  DAG.getConstant(getSizeInBits(NVT), NVT), 
ISD::SETEQ);
+  DAG.getConstant(MVT::getSizeInBits(NVT), NVT),
+  ISD::SETEQ);
   Result = DAG.getNode(ISD::SELECT, NVT, Tmp2,
-   DAG.getConstant(getSizeInBits(VT), NVT), Tmp1);
+   DAG.getConstant(MVT::getSizeInBits(VT), NVT), Tmp1);
   break;
 case ISD::CTLZ:
   //Tmp1 = Tmp1 - (sizeinbits(NVT) - sizeinbits(Old VT))
   Result = DAG.getNode(ISD::SUB, NVT, Tmp1,
-   DAG.getConstant(getSizeInBits(NVT) -
-   getSizeInBits(VT), NVT));
+   DAG.getConstant(MVT::getSizeInBits(NVT) -
+   MVT::getSizeInBits(VT), NVT));
   break;
 }
 break;
@@ -4639,7 +4641,7 @@
 };
 MVT::ValueType VT = Op.getValueType();
 MVT::ValueType ShVT = TLI.getShiftAmountTy();
-unsigned len = getSizeInBits(VT);
+unsigned len = MVT::getSizeInBits(VT);
 for (unsigned i = 0; (1U  i) = (len / 2); ++i) {
   //x = (x  mask[i][len/8]) + (x  (1  i)  mask[i][len/8])
   SDOperand Tmp2 = DAG.getConstant(mask[i], VT);
@@ -4662,7 +4664,7 @@
 // but see also: http://www.hackersdelight.org/HDcode/nlz.cc
 MVT::ValueType VT = Op.getValueType();
 MVT::ValueType ShVT = TLI.getShiftAmountTy();
-unsigned len = getSizeInBits(VT);
+unsigned len = MVT::getSizeInBits(VT);
 for (unsigned i = 0; (1U  i) = (len / 2); ++i) {
   SDOperand Tmp3 = DAG.getConstant(1ULL  i, ShVT);
   Op = DAG.getNode(ISD::OR, VT, Op, DAG.getNode(ISD::SRL, VT, Op, Tmp3));
@@ -4684,7 +4686,7 @@
 if (!TLI.isOperationLegal(ISD::CTPOP, VT) 
 TLI.isOperationLegal(ISD::CTLZ, VT))
   return DAG.getNode(ISD::SUB, VT,
- DAG.getConstant(getSizeInBits(VT), VT),
+

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-05-17 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.492 - 1.493
---
Log message:

add expand support for ADDC/SUBC/ADDE/SUBE so we can codegen 128-bit add/sub on 
32-bit (or less) targets


---
Diffs of the changes:  (+42 -0)

 LegalizeDAG.cpp |   42 ++
 1 files changed, 42 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.493
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492 Sat May  5 14:39:05 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu May 17 13:15:41 2007
@@ -5222,6 +5222,48 @@
 }
 break;
   }
+
+  case ISD::ADDC:
+  case ISD::SUBC: {
+// Expand the subcomponents.
+SDOperand LHSL, LHSH, RHSL, RHSH;
+ExpandOp(Node-getOperand(0), LHSL, LHSH);
+ExpandOp(Node-getOperand(1), RHSL, RHSH);
+SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag);
+SDOperand LoOps[2] = { LHSL, RHSL };
+SDOperand HiOps[3] = { LHSH, RHSH };
+
+if (Node-getOpcode() == ISD::ADDC) {
+  Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2);
+  HiOps[2] = Lo.getValue(1);
+  Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3);
+} else {
+  Lo = DAG.getNode(ISD::SUBC, VTList, LoOps, 2);
+  HiOps[2] = Lo.getValue(1);
+  Hi = DAG.getNode(ISD::SUBE, VTList, HiOps, 3);
+}
+// Remember that we legalized the flag.
+AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1)));
+break;
+  }
+  case ISD::ADDE:
+  case ISD::SUBE: {
+// Expand the subcomponents.
+SDOperand LHSL, LHSH, RHSL, RHSH;
+ExpandOp(Node-getOperand(0), LHSL, LHSH);
+ExpandOp(Node-getOperand(1), RHSL, RHSH);
+SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag);
+SDOperand LoOps[3] = { LHSL, RHSL, Node-getOperand(2) };
+SDOperand HiOps[3] = { LHSH, RHSH };
+
+Lo = DAG.getNode(Node-getOpcode(), VTList, LoOps, 3);
+HiOps[2] = Lo.getValue(1);
+Hi = DAG.getNode(Node-getOpcode(), VTList, HiOps, 3);
+
+// Remember that we legalized the flag.
+AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1)));
+break;
+  }
   case ISD::MUL: {
 // If the target wants to custom expand this, let them.
 if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-05-05 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.491 - 1.492
---
Log message:

Propagate alignment/volatility in two places.

Implement support for expanding a bitcast from an illegal vector type to
a legal one (e.g. 4xi32 - 4xf32 in SSE1).  This fixes PR1371: 
http://llvm.org/PR1371  and
CodeGen/X86/2007-05-05-VecCastExpand.ll


---
Diffs of the changes:  (+16 -4)

 LegalizeDAG.cpp |   20 
 1 files changed, 16 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.491 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.491 Sat Apr 28 01:42:38 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat May  5 14:39:05 2007
@@ -1881,7 +1881,8 @@
 }
 
 Lo = DAG.getStore(Tmp1, Lo, Tmp2, ST-getSrcValue(),
-  ST-getSrcValueOffset());
+  ST-getSrcValueOffset(), ST-isVolatile(),
+  ST-getAlignment());
 
 if (Hi.Val == NULL) {
   // Must be int - float one-to-one expansion.
@@ -1896,7 +1897,8 @@
 // FIXME: This sets the srcvalue of both halves to be the same, which 
is
 // wrong.
 Hi = DAG.getStore(Tmp1, Hi, Tmp2, ST-getSrcValue(),
-  ST-getSrcValueOffset());
+  ST-getSrcValueOffset(), ST-isVolatile(),
+  std::min(ST-getAlignment(), IncrementSize));
 Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Lo, Hi);
 break;
   }
@@ -5667,8 +5669,18 @@
  PackVectorOp(Node-getOperand(0), EVT));
 break;
   } else {
-// FIXME: UNIMP!
-assert(0  Cast from unsupported vector type not implemented yet!);
+// If the input vector type isn't legal, then go through memory.
+SDOperand Ptr = CreateStackTemporary(NewVT);
+// Get the alignment for the store.
+const TargetData TD = *TLI.getTargetData();
+unsigned Align = 
+  TD.getABITypeAlignment(MVT::getTypeForValueType(NewVT));
+
+SDOperand St = DAG.getStore(DAG.getEntryNode(),
+Node-getOperand(0), Ptr, NULL, 0, false,
+Align);
+Result = DAG.getLoad(NewVT, St, Ptr, 0, 0);
+break;
   }
 }
 break;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-04-28 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.490 - 1.491
SelectionDAGISel.cpp updated: 1.433 - 1.434
---
Log message:

memory inputs to an inline asm are required to have an address available.
If the operand is not already an indirect operand, spill it to a constant
pool entry or a stack slot.

This fixes PR1356: http://llvm.org/PR1356  and 
CodeGen/X86/2007-04-27-InlineAsm-IntMemInput.ll


---
Diffs of the changes:  (+34 -20)

 LegalizeDAG.cpp  |4 ++--
 SelectionDAGISel.cpp |   50 --
 2 files changed, 34 insertions(+), 20 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.490 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.491
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.490 Fri Apr 27 12:12:52 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Apr 28 01:42:38 2007
@@ -3123,11 +3123,11 @@
 // slots and always reusing the same one.  We currently always create
 // new ones, as reuse may inhibit scheduling.
 const Type *Ty = MVT::getTypeForValueType(ExtraVT);
-unsigned TySize = (unsigned)TLI.getTargetData()-getTypeSize(Ty);
+uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
 unsigned Align  = TLI.getTargetData()-getPrefTypeAlignment(Ty);
 MachineFunction MF = DAG.getMachineFunction();
 int SSFI =
-  MF.getFrameInfo()-CreateStackObject((unsigned)TySize, Align);
+  MF.getFrameInfo()-CreateStackObject(TySize, Align);
 SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
 Result = DAG.getTruncStore(DAG.getEntryNode(), Node-getOperand(0),
StackSlot, NULL, 0, ExtraVT);


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.433 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.434
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.433Sat Apr 28 
01:08:13 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sat Apr 28 01:42:38 2007
@@ -3397,6 +3397,9 @@
 CTy = TLI.getConstraintType(ConstraintCode);
 
   if (CTy == TargetLowering::C_Other) {
+assert(!Constraints[i].isIndirect  
+   Don't know how to handle indirect other inputs yet!);
+
 InOperandVal = TLI.isOperandValidForConstraint(InOperandVal,
ConstraintCode[0], DAG);
 if (!InOperandVal.Val) {
@@ -3411,26 +3414,35 @@
 AsmNodeOperands.push_back(InOperandVal);
 break;
   } else if (CTy == TargetLowering::C_Memory) {
-// Memory input.
-
-// If the operand is a float, spill to a constant pool entry to get its
-// address.
-if (ConstantFP *Val = dyn_castConstantFP(I.getOperand(OpNum-1)))
-  InOperandVal = DAG.getConstantPool(Val, TLI.getPointerTy());
-
-if (!MVT::isInteger(InOperandVal.getValueType())) {
-  cerr  Match failed, cannot handle this yet!\n;
-  InOperandVal.Val-dump();
-  exit(1);
+// Memory input.  Memory operands really want the address of the value,
+// so we want an indirect input.  If we don't have an indirect input,
+// spill the value somewhere if we can, otherwise spill it to a stack
+// slot.
+if (!Constraints[i].isIndirect) {
+  // If the operand is a float, integer, or vector constant, spill to a
+  // constant pool entry to get its address.
+  Value *OpVal = I.getOperand(OpNum-1);
+  if (isaConstantFP(OpVal) || isaConstantInt(OpVal) ||
+  isaConstantVector(OpVal)) {
+InOperandVal = DAG.getConstantPool(castConstant(OpVal),
+   TLI.getPointerTy());
+  } else {
+// Otherwise, create a stack slot and emit a store to it before the
+// asm.
+const Type *Ty = OpVal-getType();
+uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
+unsigned Align  = TLI.getTargetData()-getPrefTypeAlignment(Ty);
+MachineFunction MF = DAG.getMachineFunction();
+int SSFI = MF.getFrameInfo()-CreateStackObject(TySize, Align);
+SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
+Chain = DAG.getStore(Chain, InOperandVal, StackSlot, NULL, 0);
+InOperandVal = StackSlot;
+  }
 }
 
-// Extend/truncate to the right pointer type if needed.
-MVT::ValueType PtrType = TLI.getPointerTy();
-if (InOperandVal.getValueType()  PtrType)
-  InOperandVal = DAG.getNode(ISD::ZERO_EXTEND, PtrType, InOperandVal);
-else if (InOperandVal.getValueType()  PtrType)
-  InOperandVal = DAG.getNode(ISD::TRUNCATE, 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-04-27 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.488 - 1.489
---
Log message:

Expand UINT_TO_FP in turns of SINT_TO_FP when UINTTOFP_* libcalls are not 
available.

---
Diffs of the changes:  (+25 -4)

 LegalizeDAG.cpp |   29 +
 1 files changed, 25 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.488 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.489
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.488 Fri Apr 20 18:02:39 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Apr 27 02:33:31 2007
@@ -4270,11 +4270,10 @@
 }
 
 
-/// ExpandIntToFP - Expand a [US]INT_TO_FP operation, assuming that the
-/// destination type is legal.
+/// ExpandIntToFP - Expand a [US]INT_TO_FP operation.
+///
 SDOperand SelectionDAGLegalize::
 ExpandIntToFP(bool isSigned, MVT::ValueType DestTy, SDOperand Source) {
-  assert(isTypeLegal(DestTy)  Destination type is not legal!);
   assert(getTypeAction(Source.getValueType()) == Expand 
  This is not an expansion!);
   assert(Source.getValueType() == MVT::i64  Only handle expand from i64!);
@@ -4310,9 +4309,21 @@
   FudgeInReg = DAG.getLoad(MVT::f32, DAG.getEntryNode(), CPIdx, NULL, 0);
 else {
   assert(DestTy == MVT::f64  Unexpected conversion);
+  // FIXME: Avoid the extend by construction the right constantpool?
   FudgeInReg = DAG.getExtLoad(ISD::EXTLOAD, MVT::f64, DAG.getEntryNode(),
   CPIdx, NULL, 0, MVT::f32);
 }
+MVT::ValueType SCVT = SignedConv.getValueType();
+if (SCVT != DestTy) {
+  // Destination type needs to be expanded as well. The FADD now we are
+  // constructing will be expanded into a libcall.
+  if (MVT::getSizeInBits(SCVT) != MVT::getSizeInBits(DestTy)) {
+assert(SCVT == MVT::i32  DestTy == MVT::f64);
+SignedConv = DAG.getNode(ISD::BUILD_PAIR, MVT::i64,
+ SignedConv, SignedConv.getValue(1));
+  }
+  SignedConv = DAG.getNode(ISD::BIT_CONVERT, DestTy, SignedConv);
+}
 return DAG.getNode(ISD::FADD, DestTy, SignedConv, FudgeInReg);
   }
 
@@ -4345,6 +4356,7 @@
 LC = RTLIB::SINTTOFP_I64_F64;
   }
   
+  assert(TLI.getLibcallName(LC)  Don't know how to expand this 
SINT_TO_FP!);
   Source = DAG.getNode(ISD::SINT_TO_FP, DestTy, Source);
   SDOperand UnusedHiPart;
   return ExpandLibCall(TLI.getLibcallName(LC), Source.Val, isSigned,
@@ -5370,7 +5382,16 @@
 : DAG.getZeroExtendInReg(Tmp, SrcVT);
   Node = DAG.UpdateNodeOperands(Op, Tmp).Val;
 }
-Lo = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Hi);
+
+const char *LibCall = TLI.getLibcallName(LC);
+if (LibCall)
+  Lo = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, Hi);
+else  {
+  Lo = ExpandIntToFP(Node-getOpcode() == ISD::SINT_TO_FP, VT,
+ Node-getOperand(0));
+  if (getTypeAction(Lo.getValueType()) == Expand)
+ExpandOp(Lo, Lo, Hi);
+}
 break;
   }
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-04-27 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.489 - 1.490
---
Log message:

Fix incorrect legalization of EHSELECTOR.  This fixes
CodeGen/Generic/2007-04-14-EHSelectorCrash.ll and PR1326: 
http://llvm.org/PR1326 


---
Diffs of the changes:  (+10 -6)

 LegalizeDAG.cpp |   16 ++--
 1 files changed, 10 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.489 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.490
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.489 Fri Apr 27 02:33:31 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Apr 27 12:12:52 2007
@@ -692,12 +692,14 @@
   Result = TLI.LowerOperation(Op, DAG);
   if (Result.Val) break;
   // Fall Thru
-case TargetLowering::Legal:
-  Result = DAG.getNode(ISD::MERGE_VALUES, VT, DAG.getConstant(0, VT), 
Tmp1).
-  getValue(Op.ResNo);
+case TargetLowering::Legal: {
+  SDOperand Ops[] = { DAG.getConstant(0, VT), Tmp1 };
+  Result = DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other),
+   Ops, 2).getValue(Op.ResNo);
   break;
 }
 }
+}
 break;
   case ISD::EHSELECTION: {
 Tmp1 = LegalizeOp(Node-getOperand(0));
@@ -714,12 +716,14 @@
   Result = TLI.LowerOperation(Op, DAG);
   if (Result.Val) break;
   // Fall Thru
-case TargetLowering::Legal:
-  Result = DAG.getNode(ISD::MERGE_VALUES, VT, DAG.getConstant(0, VT), 
Tmp2).
-  getValue(Op.ResNo);
+case TargetLowering::Legal: {
+  SDOperand Ops[] = { DAG.getConstant(0, VT), Tmp2 };
+  Result = DAG.getNode(ISD::MERGE_VALUES, DAG.getVTList(VT, MVT::Other),
+   Ops, 2).getValue(Op.ResNo);
   break;
 }
 }
+}
 break;
   case ISD::AssertSext:
   case ISD::AssertZext:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp

2007-04-20 Thread Lauro Ramos Venancio


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.486 - 1.487
SelectionDAG.cpp updated: 1.397 - 1.398
---
Log message:

Implement general dynamic, initial exec and local exec TLS models for
X86 32 bits.


---
Diffs of the changes:  (+22 -2)

 LegalizeDAG.cpp  |2 ++
 SelectionDAG.cpp |   22 --
 2 files changed, 22 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.486 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.487
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.486 Mon Apr  2 16:36:32 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Apr 20 16:38:10 2007
@@ -622,6 +622,7 @@
   case ISD::TargetConstantFP:
   case ISD::TargetConstantPool:
   case ISD::TargetGlobalAddress:
+  case ISD::TargetGlobalTLSAddress:
   case ISD::TargetExternalSymbol:
   case ISD::VALUETYPE:
   case ISD::SRCVALUE:
@@ -653,6 +654,7 @@
 assert(0  Do not know how to legalize this operator!);
 abort();
   case ISD::GlobalAddress:
+  case ISD::GlobalTLSAddress:
   case ISD::ExternalSymbol:
   case ISD::ConstantPool:
   case ISD::JumpTable: // Nothing to do.


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.397 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.398
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.397Thu Apr 12 
00:58:43 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Fri Apr 20 16:38:10 2007
@@ -14,6 +14,7 @@
 #include llvm/CodeGen/SelectionDAG.h
 #include llvm/Constants.h
 #include llvm/GlobalValue.h
+#include llvm/GlobalVariable.h
 #include llvm/Intrinsics.h
 #include llvm/Assembly/Writer.h
 #include llvm/CodeGen/MachineBasicBlock.h
@@ -296,7 +297,9 @@
 ID.AddDouble(castConstantFPSDNode(N)-getValue());
 break;
   case ISD::TargetGlobalAddress:
-  case ISD::GlobalAddress: {
+  case ISD::GlobalAddress:
+  case ISD::TargetGlobalTLSAddress:
+  case ISD::GlobalTLSAddress: {
 GlobalAddressSDNode *GA = castGlobalAddressSDNode(N);
 ID.AddPointer(GA-getGlobal());
 ID.AddInteger(GA-getOffset());
@@ -692,7 +695,12 @@
 SDOperand SelectionDAG::getGlobalAddress(const GlobalValue *GV,
  MVT::ValueType VT, int Offset,
  bool isTargetGA) {
-  unsigned Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
+  const GlobalVariable *GVar = dyn_castGlobalVariable(GV);
+  unsigned Opc;
+  if (GVar  GVar-isThreadLocal())
+Opc = isTargetGA ? ISD::TargetGlobalTLSAddress : ISD::GlobalTLSAddress;
+  else
+Opc = isTargetGA ? ISD::TargetGlobalAddress : ISD::GlobalAddress;
   FoldingSetNodeID ID;
   AddNodeIDNode(ID, Opc, getVTList(VT), 0, 0);
   ID.AddPointer(GV);
@@ -2282,6 +2290,14 @@
   SDOperand Ops[] = { Op1, Op2 };
   return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 2).Val;
 }
+SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1,
+MVT::ValueType VT2, MVT::ValueType VT3,
+SDOperand Op1, SDOperand Op2,
+SDOperand Op3) {
+  const MVT::ValueType *VTs = getNodeValueTypes(VT1, VT2, VT3);
+  SDOperand Ops[] = { Op1, Op2, Op3 };
+  return getNode(ISD::BUILTIN_OP_END+Opcode, VTs, 3, Ops, 3).Val;
+}
 SDNode *SelectionDAG::getTargetNode(unsigned Opcode, MVT::ValueType VT1, 
 MVT::ValueType VT2, MVT::ValueType VT3,
 const SDOperand *Ops, unsigned NumOps) {
@@ -2702,6 +2718,7 @@
   case ISD::Constant:  return Constant;
   case ISD::ConstantFP:return ConstantFP;
   case ISD::GlobalAddress: return GlobalAddress;
+  case ISD::GlobalTLSAddress: return GlobalTLSAddress;
   case ISD::FrameIndex:return FrameIndex;
   case ISD::JumpTable: return JumpTable;
   case ISD::GLOBAL_OFFSET_TABLE: return GLOBAL_OFFSET_TABLE;
@@ -2725,6 +2742,7 @@
   case ISD::TargetConstant: return TargetConstant;
   case ISD::TargetConstantFP:return TargetConstantFP;
   case ISD::TargetGlobalAddress: return TargetGlobalAddress;
+  case ISD::TargetGlobalTLSAddress: return TargetGlobalTLSAddress;
   case ISD::TargetFrameIndex: return TargetFrameIndex;
   case ISD::TargetJumpTable:  return TargetJumpTable;
   case ISD::TargetConstantPool:  return TargetConstantPool;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-04-20 Thread Lauro Ramos Venancio


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.487 - 1.488
---
Log message:

Allow the lowering of ISD::GLOBAL_OFFSET_TABLE.


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.487 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.488
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.487 Fri Apr 20 16:38:10 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Apr 20 18:02:39 2007
@@ -628,7 +628,6 @@
   case ISD::SRCVALUE:
   case ISD::STRING:
   case ISD::CONDCODE:
-  case ISD::GLOBAL_OFFSET_TABLE:
 // Primitives must all be legal.
 assert(TLI.isOperationLegal(Node-getValueType(0), Node-getValueType(0)) 

This must be legal!);
@@ -653,6 +652,7 @@
 #endif
 assert(0  Do not know how to legalize this operator!);
 abort();
+  case ISD::GLOBAL_OFFSET_TABLE:
   case ISD::GlobalAddress:
   case ISD::GlobalTLSAddress:
   case ISD::ExternalSymbol:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


Re: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp

2007-04-20 Thread Chris Lattner
 @@ -14,6 +14,7 @@
  #include llvm/CodeGen/SelectionDAG.h
  #include llvm/Constants.h
  #include llvm/GlobalValue.h
 +#include llvm/GlobalVariable.h

Please drop the #include of GlobalValue since GlobalVariable.h brings  
it in.

-Chris
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-03-24 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.484 - 1.485
---
Log message:

don't rely on ADL


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.484 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.485
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.484 Wed Mar  7 10:25:08 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Mar 24 12:37:03 2007
@@ -484,7 +484,7 @@
   unsigned NumElements =
 castConstantSDNode(N-getOperand(NumOps-2))-getValue();
   MVT::ValueType EVT = castVTSDNode(N-getOperand(NumOps-1))-getVT();
-  MVT::ValueType PackedVT = getVectorType(EVT, NumElements);
+  MVT::ValueType PackedVT = MVT::getVectorType(EVT, NumElements);
   if (PackedVT != MVT::Other  TLI.isTypeLegal(PackedVT)) {
 // In the common case, this is a legal vector type, convert it to the
 // packed operation and type now.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-03-07 Thread Anton Korobeynikov


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.483 - 1.484
SelectionDAGISel.cpp updated: 1.381 - 1.382
---
Log message:

Refactoring of formal parameter flags. Enable properly use of 
zext/sext/aext stuff.


---
Diffs of the changes:  (+31 -31)

 LegalizeDAG.cpp  |   11 ---
 SelectionDAGISel.cpp |   51 +++
 2 files changed, 31 insertions(+), 31 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.483 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.484
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.483 Tue Mar  6 14:01:06 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Mar  7 10:25:08 2007
@@ -2242,8 +2242,7 @@
 
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
-Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty = IntPtrTy;
-Entry.isInReg = false; Entry.isSRet = false;
+Entry.Node = Tmp2; Entry.Ty = IntPtrTy;
 Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
@@ -2251,17 +2250,15 @@
   Tmp3 = DAG.getNode(ISD::TRUNCATE, MVT::i32, Tmp3);
 else
   Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
-Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSigned = true;
-Entry.isInReg = false; Entry.isSRet = false;
+Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSExt = true;
 Args.push_back(Entry);
-Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSExt = false;
 Args.push_back(Entry);
 
 FnName = memset;
   } else if (Node-getOpcode() == ISD::MEMCPY ||
  Node-getOpcode() == ISD::MEMMOVE) {
 Entry.Ty = IntPtrTy;
-Entry.isSigned = false; Entry.isInReg = false; Entry.isSRet = false;
 Entry.Node = Tmp2; Args.push_back(Entry);
 Entry.Node = Tmp3; Args.push_back(Entry);
 Entry.Node = Tmp4; Args.push_back(Entry);
@@ -4228,7 +4225,7 @@
 MVT::ValueType ArgVT = Node-getOperand(i).getValueType();
 const Type *ArgTy = MVT::getTypeForValueType(ArgVT);
 Entry.Node = Node-getOperand(i); Entry.Ty = ArgTy; 
-Entry.isSigned = isSigned; Entry.isInReg = false; Entry.isSRet = false;
+Entry.isSExt = isSigned;
 Args.push_back(Entry);
   }
   SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy());


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.381 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.382
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.381Tue Mar  6 
00:10:33 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Mar  7 10:25:08 2007
@@ -2279,7 +2279,8 @@
 Value *Arg = I.getOperand(i);
 SDOperand ArgNode = getValue(Arg);
 Entry.Node = ArgNode; Entry.Ty = Arg-getType();
-Entry.isSigned = FTy-paramHasAttr(i, FunctionType::SExtAttribute);
+Entry.isSExt   = FTy-paramHasAttr(i, FunctionType::SExtAttribute);
+Entry.isZExt   = FTy-paramHasAttr(i, FunctionType::ZExtAttribute);
 Entry.isInReg  = FTy-paramHasAttr(i, FunctionType::InRegAttribute);
 Entry.isSRet   = FTy-paramHasAttr(i, FunctionType::StructRetAttribute);
 Args.push_back(Entry);
@@ -2983,9 +2984,6 @@
   TargetLowering::ArgListEntry Entry;
   Entry.Node = Src;
   Entry.Ty = TLI.getTargetData()-getIntPtrType();
-  Entry.isSigned = false;
-  Entry.isInReg = false;
-  Entry.isSRet = false;
   Args.push_back(Entry);
 
   std::pairSDOperand,SDOperand Result =
@@ -3001,9 +2999,6 @@
   TargetLowering::ArgListEntry Entry;
   Entry.Node = getValue(I.getOperand(0));
   Entry.Ty = TLI.getTargetData()-getIntPtrType();
-  Entry.isSigned = false;
-  Entry.isInReg = false;
-  Entry.isSRet = false;
   Args.push_back(Entry);
   MVT::ValueType IntPtr = TLI.getPointerTy();
   std::pairSDOperand,SDOperand Result =
@@ -3099,21 +3094,21 @@
   for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
I != E; ++I, ++j) {
 MVT::ValueType VT = getValueType(I-getType());
-unsigned Flags = SDISelParamFlags::NoFlagSet;
+unsigned Flags = ISD::ParamFlags::NoFlagSet;
 unsigned OriginalAlignment =
   getTargetData()-getABITypeAlignment(I-getType());
 
 // FIXME: Distinguish between a formal with no [sz]ext attribute from one
 // that is zero extended!
 if (FTy-paramHasAttr(j, FunctionType::ZExtAttribute))
-  Flags = ~(SDISelParamFlags::Signed);
+  Flags = ~(ISD::ParamFlags::SExt);
 if (FTy-paramHasAttr(j, FunctionType::SExtAttribute))
-  Flags |= SDISelParamFlags::Signed;
+  Flags |= ISD::ParamFlags::SExt;
 if (FTy-paramHasAttr(j, FunctionType::InRegAttribute))
-  Flags |= SDISelParamFlags::InReg;
+  Flags |= 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-03-06 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.482 - 1.483
---
Log message:

big endian 32-bit systems (e.g. ppc32) want to return the high reg first, not
the lo-reg first.  This is fallout from my ppc calling conv change yesterday,
it fixes test/ExecutionEngine/2003-05-06-LivenessClobber.llx



---
Diffs of the changes:  (+5 -0)

 LegalizeDAG.cpp |5 +
 1 files changed, 5 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.482 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.483
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.482 Sat Mar  3 17:43:21 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Mar  6 14:01:06 2007
@@ -1675,6 +1675,11 @@
 if (Tmp2.getValueType() != MVT::Vector) {
   SDOperand Lo, Hi;
   ExpandOp(Tmp2, Lo, Hi);
+
+  // Big endian systems want the hi reg first.
+  if (!TLI.isLittleEndian())
+std::swap(Lo, Hi);
+  
   if (Hi.Val)
 Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, 
Hi,Tmp3);
   else



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-03-03 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.480 - 1.481
---
Log message:

Add an expand action for ISD label which just deletes the label.
This fixes PR1238: http://llvm.org/PR1238 .


---
Diffs of the changes:  (+3 -0)

 LegalizeDAG.cpp |3 +++
 1 files changed, 3 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.480 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.481
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.480 Wed Feb 28 14:43:58 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Mar  3 13:21:38 2007
@@ -879,6 +879,9 @@
   Tmp2 = LegalizeOp(Node-getOperand(1));  // Legalize the label id.
   Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
   break;
+case TargetLowering::Expand:
+  Result = LegalizeOp(Node-getOperand(0));
+  break;
 }
 break;
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-28 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.479 - 1.480
---
Log message:

Chain is on second operand.

---
Diffs of the changes:  (+23 -4)

 LegalizeDAG.cpp |   27 +++
 1 files changed, 23 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.479 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.480
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.479 Sat Feb 24 03:44:17 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Feb 28 14:43:58 2007
@@ -676,16 +676,13 @@
 else
   Result = DAG.getConstant(0, TLI.getPointerTy());
 break;
-  case ISD::EHSELECTION:
   case ISD::EXCEPTIONADDR: {
 Tmp1 = LegalizeOp(Node-getOperand(0));
 MVT::ValueType VT = Node-getValueType(0);
 switch (TLI.getOperationAction(Node-getOpcode(), VT)) {
 default: assert(0  This action is not supported yet!);
 case TargetLowering::Expand: {
-unsigned Reg = Node-getOpcode() == ISD::EXCEPTIONADDR ?
-  TLI.getExceptionAddressRegister() :
-  TLI.getExceptionSelectorRegister();
+unsigned Reg = TLI.getExceptionAddressRegister();
 Result = DAG.getCopyFromReg(Tmp1, Reg, VT).getValue(Op.ResNo);
   }
   break;
@@ -700,6 +697,28 @@
 }
 }
 break;
+  case ISD::EHSELECTION: {
+Tmp1 = LegalizeOp(Node-getOperand(0));
+Tmp2 = LegalizeOp(Node-getOperand(1));
+MVT::ValueType VT = Node-getValueType(0);
+switch (TLI.getOperationAction(Node-getOpcode(), VT)) {
+default: assert(0  This action is not supported yet!);
+case TargetLowering::Expand: {
+unsigned Reg = TLI.getExceptionSelectorRegister();
+Result = DAG.getCopyFromReg(Tmp2, Reg, VT).getValue(Op.ResNo);
+  }
+  break;
+case TargetLowering::Custom:
+  Result = TLI.LowerOperation(Op, DAG);
+  if (Result.Val) break;
+  // Fall Thru
+case TargetLowering::Legal:
+  Result = DAG.getNode(ISD::MERGE_VALUES, VT, DAG.getConstant(0, VT), 
Tmp2).
+  getValue(Op.ResNo);
+  break;
+}
+}
+break;
   case ISD::AssertSext:
   case ISD::AssertZext:
 Tmp1 = LegalizeOp(Node-getOperand(0));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-24 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.478 - 1.479
---
Log message:

Drop unused operand.

---
Diffs of the changes:  (+0 -2)

 LegalizeDAG.cpp |2 --
 1 files changed, 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.478 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.479
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.478 Thu Feb 22 09:37:19 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Feb 24 03:44:17 2007
@@ -677,8 +677,6 @@
   Result = DAG.getConstant(0, TLI.getPointerTy());
 break;
   case ISD::EHSELECTION:
-LegalizeOp(Node-getOperand(1));
-// Fall Thru
   case ISD::EXCEPTIONADDR: {
 Tmp1 = LegalizeOp(Node-getOperand(0));
 MVT::ValueType VT = Node-getValueType(0);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-22 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.477 - 1.478
---
Log message:

Simplify lowering and selection of exception ops.

---
Diffs of the changes:  (+26 -2)

 LegalizeDAG.cpp |   28 ++--
 1 files changed, 26 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.477 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.478
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.477 Wed Feb 21 16:53:45 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Feb 22 09:37:19 2007
@@ -668,8 +668,6 @@
 break;
   case ISD::FRAMEADDR:
   case ISD::RETURNADDR:
-  case ISD::EXCEPTIONADDR:
-  case ISD::EHSELECTION:
 // The only option for these nodes is to custom lower them.  If the target
 // does not custom lower them, then return zero.
 Tmp1 = TLI.LowerOperation(Op, DAG);
@@ -678,6 +676,32 @@
 else
   Result = DAG.getConstant(0, TLI.getPointerTy());
 break;
+  case ISD::EHSELECTION:
+LegalizeOp(Node-getOperand(1));
+// Fall Thru
+  case ISD::EXCEPTIONADDR: {
+Tmp1 = LegalizeOp(Node-getOperand(0));
+MVT::ValueType VT = Node-getValueType(0);
+switch (TLI.getOperationAction(Node-getOpcode(), VT)) {
+default: assert(0  This action is not supported yet!);
+case TargetLowering::Expand: {
+unsigned Reg = Node-getOpcode() == ISD::EXCEPTIONADDR ?
+  TLI.getExceptionAddressRegister() :
+  TLI.getExceptionSelectorRegister();
+Result = DAG.getCopyFromReg(Tmp1, Reg, VT).getValue(Op.ResNo);
+  }
+  break;
+case TargetLowering::Custom:
+  Result = TLI.LowerOperation(Op, DAG);
+  if (Result.Val) break;
+  // Fall Thru
+case TargetLowering::Legal:
+  Result = DAG.getNode(ISD::MERGE_VALUES, VT, DAG.getConstant(0, VT), 
Tmp1).
+  getValue(Op.ResNo);
+  break;
+}
+}
+break;
   case ISD::AssertSext:
   case ISD::AssertZext:
 Tmp1 = LegalizeOp(Node-getOperand(0));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

2007-02-21 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.476 - 1.477
SelectionDAG.cpp updated: 1.389 - 1.390
SelectionDAGISel.cpp updated: 1.369 - 1.370
---
Log message:

Selection and lowering for exception handling.

---
Diffs of the changes:  (+141 -2)

 LegalizeDAG.cpp  |2 
 SelectionDAG.cpp |2 
 SelectionDAGISel.cpp |  139 ++-
 3 files changed, 141 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.476 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.477
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.476 Wed Feb 14 21:39:18 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Feb 21 16:53:45 2007
@@ -668,6 +668,8 @@
 break;
   case ISD::FRAMEADDR:
   case ISD::RETURNADDR:
+  case ISD::EXCEPTIONADDR:
+  case ISD::EHSELECTION:
 // The only option for these nodes is to custom lower them.  If the target
 // does not custom lower them, then return zero.
 Tmp1 = TLI.LowerOperation(Op, DAG);


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.389 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.390
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.389Sun Feb  4 
02:35:21 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Wed Feb 21 16:53:45 2007
@@ -2679,6 +2679,8 @@
   case ISD::GLOBAL_OFFSET_TABLE: return GLOBAL_OFFSET_TABLE;
   case ISD::RETURNADDR: return RETURNADDR;
   case ISD::FRAMEADDR: return FRAMEADDR;
+  case ISD::EXCEPTIONADDR: return EXCEPTIONADDR;
+  case ISD::EHSELECTION: return EHSELECTION;
   case ISD::ConstantPool:  return ConstantPool;
   case ISD::ExternalSymbol: return ExternalSymbol;
   case ISD::INTRINSIC_WO_CHAIN: {


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.369 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.370
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.369Wed Feb 14 
21:39:18 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Feb 21 16:53:45 2007
@@ -496,8 +496,8 @@
   void visitJumpTable(SelectionDAGISel::JumpTable JT);
   
   // These all get lowered before this pass.
-  void visitInvoke(InvokeInst I) { assert(0  TODO); }
-  void visitUnwind(UnwindInst I) { assert(0  TODO); }
+  void visitInvoke(InvokeInst I);
+  void visitUnwind(UnwindInst I);
 
   void visitScalarBinary(User I, unsigned OpCode);
   void visitVectorBinary(User I, unsigned OpCode);
@@ -1101,6 +1101,56 @@
   return;
 }
 
+void SelectionDAGLowering::visitInvoke(InvokeInst I) {
+  // Retrieve successors.
+  MachineBasicBlock *Return = FuncInfo.MBBMap[I.getSuccessor(0)];
+  MachineBasicBlock *LandingPad = FuncInfo.MBBMap[I.getSuccessor(1)];
+  
+  // Mark landing pad so that it doesn't get deleted in branch folding.
+  LandingPad-setIsLandingPad();
+  
+  // Insert a label before the invoke call to mark the try range.
+  // This can be used to detect deletion of the invoke via the
+  // MachineModuleInfo.
+  MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
+  unsigned BeginLabel = MMI-NextLabelID();
+  DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
+  DAG.getConstant(BeginLabel, MVT::i32)));
+
+  // Insert a normal call instruction.
+  std::vectorValue* Args;
+  for (InvokeInst::op_iterator OI = I.op_begin() + 3, E = I.op_end();
+   OI != E; ++OI) {
+Args.push_back(*OI);
+  }
+  CallInst *NewCall = new CallInst(I.getCalledValue(), Args[0], Args.size(),
+   I.getName(), I);
+  NewCall-setCallingConv(I.getCallingConv());
+  I.replaceAllUsesWith(NewCall);
+  visitCall(*NewCall);
+
+  // Insert a label before the invoke call to mark the try range.
+  // This can be used to detect deletion of the invoke via the
+  // MachineModuleInfo.
+  unsigned EndLabel = MMI-NextLabelID();
+  DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
+  DAG.getConstant(EndLabel, MVT::i32)));
+  
+  // Inform MachineModuleInfo of range.
+  MMI-addInvoke(LandingPad, BeginLabel, EndLabel);
+
+  // Drop into normal successor.
+  DAG.setRoot(DAG.getNode(ISD::BR, MVT::Other, getRoot(), 
+  DAG.getBasicBlock(Return)));
+  
+  // Update successor info
+  CurMBB-addSuccessor(Return);
+  CurMBB-addSuccessor(LandingPad);
+}
+
+void SelectionDAGLowering::visitUnwind(UnwindInst I) {
+}
+
 void SelectionDAGLowering::visitSwitch(SwitchInst I) {
   // Figure out which block is immediately after the current one.
   MachineBasicBlock *NextBlock = 0;
@@ -2033,6 +2083,91 @@
 return 0;
   }
 
+  case Intrinsic::eh_exception: {
+MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
+
+// Add a label to mark the beginning of the landing pad.  Deletion of the

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp TargetLowering.cpp

2007-02-14 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.474 - 1.475
SelectionDAGISel.cpp updated: 1.367 - 1.368
TargetLowering.cpp updated: 1.90 - 1.91
---
Log message:

For PR1195: http://llvm.org/PR1195 :
Rename PackedType - VectorType, ConstantPacked - ConstantVector, and
PackedTyID - VectorTyID. No functional changes.


---
Diffs of the changes:  (+33 -33)

 LegalizeDAG.cpp  |2 -
 SelectionDAGISel.cpp |   58 +--
 TargetLowering.cpp   |6 ++---
 3 files changed, 33 insertions(+), 33 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.474 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.475
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.474 Tue Feb 13 23:52:17 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Feb 14 20:26:09 2007
@@ -3874,7 +3874,7 @@
 CV.push_back(UndefValue::get(OpNTy));
   }
 }
-Constant *CP = ConstantPacked::get(CV);
+Constant *CP = ConstantVector::get(CV);
 SDOperand CPIdx = DAG.getConstantPool(CP, TLI.getPointerTy());
 return DAG.getLoad(VT, DAG.getEntryNode(), CPIdx, NULL, 0);
   }


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.367 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.368
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.367Wed Feb 14 
01:34:56 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Feb 14 20:26:09 2007
@@ -281,7 +281,7 @@
   else {
 MVT::ValueType VT1,VT2;
 NumElements = 
-  TLI.getPackedTypeBreakdown(castPackedType(PN-getType()),
+  TLI.getVectorTypeBreakdown(castVectorType(PN-getType()),
  VT1, VT2);
   }
   unsigned PHIReg = ValueMap[PN];
@@ -306,7 +306,7 @@
   // If this is a packed type, figure out what type it will decompose into
   // and how many of the elements it will use.
   if (VT == MVT::Vector) {
-const PackedType *PTy = castPackedType(V-getType());
+const VectorType *PTy = castVectorType(V-getType());
 unsigned NumElts = PTy-getNumElements();
 MVT::ValueType EltTy = TLI.getValueType(PTy-getElementType());
 
@@ -504,7 +504,7 @@
   void visitEitherBinary(User I, unsigned ScalarOp, unsigned VectorOp);
   void visitShift(User I, unsigned Opcode);
   void visitAdd(User I) { 
-if (isaPackedType(I.getType()))
+if (isaVectorType(I.getType()))
   visitVectorBinary(I, ISD::VADD);
 else if (I.getType()-isFloatingPoint())
   visitScalarBinary(I, ISD::FADD);
@@ -513,7 +513,7 @@
   }
   void visitSub(User I);
   void visitMul(User I) {
-if (isaPackedType(I.getType()))
+if (isaVectorType(I.getType()))
   visitVectorBinary(I, ISD::VMUL);
 else if (I.getType()-isFloatingPoint())
   visitScalarBinary(I, ISD::FMUL);
@@ -601,11 +601,11 @@
 } else if (isaConstantPointerNull(C)) {
   return N = DAG.getConstant(0, TLI.getPointerTy());
 } else if (isaUndefValue(C)) {
-  if (!isaPackedType(VTy))
+  if (!isaVectorType(VTy))
 return N = DAG.getNode(ISD::UNDEF, VT);
 
   // Create a VBUILD_VECTOR of undef nodes.
-  const PackedType *PTy = castPackedType(VTy);
+  const VectorType *PTy = castVectorType(VTy);
   unsigned NumElements = PTy-getNumElements();
   MVT::ValueType PVT = TLI.getValueType(PTy-getElementType());
 
@@ -619,7 +619,7 @@
  Ops[0], Ops.size());
 } else if (ConstantFP *CFP = dyn_castConstantFP(C)) {
   return N = DAG.getConstantFP(CFP-getValue(), VT);
-} else if (const PackedType *PTy = dyn_castPackedType(VTy)) {
+} else if (const VectorType *PTy = dyn_castVectorType(VTy)) {
   unsigned NumElements = PTy-getNumElements();
   MVT::ValueType PVT = TLI.getValueType(PTy-getElementType());
   
@@ -627,7 +627,7 @@
   // Constant or ConstantFP node onto the ops list for each element of
   // the packed constant.
   SmallVectorSDOperand, 8 Ops;
-  if (ConstantPacked *CP = dyn_castConstantPacked(C)) {
+  if (ConstantVector *CP = dyn_castConstantVector(C)) {
 for (unsigned i = 0; i != NumElements; ++i)
   Ops.push_back(getValue(CP-getOperand(i)));
   } else {
@@ -691,8 +691,8 @@
 // Otherwise, if this is a vector, make it available as a generic vector
 // here.
 MVT::ValueType PTyElementVT, PTyLegalElementVT;
-const PackedType *PTy = castPackedType(VTy);
-unsigned NE = TLI.getPackedTypeBreakdown(PTy, PTyElementVT,
+const VectorType *PTy = castVectorType(VTy);
+unsigned NE = TLI.getVectorTypeBreakdown(PTy, PTyElementVT,
  PTyLegalElementVT);
 
 // Build a VBUILD_VECTOR with the input registers.
@@ -1377,7 +1377,7 @@
 void SelectionDAGLowering::visitSub(User I) {
   // -0.0 - X -- fneg
   const Type *Ty = 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp ScheduleDAG.cpp SelectionDAGISel.cpp

2007-02-14 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.475 - 1.476
ScheduleDAG.cpp updated: 1.118 - 1.119
SelectionDAGISel.cpp updated: 1.368 - 1.369
---
Log message:

For PR1195: http://llvm.org/PR1195 :
Change use of packed term to vector in comments, strings, variable
names, etc.


---
Diffs of the changes:  (+17 -17)

 LegalizeDAG.cpp  |   16 
 ScheduleDAG.cpp  |2 +-
 SelectionDAGISel.cpp |   16 
 3 files changed, 17 insertions(+), 17 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.475 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.476
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.475 Wed Feb 14 20:26:09 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Feb 14 21:39:18 2007
@@ -112,7 +112,7 @@
   std::mapSDOperand, std::pairSDOperand, SDOperand  SplitNodes;
   
   /// PackedNodes - For nodes that need to be packed from MVT::Vector types to
-  /// concrete packed types, this contains the mapping of ones we have already
+  /// concrete vector types, this contains the mapping of ones we have already
   /// processed to the result.
   std::mapSDOperand, SDOperand PackedNodes;
   
@@ -1641,10 +1641,10 @@
   MVT::ValueType EVT = castVTSDNode(*(InVal-op_end()-1))-getVT();
   
   // Figure out if there is a Packed type corresponding to this Vector
-  // type.  If so, convert to the packed type.
+  // type.  If so, convert to the vector type.
   MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
   if (TVT != MVT::Other  TLI.isTypeLegal(TVT)) {
-// Turn this into a return of the packed type.
+// Turn this into a return of the vector type.
 Tmp2 = PackVectorOp(Tmp2, TVT);
 Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
   } else if (NumElems == 1) {
@@ -1793,10 +1793,10 @@
   MVT::ValueType EVT = castVTSDNode(*(InVal-op_end()-1))-getVT();
 
   // Figure out if there is a Packed type corresponding to this Vector
-  // type.  If so, convert to the packed type.
+  // type.  If so, convert to the vector type.
   MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
   if (TVT != MVT::Other  TLI.isTypeLegal(TVT)) {
-// Turn this into a normal store of the packed type.
+// Turn this into a normal store of the vector type.
 Tmp3 = PackVectorOp(Node-getOperand(1), TVT);
 Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST-getSrcValue(),
   ST-getSrcValueOffset());
@@ -2810,7 +2810,7 @@
 MVT::ValueType EVT = castVTSDNode(*(InVal-op_end()-1))-getVT();
 
 // Figure out if there is a Packed type corresponding to this Vector
-// type.  If so, convert to the packed type.
+// type.  If so, convert to the vector type.
 MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
 if (TVT != MVT::Other  TLI.isTypeLegal(TVT)) {
   // Turn this into a bit convert of the packed input.
@@ -3508,7 +3508,7 @@
   MVT::ValueType EVT = castVTSDNode(*(InVal-op_end()-1))-getVT();
   
   // Figure out if there is a Packed type corresponding to this Vector
-  // type.  If so, convert to the packed type.
+  // type.  If so, convert to the vector type.
   MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
   if (TVT != MVT::Other  TLI.isTypeLegal(TVT)) {
 // Turn this into a packed extract_vector_elt operation.
@@ -5553,7 +5553,7 @@
   MVT::ValueType EVT = castVTSDNode(*(InVal-op_end()-1))-getVT();
 
   // Figure out if there is a Packed type corresponding to this Vector
-  // type.  If so, convert to the packed type.
+  // type.  If so, convert to the vector type.
   MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
   if (TVT != MVT::Other  TLI.isTypeLegal(TVT)) {
 // Turn this into a bit convert of the packed input.


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.118 
llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.119
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.118 Sun Feb  4 02:47:20 2007
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp   Wed Feb 14 21:39:18 2007
@@ -332,7 +332,7 @@
 if (Align == 0) {
   Align = TM.getTargetData()-getPreferredTypeAlignmentShift(Type);
   if (Align == 0) {
-// Alignment of packed types.  FIXME!
+// Alignment of vector types.  FIXME!
 Align = TM.getTargetData()-getTypeSize(Type);
 Align = Log2_64(Align);
   }


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.368 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.369
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.368Wed Feb 14 
20:26:09 2007
+++ 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-13 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.472 - 1.473
---
Log message:

implement expand of truncate.  This allows truncates from i128 to i64 to
be supported on 32-bit hosts.


---
Diffs of the changes:  (+13 -0)

 LegalizeDAG.cpp |   13 +
 1 files changed, 13 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.472 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.473
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.472 Thu Feb  8 16:16:19 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Feb 13 17:55:16 2007
@@ -4859,6 +4859,19 @@
 Hi = DAG.getConstant(0, NVT);
 break;
 
+  case ISD::TRUNCATE: {
+// The input value must be larger than this value.  Expand *it*.
+SDOperand NewLo;
+ExpandOp(Node-getOperand(0), NewLo, Hi);
+
+// The low part is now either the right size, or it is closer.  If not the
+// right size, make an illegal truncate so we recursively expand it.
+if (NewLo.getValueType() != Node-getValueType(0))
+  NewLo = DAG.getNode(ISD::TRUNCATE, Node-getValueType(0), NewLo);
+ExpandOp(NewLo, Lo, Hi);
+break;
+  }
+
   case ISD::BIT_CONVERT: {
 SDOperand Tmp;
 if (TLI.getOperationAction(ISD::BIT_CONVERT, VT) == 
TargetLowering::Custom){



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-02-13 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.473 - 1.474
SelectionDAGISel.cpp updated: 1.364 - 1.365
---
Log message:

Generalize TargetData strings, to support more interesting forms of data.
Patch by Scott Michel.


---
Diffs of the changes:  (+7 -7)

 LegalizeDAG.cpp  |6 +++---
 SelectionDAGISel.cpp |8 
 2 files changed, 7 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.473 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.474
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.473 Tue Feb 13 17:55:16 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Feb 13 23:52:17 2007
@@ -3056,7 +3056,7 @@
 // new ones, as reuse may inhibit scheduling.
 const Type *Ty = MVT::getTypeForValueType(ExtraVT);
 unsigned TySize = (unsigned)TLI.getTargetData()-getTypeSize(Ty);
-unsigned Align  = TLI.getTargetData()-getTypeAlignmentPref(Ty);
+unsigned Align  = TLI.getTargetData()-getPrefTypeAlignment(Ty);
 MachineFunction MF = DAG.getMachineFunction();
 int SSFI =
   MF.getFrameInfo()-CreateStackObject((unsigned)TySize, Align);
@@ -3979,7 +3979,7 @@
   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
   unsigned ByteSize = MVT::getSizeInBits(VT)/8;
   const Type *Ty = MVT::getTypeForValueType(VT);
-  unsigned StackAlign = 
(unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty);
+  unsigned StackAlign = 
(unsigned)TLI.getTargetData()-getPrefTypeAlignment(Ty);
   int FrameIdx = FrameInfo-CreateStackObject(ByteSize, StackAlign);
   return DAG.getFrameIndex(FrameIdx, TLI.getPointerTy());
 }
@@ -4289,7 +4289,7 @@
 MachineFunction MF = DAG.getMachineFunction();
 const Type *F64Type = MVT::getTypeForValueType(MVT::f64);
 unsigned StackAlign =
-  (unsigned)TLI.getTargetData()-getTypeAlignmentPref(F64Type);
+  (unsigned)TLI.getTargetData()-getPrefTypeAlignment(F64Type);
 int SSFI = MF.getFrameInfo()-CreateStackObject(8, StackAlign);
 // get address of 8 byte buffer
 SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.364 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.365
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.364Tue Feb 13 
14:09:07 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Tue Feb 13 23:52:17 2007
@@ -244,7 +244,7 @@
 const Type *Ty = AI-getAllocatedType();
 uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
 unsigned Align = 
-  std::max((unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty),
+  std::max((unsigned)TLI.getTargetData()-getPrefTypeAlignment(Ty),
AI-getAlignment());
 
 TySize *= CUI-getZExtValue();   // Get total allocated size.
@@ -1733,7 +1733,7 @@
   const Type *Ty = I.getAllocatedType();
   uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
   unsigned Align =
-std::max((unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty),
+std::max((unsigned)TLI.getTargetData()-getPrefTypeAlignment(Ty),
  I.getAlignment());
 
   SDOperand AllocSize = getValue(I.getArraySize());
@@ -2934,7 +2934,7 @@
 bool isInReg = FTy-paramHasAttr(j, FunctionType::InRegAttribute);
 bool isSRet  = FTy-paramHasAttr(j, FunctionType::StructRetAttribute);
 unsigned OriginalAlignment =
-  getTargetData()-getTypeAlignmentABI(I-getType());
+  getTargetData()-getABITypeAlignment(I-getType());
 // Flags[31:27] - OriginalAlignment
 // Flags[2] - isSRet
 // Flags[1] - isInReg
@@ -3120,7 +3120,7 @@
 bool isInReg = Args[i].isInReg;
 bool isSRet  = Args[i].isSRet;
 unsigned OriginalAlignment =
-  getTargetData()-getTypeAlignmentABI(Args[i].Ty);
+  getTargetData()-getABITypeAlignment(Args[i].Ty);
 // Flags[31:27] - OriginalAlignment
 // Flags[2] - isSRet
 // Flags[1] - isInReg



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-08 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.471 - 1.472
---
Log message:

Make use of TLI.SimplifySetCC() in LegalizeSetCCOperands().

---
Diffs of the changes:  (+36 -8)

 LegalizeDAG.cpp |   44 
 1 files changed, 36 insertions(+), 8 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.471 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.472
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.471 Sat Feb  3 19:20:02 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Feb  8 16:16:19 2007
@@ -3732,7 +3732,8 @@
 
   // FIXME: This generated code sucks.
   ISD::CondCode LowCC;
-  switch (castCondCodeSDNode(CC)-get()) {
+  ISD::CondCode CCCode = castCondCodeSDNode(CC)-get();
+  switch (CCCode) {
   default: assert(0  Unknown integer setcc!);
   case ISD::SETLT:
   case ISD::SETULT: LowCC = ISD::SETULT; break;
@@ -3750,13 +3751,40 @@
 
   // NOTE: on targets without efficient SELECT of bools, we can always use
   // this identity: (B1 ? B2 : B3) -- (B1  B2)|(!B1B3)
-  Tmp1 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, LowCC);
-  Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHSHi, RHSHi, CC);
-  Result = DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, ISD::SETEQ);
-  Result = LegalizeOp(DAG.getNode(ISD::SELECT, Tmp1.getValueType(),
-  Result, Tmp1, Tmp2));
-  Tmp1 = Result;
-  Tmp2 = SDOperand();
+  TargetLowering::DAGCombinerInfo DagCombineInfo(DAG, false, true, NULL);
+  Tmp1 = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, LowCC,
+   false, DagCombineInfo);
+  if (!Tmp1.Val)
+Tmp1 = DAG.getSetCC(TLI.getSetCCResultTy(), LHSLo, RHSLo, LowCC);
+  Tmp2 = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi,
+   CCCode, false, DagCombineInfo);
+  if (!Tmp2.Val)
+Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHSHi, RHSHi, 
CC);
+  
+  ConstantSDNode *Tmp1C = dyn_castConstantSDNode(Tmp1.Val);
+  ConstantSDNode *Tmp2C = dyn_castConstantSDNode(Tmp2.Val);
+  if ((Tmp1C  Tmp1C-getValue() == 0) ||
+  (Tmp2C  Tmp2C-getValue() == 0 
+   (CCCode == ISD::SETLE || CCCode == ISD::SETGE ||
+CCCode == ISD::SETUGE || CCCode == ISD::SETULE)) ||
+  (Tmp2C  Tmp2C-getValue() == 1 
+   (CCCode == ISD::SETLT || CCCode == ISD::SETGT ||
+CCCode == ISD::SETUGT || CCCode == ISD::SETULT))) {
+// low part is known false, returns high part.
+// For LE / GE, if high part is known false, ignore the low part.
+// For LT / GT, if high part is known true, ignore the low part.
+Tmp1 = Tmp2;
+Tmp2 = SDOperand();
+  } else {
+Result = TLI.SimplifySetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi,
+   ISD::SETEQ, false, DagCombineInfo);
+if (!Result.Val)
+  Result=DAG.getSetCC(TLI.getSetCCResultTy(), LHSHi, RHSHi, 
ISD::SETEQ);
+Result = LegalizeOp(DAG.getNode(ISD::SELECT, Tmp1.getValueType(),
+Result, Tmp1, Tmp2));
+Tmp1 = Result;
+Tmp2 = SDOperand();
+  }
 }
   }
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-03 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.467 - 1.468
---
Log message:

Eliminate some malloc traffic from LegalizeAllNodesNotLeadingTo, speeding
up isel on kimwitu by 0.7%.


---
Diffs of the changes:  (+5 -4)

 LegalizeDAG.cpp |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.467 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.468
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.467 Fri Feb  2 19:12:36 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Feb  3 18:27:56 2007
@@ -27,6 +27,7 @@
 #include llvm/Support/Compiler.h
 #include llvm/ADT/DenseMap.h
 #include llvm/ADT/SmallVector.h
+#include llvm/ADT/SmallPtrSet.h
 #include map
 using namespace llvm;
 
@@ -182,7 +183,7 @@
   SDNode *isShuffleLegal(MVT::ValueType VT, SDOperand Mask) const;
   
   bool LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode *Dest,
-std::setSDNode* NodesLeadingTo);
+SmallPtrSetSDNode*, 32 NodesLeadingTo);
 
   void LegalizeSetCCOperands(SDOperand LHS, SDOperand RHS, SDOperand CC);
 
@@ -416,7 +417,7 @@
 /// NodesLeadingTo.  This avoids retraversing them exponential number of times.
 ///
 bool SelectionDAGLegalize::LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode 
*Dest,
-std::setSDNode* NodesLeadingTo) 
{
+ SmallPtrSetSDNode*, 32 NodesLeadingTo) 
{
   if (N == Dest) return true;  // N certainly leads to Dest :)
   
   // If we've already processed this node and it does lead to Dest, there is no
@@ -1119,7 +1120,7 @@
 // Recursively Legalize all of the inputs of the call end that do not lead
 // to this call start.  This ensures that any libcalls that need be 
inserted
 // are inserted *before* the CALLSEQ_START.
-{std::setSDNode* NodesLeadingTo;
+{SmallPtrSetSDNode*, 32 NodesLeadingTo;
 for (unsigned i = 0, e = CallEnd-getNumOperands(); i != e; ++i)
   LegalizeAllNodesNotLeadingTo(CallEnd-getOperand(i).Val, Node,
NodesLeadingTo);
@@ -2072,7 +2073,7 @@
   // Allow SETCC to not be supported for all legal data types
   // Mostly this targets FP
   MVT::ValueType NewInTy = Node-getOperand(0).getValueType();
-  MVT::ValueType OldVT = NewInTy;
+  MVT::ValueType OldVT = NewInTy; OldVT = OldVT;
 
   // Scan for the appropriate larger type to use.
   while (1) {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-03 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.468 - 1.469
---
Log message:

switch LegalizedNodes from std::map to a DenseMap.  This speeds up isel
time as a whole on kc++ by 11%.


---
Diffs of the changes:  (+15 -3)

 LegalizeDAG.cpp |   18 +++---
 1 files changed, 15 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.468 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.469
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.468 Sat Feb  3 18:27:56 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Feb  3 18:50:02 2007
@@ -39,6 +39,18 @@
 static const bool ViewLegalizeDAGs = 0;
 #endif
 
+namespace llvm {
+template
+struct DenseMapKeyInfoSDOperand {
+  static inline SDOperand getEmptyKey() { return SDOperand((SDNode*)-1, -1U); }
+  static inline SDOperand getTombstoneKey() { return SDOperand((SDNode*)-1, 
0);}
+  static unsigned getHashValue(const SDOperand Val) {
+return DenseMapKeyInfovoid*::getHashValue(Val.Val) + Val.ResNo;
+  }
+  static bool isPod() { return true; }
+};
+}
+
 
//===--===//
 /// SelectionDAGLegalize - This takes an arbitrary SelectionDAG as input and
 /// hacks on it until the target machine can handle it.  This involves
@@ -82,7 +94,7 @@
   /// LegalizedNodes - For nodes that are of legal width, and that have more
   /// than one use, this map indicates what regularized operand to use.  This
   /// allows us to avoid legalizing the same thing more than once.
-  std::mapSDOperand, SDOperand LegalizedNodes;
+  DenseMapSDOperand, SDOperand LegalizedNodes;
 
   /// PromotedNodes - For nodes that are below legal width, and that have more
   /// than one use, this map indicates what promoted value to use.  This allows
@@ -592,7 +604,7 @@
 
   // Note that LegalizeOp may be reentered even from single-use nodes, which
   // means that we always must cache transformed nodes.
-  std::mapSDOperand, SDOperand::iterator I = LegalizedNodes.find(Op);
+  DenseMapSDOperand, SDOperand::iterator I = LegalizedNodes.find(Op);
   if (I != LegalizedNodes.end()) return I-second;
 
   SDOperand Tmp1, Tmp2, Tmp3, Tmp4;
@@ -1169,7 +1181,7 @@
 // will cause this node to be legalized as well as handling libcalls right.
 if (LastCALLSEQ_END.Val != Node) {
   LegalizeOp(SDOperand(FindCallStartFromCallEnd(Node), 0));
-  std::mapSDOperand, SDOperand::iterator I = LegalizedNodes.find(Op);
+  DenseMapSDOperand, SDOperand::iterator I = LegalizedNodes.find(Op);
   assert(I != LegalizedNodes.end() 
  Legalizing the call start should have legalized this node!);
   return I-second;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-03 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.469 - 1.470
---
Log message:

Switch promoted/expanded ops over to using a DenseMap.  Vector related maps
aren't worth it.


---
Diffs of the changes:  (+7 -8)

 LegalizeDAG.cpp |   15 +++
 1 files changed, 7 insertions(+), 8 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.469 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.470
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.469 Sat Feb  3 18:50:02 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Feb  3 19:17:38 2007
@@ -99,12 +99,12 @@
   /// PromotedNodes - For nodes that are below legal width, and that have more
   /// than one use, this map indicates what promoted value to use.  This allows
   /// us to avoid promoting the same thing more than once.
-  std::mapSDOperand, SDOperand PromotedNodes;
+  DenseMapSDOperand, SDOperand PromotedNodes;
 
   /// ExpandedNodes - For nodes that need to be expanded this map indicates
   /// which which operands are the expanded version of the input.  This allows
   /// us to avoid expanding the same node more than once.
-  std::mapSDOperand, std::pairSDOperand, SDOperand  ExpandedNodes;
+  DenseMapSDOperand, std::pairSDOperand, SDOperand  ExpandedNodes;
 
   /// SplitNodes - For vector nodes that need to be split, this map indicates
   /// which which operands are the split version of the input.  This allows us
@@ -123,7 +123,7 @@
   LegalizedNodes.insert(std::make_pair(To, To));
   }
   void AddPromotedOperand(SDOperand From, SDOperand To) {
-bool isNew = PromotedNodes.insert(std::make_pair(From, To)).second;
+bool isNew = PromotedNodes.insert(std::make_pair(From, To));
 assert(isNew  Got into the map somehow?);
 // If someone requests legalization of the new node, return itself.
 LegalizedNodes.insert(std::make_pair(To, To));
@@ -3103,7 +3103,7 @@
   SDOperand Result;
   SDNode *Node = Op.Val;
 
-  std::mapSDOperand, SDOperand::iterator I = PromotedNodes.find(Op);
+  DenseMapSDOperand, SDOperand::iterator I = PromotedNodes.find(Op);
   if (I != PromotedNodes.end()) return I-second;
 
   switch (Node-getOpcode()) {
@@ -4584,7 +4584,7 @@
  Cannot expand to FP value or to larger int value!);
 
   // See if we already expanded it.
-  std::mapSDOperand, std::pairSDOperand, SDOperand ::iterator I
+  DenseMapSDOperand, std::pairSDOperand, SDOperand ::iterator I
 = ExpandedNodes.find(Op);
   if (I != ExpandedNodes.end()) {
 Lo = I-second.first;
@@ -5268,8 +5268,7 @@
   }
 
   // Remember in a map if the values will be reused later.
-  bool isNew =
-ExpandedNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second;
+  bool isNew = ExpandedNodes.insert(std::make_pair(Op, std::make_pair(Lo, 
Hi)));
   assert(isNew  Value already expanded?!?);
 }
 
@@ -5396,7 +5395,7 @@
   }
   
   // Remember in a map if the values will be reused later.
-  bool isNew =
+  bool isNew = 
 SplitNodes.insert(std::make_pair(Op, std::make_pair(Lo, Hi))).second;
   assert(isNew  Value already expanded?!?);
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-03 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.470 - 1.471
---
Log message:

swtich vector- smallvector, speeding up selectiondag stuff 1%


---
Diffs of the changes:  (+2 -2)

 LegalizeDAG.cpp |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.470 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.471
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.470 Sat Feb  3 19:17:38 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Feb  3 19:20:02 2007
@@ -303,7 +303,7 @@
 
 /// ComputeTopDownOrdering - Add the specified node to the Order list if it has
 /// not been visited yet and if all of its operands have already been visited.
-static void ComputeTopDownOrdering(SDNode *N, std::vectorSDNode* Order,
+static void ComputeTopDownOrdering(SDNode *N, SmallVectorSDNode*, 64 Order,
DenseMapSDNode*, unsigned Visited) {
   if (++Visited[N] != N-getNumOperands())
 return;  // Haven't visited all operands yet
@@ -333,7 +333,7 @@
   // blocks.  To avoid this problem, compute an ordering of the nodes where 
each
   // node is only legalized after all of its operands are legalized.
   DenseMapSDNode*, unsigned Visited;
-  std::vectorSDNode* Order;
+  SmallVectorSDNode*, 64 Order;
   
   // Compute ordering from all of the leaves in the graphs, those (like the
   // entry node) that have no operands.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-02 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.465 - 1.466
---
Log message:

Pasto

---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.465 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.466
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.465 Thu Feb  1 02:39:52 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Feb  2 18:43:46 2007
@@ -3634,7 +3634,7 @@
 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
 break;
   case ISD::SETO:
-LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
+LC1 = (VT == MVT::f32) ? RTLIB::O_F32 : RTLIB::O_F64;
 break;
   default:
 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-02 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.466 - 1.467
---
Log message:

Switch ComputeTopDownOrdering over to using a densemap.  This speeds up
isel as a whole by 3.3%.


---
Diffs of the changes:  (+3 -2)

 LegalizeDAG.cpp |5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.466 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.467
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.466 Fri Feb  2 18:43:46 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Feb  2 19:12:36 2007
@@ -25,6 +25,7 @@
 #include llvm/Support/MathExtras.h
 #include llvm/Support/CommandLine.h
 #include llvm/Support/Compiler.h
+#include llvm/ADT/DenseMap.h
 #include llvm/ADT/SmallVector.h
 #include map
 using namespace llvm;
@@ -290,7 +291,7 @@
 /// ComputeTopDownOrdering - Add the specified node to the Order list if it has
 /// not been visited yet and if all of its operands have already been visited.
 static void ComputeTopDownOrdering(SDNode *N, std::vectorSDNode* Order,
-   std::mapSDNode*, unsigned Visited) {
+   DenseMapSDNode*, unsigned Visited) {
   if (++Visited[N] != N-getNumOperands())
 return;  // Haven't visited all operands yet
   
@@ -318,7 +319,7 @@
   // practice however, this causes us to run out of stack space on large basic
   // blocks.  To avoid this problem, compute an ordering of the nodes where 
each
   // node is only legalized after all of its operands are legalized.
-  std::mapSDNode*, unsigned Visited;
+  DenseMapSDNode*, unsigned Visited;
   std::vectorSDNode* Order;
   
   // Compute ordering from all of the leaves in the graphs, those (like the



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-02-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.464 - 1.465
---
Log message:

Fixed uninitialized stuff inside LegalizeDAG. Fortunately, the only 
affected part is codegen of memove inside x86 backend. This fixes 
PR1144: http://llvm.org/PR1144 


---
Diffs of the changes:  (+5 -4)

 LegalizeDAG.cpp |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.464 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.465
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.464 Wed Jan 31 22:55:59 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Feb  1 02:39:52 2007
@@ -2178,7 +2178,7 @@
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
 Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty = IntPtrTy;
-Entry.isInReg = false;
+Entry.isInReg = false; Entry.isSRet = false;
 Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
@@ -2187,7 +2187,7 @@
 else
   Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
 Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSigned = true;
-Entry.isInReg = false;
+Entry.isInReg = false; Entry.isSRet = false;
 Args.push_back(Entry);
 Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
 Args.push_back(Entry);
@@ -2195,7 +2195,8 @@
 FnName = memset;
   } else if (Node-getOpcode() == ISD::MEMCPY ||
  Node-getOpcode() == ISD::MEMMOVE) {
-Entry.Ty = IntPtrTy; Entry.isSigned = false; Entry.isInReg = false;
+Entry.Ty = IntPtrTy;
+Entry.isSigned = false; Entry.isInReg = false; Entry.isSRet = false;
 Entry.Node = Tmp2; Args.push_back(Entry);
 Entry.Node = Tmp3; Args.push_back(Entry);
 Entry.Node = Tmp4; Args.push_back(Entry);
@@ -4122,7 +4123,7 @@
 MVT::ValueType ArgVT = Node-getOperand(i).getValueType();
 const Type *ArgTy = MVT::getTypeForValueType(ArgVT);
 Entry.Node = Node-getOperand(i); Entry.Ty = ArgTy; 
-Entry.isSigned = isSigned; Entry.isInReg = false;
+Entry.isSigned = isSigned; Entry.isInReg = false; Entry.isSRet = false;
 Args.push_back(Entry);
   }
   SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy());



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp TargetLowering.cpp

2007-01-31 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.462 - 1.463
TargetLowering.cpp updated: 1.86 - 1.87
---
Log message:

Allow the target to override the ISD::CondCode that's to be used to test the
result of the comparison libcall against zero.


---
Diffs of the changes:  (+29 -18)

 LegalizeDAG.cpp|   22 --
 TargetLowering.cpp |   25 +
 2 files changed, 29 insertions(+), 18 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.462 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.463
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.462 Mon Jan 29 16:58:52 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jan 31 03:29:11 2007
@@ -3604,72 +3604,58 @@
 if (VT == MVT::f32 || VT == MVT::f64) {
   // Expand into one or more soft-fp libcall(s).
   RTLIB::Libcall LC1, LC2 = RTLIB::UNKNOWN_LIBCALL;
-  ISD::CondCode CC1, CC2 = ISD::SETCC_INVALID;
   switch (castCondCodeSDNode(CC)-get()) {
   case ISD::SETEQ:
   case ISD::SETOEQ:
 LC1 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64;
-CC1 = ISD::SETEQ;
 break;
   case ISD::SETNE:
   case ISD::SETUNE:
 LC1 = (VT == MVT::f32) ? RTLIB::UNE_F32 : RTLIB::UNE_F64;
-CC1 = ISD::SETNE;
 break;
   case ISD::SETGE:
   case ISD::SETOGE:
 LC1 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64;
-CC1 = ISD::SETGE;
 break;
   case ISD::SETLT:
   case ISD::SETOLT:
 LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
-CC1 = ISD::SETLT;
 break;
   case ISD::SETLE:
   case ISD::SETOLE:
 LC1 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64;
-CC1 = ISD::SETLE;
 break;
   case ISD::SETGT:
   case ISD::SETOGT:
 LC1 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64;
-CC1 = ISD::SETGT;
 break;
   case ISD::SETUO:
+LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
+break;
   case ISD::SETO:
 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
-CC1 = castCondCodeSDNode(CC)-get() == ISD::SETO
-  ? ISD::SETEQ : ISD::SETNE;
 break;
   default:
 LC1 = (VT == MVT::f32) ? RTLIB::UO_F32 : RTLIB::UO_F64;
-CC1 = ISD::SETNE;
 switch (castCondCodeSDNode(CC)-get()) {
 case ISD::SETONE:
   // SETONE = SETOLT | SETOGT
   LC1 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
-  CC1 = ISD::SETLT;
   // Fallthrough
 case ISD::SETUGT:
   LC2 = (VT == MVT::f32) ? RTLIB::OGT_F32 : RTLIB::OGT_F64;
-  CC2 = ISD::SETGT;
   break;
 case ISD::SETUGE:
   LC2 = (VT == MVT::f32) ? RTLIB::OGE_F32 : RTLIB::OGE_F64;
-  CC2 = ISD::SETGE;
   break;
 case ISD::SETULT:
   LC2 = (VT == MVT::f32) ? RTLIB::OLT_F32 : RTLIB::OLT_F64;
-  CC2 = ISD::SETLT;
   break;
 case ISD::SETULE:
   LC2 = (VT == MVT::f32) ? RTLIB::OLE_F32 : RTLIB::OLE_F64;
-  CC2 = ISD::SETLE;
   break;
 case ISD::SETUEQ:
   LC2 = (VT == MVT::f32) ? RTLIB::OEQ_F32 : RTLIB::OEQ_F64;
-  CC2 = ISD::SETEQ;
   break;
 default: assert(0  Unsupported FP setcc!);
 }
@@ -3680,14 +3666,14 @@
DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
false /*sign irrelevant*/, Dummy);
   Tmp2 = DAG.getConstant(0, MVT::i32);
-  CC = DAG.getCondCode(CC1);
+  CC = DAG.getCondCode(TLI.getCmpLibcallCC(LC1));
   if (LC2 != RTLIB::UNKNOWN_LIBCALL) {
 Tmp1 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), Tmp1, Tmp2, CC);
 LHS = ExpandLibCall(TLI.getLibcallName(LC2),
 DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
 false /*sign irrelevant*/, Dummy);
 Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHS, Tmp2,
-   DAG.getCondCode(CC2));
+   DAG.getCondCode(TLI.getCmpLibcallCC(LC2)));
 Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp2);
 Tmp2 = SDOperand();
   }


Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.86 
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.87
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.86   Fri Jan 12 
17:30:31 2007
+++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cppWed Jan 31 03:29:11 2007
@@ -94,6 +94,30 @@
   Names[RTLIB::OGT_F64] = __gtdf2;
   Names[RTLIB::UO_F32] = __unordsf2;
   Names[RTLIB::UO_F64] = __unorddf2;
+  Names[RTLIB::O_F32] = __unordsf2;
+  Names[RTLIB::O_F64] = __unorddf2;
+}
+
+/// InitCmpLibcallCCs - Set default comparison 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp ScheduleDAGRRList.cpp ScheduleDAGSimple.cpp SelectionDAG.cpp SelectionDAGISel.cpp TargetLowering.cpp

2007-01-31 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.463 - 1.464
ScheduleDAGRRList.cpp updated: 1.25 - 1.26
ScheduleDAGSimple.cpp updated: 1.23 - 1.24
SelectionDAG.cpp updated: 1.379 - 1.380
SelectionDAGISel.cpp updated: 1.353 - 1.354
TargetLowering.cpp updated: 1.87 - 1.88
---
Log message:

Fit in 80 columns


---
Diffs of the changes:  (+19 -15)

 LegalizeDAG.cpp   |8 
 ScheduleDAGRRList.cpp |   12 +++-
 ScheduleDAGSimple.cpp |4 ++--
 SelectionDAG.cpp  |6 --
 SelectionDAGISel.cpp  |2 +-
 TargetLowering.cpp|2 +-
 6 files changed, 19 insertions(+), 15 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.463 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.464
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.463 Wed Jan 31 03:29:11 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jan 31 22:55:59 2007
@@ -1516,7 +1516,7 @@
   Tmp2 = LegalizeOp(Load.getValue(1));
   break;
 }
-assert(ExtType != ISD::EXTLOAD  EXTLOAD should always be 
supported!);
+assert(ExtType != ISD::EXTLOAD EXTLOAD should always be 
supported!);
 // Turn the unsupported load into an EXTLOAD followed by an explicit
 // zero/sign extend inreg.
 Result = DAG.getExtLoad(ISD::EXTLOAD, Node-getValueType(0),
@@ -1649,7 +1649,7 @@
 // type should be returned by reference!
 SDOperand Lo, Hi;
 SplitVectorOp(Tmp2, Lo, Hi);
-Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, 
Tmp3);
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, 
Hi,Tmp3);
 Result = LegalizeOp(Result);
   }
 }
@@ -4689,7 +4689,7 @@
 ISD::LoadExtType ExtType = LD-getExtensionType();
 
 if (ExtType == ISD::NON_EXTLOAD) {
-  Lo = DAG.getLoad(NVT, Ch, Ptr, LD-getSrcValue(), 
LD-getSrcValueOffset());
+  Lo = DAG.getLoad(NVT, Ch, Ptr, 
LD-getSrcValue(),LD-getSrcValueOffset());
   if (VT == MVT::f32 || VT == MVT::f64) {
 // f32-i32 or f64-i64 one to one expansion.
 // Remember that we legalized the chain.
@@ -4705,7 +4705,7 @@
   Ptr = DAG.getNode(ISD::ADD, Ptr.getValueType(), Ptr,
 getIntPtrConstant(IncrementSize));
   // FIXME: This creates a bogus srcvalue!
-  Hi = DAG.getLoad(NVT, Ch, Ptr, LD-getSrcValue(), 
LD-getSrcValueOffset());
+  Hi = DAG.getLoad(NVT, Ch, Ptr, 
LD-getSrcValue(),LD-getSrcValueOffset());
 
   // Build a factor node to remember that this load is independent of the
   // other one.


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.25 
llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.26
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.25Mon Jan  8 
17:55:53 2007
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Wed Jan 31 22:55:59 2007
@@ -696,7 +696,8 @@
 /// CalcNodeSethiUllmanNumber - Priority is the Sethi Ullman number. 
 /// Smaller number is the higher priority.
 templateclass SF
-unsigned BURegReductionPriorityQueueSF::CalcNodeSethiUllmanNumber(const 
SUnit *SU) {
+unsigned BURegReductionPriorityQueueSF::
+CalcNodeSethiUllmanNumber(const SUnit *SU) {
   unsigned SethiUllmanNumber = SethiUllmanNumbers[SU-NodeNum];
   if (SethiUllmanNumber != 0)
 return SethiUllmanNumber;
@@ -805,7 +806,8 @@
 /// CalcNodeSethiUllmanNumber - Priority is the Sethi Ullman number. 
 /// Smaller number is the higher priority.
 templateclass SF
-unsigned TDRegReductionPriorityQueueSF::CalcNodeSethiUllmanNumber(const 
SUnit *SU) {
+unsigned TDRegReductionPriorityQueueSF::
+CalcNodeSethiUllmanNumber(const SUnit *SU) {
   unsigned SethiUllmanNumber = SethiUllmanNumbers[SU-NodeNum];
   if (SethiUllmanNumber != 0)
 return SethiUllmanNumber;
@@ -816,8 +818,8 @@
   else if (SU-NumSuccsLeft == 0)
 // If SU does not have a use, i.e. it doesn't produce a value that would
 // be consumed (e.g. store), then it terminates a chain of computation.
-// Give it a small SethiUllman number so it will be scheduled right before 
its
-// predecessors that it doesn't lengthen their live ranges.
+// Give it a small SethiUllman number so it will be scheduled right before
+// its predecessors that it doesn't lengthen their live ranges.
 SethiUllmanNumber = 0;
   else if (SU-NumPredsLeft == 0 
(Opc != ISD::CopyFromReg || isCopyFromLiveIn(SU)))
@@ -868,6 +870,6 @@
 SelectionDAG *DAG,
 MachineBasicBlock *BB) {
   return new ScheduleDAGRRList(*DAG, BB, DAG-getTarget(), false,
-   new 
TDRegReductionPriorityQueuetd_ls_rr_sort());
+  new 
TDRegReductionPriorityQueuetd_ls_rr_sort());
 }
 



[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

2007-01-29 Thread Nate Begeman


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.461 - 1.462
SelectionDAG.cpp updated: 1.378 - 1.379
SelectionDAGISel.cpp updated: 1.349 - 1.350
---
Log message:

Finish off bug 680: http://llvm.org/PR680 , allowing targets to custom lower 
frame and return
address nodes.


---
Diffs of the changes:  (+20 -24)

 LegalizeDAG.cpp  |   10 ++
 SelectionDAG.cpp |2 ++
 SelectionDAGISel.cpp |   32 
 3 files changed, 20 insertions(+), 24 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.461 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.462
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.461 Sun Jan 28 10:04:40 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Jan 29 16:58:52 2007
@@ -652,6 +652,16 @@
   break;
 }
 break;
+  case ISD::FRAMEADDR:
+  case ISD::RETURNADDR:
+// The only option for these nodes is to custom lower them.  If the target
+// does not custom lower them, then return zero.
+Tmp1 = TLI.LowerOperation(Op, DAG);
+if (Tmp1.Val) 
+  Result = Tmp1;
+else
+  Result = DAG.getConstant(0, TLI.getPointerTy());
+break;
   case ISD::AssertSext:
   case ISD::AssertZext:
 Tmp1 = LegalizeOp(Node-getOperand(0));


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.378 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.379
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.378Fri Jan 26 
08:34:51 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Mon Jan 29 16:58:52 2007
@@ -2665,6 +2665,8 @@
   case ISD::FrameIndex:return FrameIndex;
   case ISD::JumpTable: return JumpTable;
   case ISD::GLOBAL_OFFSET_TABLE: return GLOBAL_OFFSET_TABLE;
+  case ISD::RETURNADDR: return RETURNADDR;
+  case ISD::FRAMEADDR: return FRAMEADDR;
   case ISD::ConstantPool:  return ConstantPool;
   case ISD::ExternalSymbol: return ExternalSymbol;
   case ISD::INTRINSIC_WO_CHAIN: {


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.349 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.350
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.349Sun Jan 28 
12:01:49 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Mon Jan 29 16:58:52 2007
@@ -570,7 +570,6 @@
   void visitVAArg(VAArgInst I);
   void visitVAEnd(CallInst I);
   void visitVACopy(CallInst I);
-  void visitFrameReturnAddress(CallInst I, bool isFrameAddress);
 
   void visitMemIntrinsic(CallInst I, unsigned Op);
 
@@ -1932,8 +1931,14 @@
   case Intrinsic::vastart:  visitVAStart(I); return 0;
   case Intrinsic::vaend:visitVAEnd(I); return 0;
   case Intrinsic::vacopy:   visitVACopy(I); return 0;
-  case Intrinsic::returnaddress: visitFrameReturnAddress(I, false); return 0;
-  case Intrinsic::frameaddress:  visitFrameReturnAddress(I, true); return 0;
+  case Intrinsic::returnaddress:
+setValue(I, DAG.getNode(ISD::RETURNADDR, TLI.getPointerTy(),
+ getValue(I.getOperand(1;
+return 0;
+  case Intrinsic::frameaddress:
+setValue(I, DAG.getNode(ISD::FRAMEADDR, TLI.getPointerTy(),
+ getValue(I.getOperand(1;
+return 0;
   case Intrinsic::setjmp:
 return _setjmp+!TLI.usesUnderscoreSetJmp();
 break;
@@ -3207,19 +3212,6 @@
   return std::make_pair(ResVal, Res.getValue(Res.Val-getNumValues()-1));
 }
 
-
-
-// It is always conservatively correct for llvm.returnaddress and
-// llvm.frameaddress to return 0.
-//
-// FIXME: Change this to insert a FRAMEADDR/RETURNADDR node, and have that be
-// expanded to 0 if the target wants.
-std::pairSDOperand, SDOperand
-TargetLowering::LowerFrameReturnAddress(bool isFrameAddr, SDOperand Chain,
-unsigned Depth, SelectionDAG DAG) {
-  return std::make_pair(DAG.getConstant(0, getPointerTy()), Chain);
-}
-
 SDOperand TargetLowering::LowerOperation(SDOperand Op, SelectionDAG DAG) {
   assert(0  LowerOperation not implemented for this target!);
   abort();
@@ -3233,14 +3225,6 @@
   return SDOperand();
 }
 
-void SelectionDAGLowering::visitFrameReturnAddress(CallInst I, bool isFrame) {
-  unsigned Depth = 
(unsigned)castConstantInt(I.getOperand(1))-getZExtValue();
-  std::pairSDOperand,SDOperand Result =
-TLI.LowerFrameReturnAddress(isFrame, getRoot(), Depth, DAG);
-  setValue(I, Result.first);
-  DAG.setRoot(Result.second);
-}
-
 /// getMemsetValue - Vectorized representation of the memset value
 /// operand.
 static SDOperand getMemsetValue(SDOperand Value, MVT::ValueType VT,



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-01-28 Thread Anton Korobeynikov


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.459 - 1.460
SelectionDAGISel.cpp updated: 1.346 - 1.347
---
Log message:

Propagate changes from my local tree. This patch includes:
1. New parameter attribute called 'inreg'. It has meaning place this 
parameter in registers, if possible. This is some generalization of 
gcc's regparm(n) attribute. It's currently used only in X86-32 backend.
2. Completely rewritten CC handling/lowering code inside X86 backend. 
Merged stdcall + c CCs and fastcall + fast CC.
3. Dropped CSRET CC. We cannot add struct return variant for each 
target-specific CC (e.g. stdcall + csretcc and so on).
4. Instead of CSRET CC introduced 'sret' parameter attribute. Setting in 
on first attribute has meaning 'This is hidden pointer to structure 
return. Handle it gently'.
5. Fixed small bug in llvm-extract + add new feature to 
FunctionExtraction pass, which relinks all internal-linkaged callees 
from deleted function to external linkage. This will allow further 
linking everything together.

NOTEs: 1. Documentation will be updated soon. 
   2. llvm-upgrade should be improved to translate csret = sret. 
  Before this, there will be some unexpected test fails.


---
Diffs of the changes:  (+33 -13)

 LegalizeDAG.cpp  |6 --
 SelectionDAGISel.cpp |   40 +---
 2 files changed, 33 insertions(+), 13 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.459 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.460
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.459 Fri Jan 26 15:22:28 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sun Jan 28 07:31:35 2007
@@ -2168,6 +2168,7 @@
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
 Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty = IntPtrTy;
+   Entry.isInReg = false;
 Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
@@ -2176,6 +2177,7 @@
 else
   Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
 Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSigned = true;
+   Entry.isInReg = false;
 Args.push_back(Entry);
 Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
 Args.push_back(Entry);
@@ -2183,7 +2185,7 @@
 FnName = memset;
   } else if (Node-getOpcode() == ISD::MEMCPY ||
  Node-getOpcode() == ISD::MEMMOVE) {
-Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Entry.Ty = IntPtrTy; Entry.isSigned = false; Entry.isInReg = false;
 Entry.Node = Tmp2; Args.push_back(Entry);
 Entry.Node = Tmp3; Args.push_back(Entry);
 Entry.Node = Tmp4; Args.push_back(Entry);
@@ -4124,7 +4126,7 @@
 MVT::ValueType ArgVT = Node-getOperand(i).getValueType();
 const Type *ArgTy = MVT::getTypeForValueType(ArgVT);
 Entry.Node = Node-getOperand(i); Entry.Ty = ArgTy; 
-Entry.isSigned = isSigned;
+Entry.isSigned = isSigned; Entry.isInReg = false;
 Args.push_back(Entry);
   }
   SDOperand Callee = DAG.getExternalSymbol(Name, TLI.getPointerTy());


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.346 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.347
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.346Fri Jan 26 
15:22:28 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sun Jan 28 07:31:35 2007
@@ -2167,6 +2167,8 @@
 SDOperand ArgNode = getValue(Arg);
 Entry.Node = ArgNode; Entry.Ty = Arg-getType();
 Entry.isSigned = FTy-paramHasAttr(i, FunctionType::SExtAttribute);
+Entry.isInReg  = FTy-paramHasAttr(i, FunctionType::InRegAttribute);
+Entry.isSRet   = FTy-paramHasAttr(i, FunctionType::StructRetAttribute);
 Args.push_back(Entry);
   }
 
@@ -2761,6 +2763,8 @@
   Entry.Node = Src;
   Entry.Ty = TLI.getTargetData()-getIntPtrType();
   Entry.isSigned = false;
+  Entry.isInReg = false;
+  Entry.isSRet = false;
   Args.push_back(Entry);
 
   std::pairSDOperand,SDOperand Result =
@@ -2777,6 +2781,8 @@
   Entry.Node = getValue(I.getOperand(0));
   Entry.Ty = TLI.getTargetData()-getIntPtrType();
   Entry.isSigned = false;
+  Entry.isInReg = false;
+  Entry.isSRet = false;
   Args.push_back(Entry);
   MVT::ValueType IntPtr = TLI.getPointerTy();
   std::pairSDOperand,SDOperand Result =
@@ -2859,6 +2865,7 @@
 /// integrated into SDISel.
 std::vectorSDOperand 
 TargetLowering::LowerArguments(Function F, SelectionDAG DAG) {
+  const FunctionType *FTy = F.getFunctionType();
   // Add CC# and isVararg as operands to the FORMAL_ARGUMENTS node.
   std::vectorSDOperand Ops;
   Ops.push_back(DAG.getRoot());
@@ -2867,16 +2874,22 @@
 
   // Add one result value for each formal argument.
   std::vectorMVT::ValueType RetVals;

Re: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-01-28 Thread Chris Lattner

 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Sun Jan 28  
 07:31:35 2007
 @@ -2168,6 +2168,7 @@
const char *FnName = 0;
if (Node-getOpcode() == ISD::MEMSET) {
  Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty =  
 IntPtrTy;
 + Entry.isInReg = false;

Please remove the tabs here and elsewhere.

// Add one result value for each formal argument.
std::vectorMVT::ValueType RetVals;
 +  unsigned j = 0;
for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();  
 I != E; ++I) {
  MVT::ValueType VT = getValueType(I-getType());
 +bool isInReg = FTy-paramHasAttr(++j,  
 FunctionType::InRegAttribute);

Please increment j in the for loop, e.g. ++I, ++j to make it more  
clear how j is evolving.

Overall, this is a great patch, nice work!

-Chris


___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-01-28 Thread Anton Korobeynikov


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.460 - 1.461
SelectionDAGISel.cpp updated: 1.347 - 1.348
---
Log message:

More cleanup


---
Diffs of the changes:  (+5 -4)

 LegalizeDAG.cpp  |4 ++--
 SelectionDAGISel.cpp |5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.460 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.461
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.460 Sun Jan 28 07:31:35 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sun Jan 28 10:04:40 2007
@@ -2168,7 +2168,7 @@
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
 Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty = IntPtrTy;
-   Entry.isInReg = false;
+Entry.isInReg = false;
 Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
@@ -2177,7 +2177,7 @@
 else
   Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
 Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSigned = true;
-   Entry.isInReg = false;
+Entry.isInReg = false;
 Args.push_back(Entry);
 Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
 Args.push_back(Entry);


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.347 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.348
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.347Sun Jan 28 
07:31:35 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sun Jan 28 10:04:40 2007
@@ -2875,9 +2875,10 @@
   // Add one result value for each formal argument.
   std::vectorMVT::ValueType RetVals;
   unsigned j = 0;
-  for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end(); I != E; ++I) 
{
+  for (Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
+   I != E; ++I, ++j) {
 MVT::ValueType VT = getValueType(I-getType());
-bool isInReg = FTy-paramHasAttr(++j, FunctionType::InRegAttribute);
+bool isInReg = FTy-paramHasAttr(j, FunctionType::InRegAttribute);
 bool isSRet  = FTy-paramHasAttr(j, FunctionType::StructRetAttribute);
 unsigned Flags = (isInReg  1) | (isSRet  2);
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp ScheduleDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

2007-01-26 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.457 - 1.458
ScheduleDAG.cpp updated: 1.116 - 1.117
SelectionDAG.cpp updated: 1.377 - 1.378
SelectionDAGISel.cpp updated: 1.344 - 1.345
---
Log message:

Make LABEL a builtin opcode.

---
Diffs of the changes:  (+11 -10)

 LegalizeDAG.cpp  |   12 ++--
 ScheduleDAG.cpp  |1 +
 SelectionDAG.cpp |2 +-
 SelectionDAGISel.cpp |6 +++---
 4 files changed, 11 insertions(+), 10 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.457 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.458
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.457 Sat Jan 20 16:35:55 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Jan 26 08:34:51 2007
@@ -737,9 +737,9 @@
 case TargetLowering::Expand: {
   MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
   bool useDEBUG_LOC = TLI.isOperationLegal(ISD::DEBUG_LOC, MVT::Other);
-  bool useDEBUG_LABEL = TLI.isOperationLegal(ISD::DEBUG_LABEL, MVT::Other);
+  bool useLABEL = TLI.isOperationLegal(ISD::LABEL, MVT::Other);
   
-  if (DebugInfo  (useDEBUG_LOC || useDEBUG_LABEL)) {
+  if (DebugInfo  (useDEBUG_LOC || useLABEL)) {
 const std::string FName =
   castStringSDNode(Node-getOperand(3))-getValue();
 const std::string DirName = 
@@ -761,7 +761,7 @@
   unsigned Col = castConstantSDNode(ColOp)-getValue();
   unsigned ID = DebugInfo-RecordLabel(Line, Col, SrcFile);
   Ops.push_back(DAG.getConstant(ID, MVT::i32));
-  Result = DAG.getNode(ISD::DEBUG_LABEL, 
MVT::Other,Ops[0],Ops.size());
+  Result = DAG.getNode(ISD::LABEL, MVT::Other,Ops[0],Ops.size());
 }
   } else {
 Result = Tmp1;  // chain
@@ -803,9 +803,9 @@
 }
 break;
 
-  case ISD::DEBUG_LABEL:
-assert(Node-getNumOperands() == 2  Invalid DEBUG_LABEL node!);
-switch (TLI.getOperationAction(ISD::DEBUG_LABEL, MVT::Other)) {
+  case ISD::LABEL:
+assert(Node-getNumOperands() == 2  Invalid LABEL node!);
+switch (TLI.getOperationAction(ISD::LABEL, MVT::Other)) {
 default: assert(0  This action is not supported yet!);
 case TargetLowering::Legal:
   Tmp1 = LegalizeOp(Node-getOperand(0));  // Legalize the chain.


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.116 
llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.117
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.116 Wed Jan 24 01:03:39 2007
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp   Fri Jan 26 08:34:51 2007
@@ -452,6 +452,7 @@
   assert(0  This target-independent node should have been selected!);
 case ISD::EntryToken: // fall thru
 case ISD::TokenFactor:
+case ISD::LABEL:
   break;
 case ISD::CopyToReg: {
   unsigned InReg;


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.377 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.378
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.377Thu Dec  7 
14:28:15 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Fri Jan 26 08:34:51 2007
@@ -2691,6 +2691,7 @@
   case ISD::UNDEF: return undef;
   case ISD::MERGE_VALUES:  return mergevalues;
   case ISD::INLINEASM: return inlineasm;
+  case ISD::LABEL: return label;
   case ISD::HANDLENODE:return handlenode;
   case ISD::FORMAL_ARGUMENTS: return formal_arguments;
   case ISD::CALL:  return call;
@@ -2811,7 +2812,6 @@
   // Debug info
   case ISD::LOCATION: return location;
   case ISD::DEBUG_LOC: return debug_loc;
-  case ISD::DEBUG_LABEL: return debug_label;
 
   case ISD::CONDCODE:
 switch (castCondCodeSDNode(this)-get()) {


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.344 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.345
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.344Sat Jan 20 
18:29:25 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Fri Jan 26 08:34:51 2007
@@ -1980,7 +1980,7 @@
 DbgRegionStartInst RSI = castDbgRegionStartInst(I);
 if (DebugInfo  RSI.getContext()  DebugInfo-Verify(RSI.getContext())) {
   unsigned LabelID = DebugInfo-RecordRegionStart(RSI.getContext());
-  DAG.setRoot(DAG.getNode(ISD::DEBUG_LABEL, MVT::Other, getRoot(),
+  DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
   DAG.getConstant(LabelID, MVT::i32)));
 }
 
@@ -1991,7 +1991,7 @@
 DbgRegionEndInst REI = castDbgRegionEndInst(I);
 if (DebugInfo  REI.getContext()  DebugInfo-Verify(REI.getContext())) {
   unsigned LabelID = DebugInfo-RecordRegionEnd(REI.getContext());
-  DAG.setRoot(DAG.getNode(ISD::DEBUG_LABEL, MVT::Other,
+  DAG.setRoot(DAG.getNode(ISD::LABEL, 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-01-26 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.458 - 1.459
SelectionDAGISel.cpp updated: 1.345 - 1.346
---
Log message:

Change the MachineDebugInfo to MachineModuleInfo to better reflect usage
for debugging and exception handling.


---
Diffs of the changes:  (+24 -24)

 LegalizeDAG.cpp  |8 
 SelectionDAGISel.cpp |   40 
 2 files changed, 24 insertions(+), 24 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.458 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.459
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.458 Fri Jan 26 08:34:51 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Jan 26 15:22:28 2007
@@ -735,16 +735,16 @@
 case TargetLowering::Promote:
 default: assert(0  This action is not supported yet!);
 case TargetLowering::Expand: {
-  MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
+  MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
   bool useDEBUG_LOC = TLI.isOperationLegal(ISD::DEBUG_LOC, MVT::Other);
   bool useLABEL = TLI.isOperationLegal(ISD::LABEL, MVT::Other);
   
-  if (DebugInfo  (useDEBUG_LOC || useLABEL)) {
+  if (MMI  (useDEBUG_LOC || useLABEL)) {
 const std::string FName =
   castStringSDNode(Node-getOperand(3))-getValue();
 const std::string DirName = 
   castStringSDNode(Node-getOperand(4))-getValue();
-unsigned SrcFile = DebugInfo-RecordSource(DirName, FName);
+unsigned SrcFile = MMI-RecordSource(DirName, FName);
 
 SmallVectorSDOperand, 8 Ops;
 Ops.push_back(Tmp1);  // chain
@@ -759,7 +759,7 @@
 } else {
   unsigned Line = castConstantSDNode(LineOp)-getValue();
   unsigned Col = castConstantSDNode(ColOp)-getValue();
-  unsigned ID = DebugInfo-RecordLabel(Line, Col, SrcFile);
+  unsigned ID = MMI-RecordLabel(Line, Col, SrcFile);
   Ops.push_back(DAG.getConstant(ID, MVT::i32));
   Result = DAG.getNode(ISD::LABEL, MVT::Other,Ops[0],Ops.size());
 }


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.345 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.346
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.345Fri Jan 26 
08:34:51 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Fri Jan 26 15:22:28 2007
@@ -24,7 +24,7 @@
 #include llvm/Instructions.h
 #include llvm/Intrinsics.h
 #include llvm/IntrinsicInst.h
-#include llvm/CodeGen/MachineDebugInfo.h
+#include llvm/CodeGen/MachineModuleInfo.h
 #include llvm/CodeGen/MachineFunction.h
 #include llvm/CodeGen/MachineFrameInfo.h
 #include llvm/CodeGen/MachineJumpTableInfo.h
@@ -1954,16 +1954,16 @@
 return 0;
 
   case Intrinsic::dbg_stoppoint: {
-MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
+MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
 DbgStopPointInst SPI = castDbgStopPointInst(I);
-if (DebugInfo  SPI.getContext()  DebugInfo-Verify(SPI.getContext())) {
+if (MMI  SPI.getContext()  MMI-Verify(SPI.getContext())) {
   SDOperand Ops[5];
 
   Ops[0] = getRoot();
   Ops[1] = getValue(SPI.getLineValue());
   Ops[2] = getValue(SPI.getColumnValue());
 
-  DebugInfoDesc *DD = DebugInfo-getDescFor(SPI.getContext());
+  DebugInfoDesc *DD = MMI-getDescFor(SPI.getContext());
   assert(DD  Not a debug information descriptor);
   CompileUnitDesc *CompileUnit = castCompileUnitDesc(DD);
   
@@ -1976,10 +1976,10 @@
 return 0;
   }
   case Intrinsic::dbg_region_start: {
-MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
+MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
 DbgRegionStartInst RSI = castDbgRegionStartInst(I);
-if (DebugInfo  RSI.getContext()  DebugInfo-Verify(RSI.getContext())) {
-  unsigned LabelID = DebugInfo-RecordRegionStart(RSI.getContext());
+if (MMI  RSI.getContext()  MMI-Verify(RSI.getContext())) {
+  unsigned LabelID = MMI-RecordRegionStart(RSI.getContext());
   DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other, getRoot(),
   DAG.getConstant(LabelID, MVT::i32)));
 }
@@ -1987,10 +1987,10 @@
 return 0;
   }
   case Intrinsic::dbg_region_end: {
-MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
+MachineModuleInfo *MMI = DAG.getMachineModuleInfo();
 DbgRegionEndInst REI = castDbgRegionEndInst(I);
-if (DebugInfo  REI.getContext()  DebugInfo-Verify(REI.getContext())) {
-  unsigned LabelID = DebugInfo-RecordRegionEnd(REI.getContext());
+if (MMI  REI.getContext()  MMI-Verify(REI.getContext())) {
+  unsigned LabelID = MMI-RecordRegionEnd(REI.getContext());
   DAG.setRoot(DAG.getNode(ISD::LABEL, MVT::Other,
   getRoot(), DAG.getConstant(LabelID, MVT::i32)));
 }

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2007-01-20 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.456 - 1.457
SelectionDAGISel.cpp updated: 1.342 - 1.343
---
Log message:

Teach TargetData to handle 'preferred' alignment for each target, and use 
these alignment amounts to align scalars when we can.  Patch by Scott Michel!



---
Diffs of the changes:  (+13 -15)

 LegalizeDAG.cpp  |   13 +
 SelectionDAGISel.cpp |   15 ---
 2 files changed, 13 insertions(+), 15 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.456 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.457
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.456 Fri Jan 19 15:13:56 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Jan 20 16:35:55 2007
@@ -3029,7 +3029,7 @@
 // new ones, as reuse may inhibit scheduling.
 const Type *Ty = MVT::getTypeForValueType(ExtraVT);
 unsigned TySize = (unsigned)TLI.getTargetData()-getTypeSize(Ty);
-unsigned Align  = TLI.getTargetData()-getTypeAlignment(Ty);
+unsigned Align  = TLI.getTargetData()-getTypeAlignmentPref(Ty);
 MachineFunction MF = DAG.getMachineFunction();
 int SSFI =
   MF.getFrameInfo()-CreateStackObject((unsigned)TySize, Align);
@@ -3937,7 +3937,9 @@
 SDOperand SelectionDAGLegalize::CreateStackTemporary(MVT::ValueType VT) {
   MachineFrameInfo *FrameInfo = DAG.getMachineFunction().getFrameInfo();
   unsigned ByteSize = MVT::getSizeInBits(VT)/8;
-  int FrameIdx = FrameInfo-CreateStackObject(ByteSize, ByteSize);
+  const Type *Ty = MVT::getTypeForValueType(VT);
+  unsigned StackAlign = 
(unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty);
+  int FrameIdx = FrameInfo-CreateStackObject(ByteSize, StackAlign);
   return DAG.getFrameIndex(FrameIdx, TLI.getPointerTy());
 }
 
@@ -4242,9 +4244,12 @@
   if (Op0.getValueType() == MVT::i32) {
 // simple 32-bit [signed|unsigned] integer to float/double expansion
 
-// get the stack frame index of a 8 byte buffer
+// get the stack frame index of a 8 byte buffer, pessimistically aligned
 MachineFunction MF = DAG.getMachineFunction();
-int SSFI = MF.getFrameInfo()-CreateStackObject(8, 8);
+const Type *F64Type = MVT::getTypeForValueType(MVT::f64);
+unsigned StackAlign =
+  (unsigned)TLI.getTargetData()-getTypeAlignmentPref(F64Type);
+int SSFI = MF.getFrameInfo()-CreateStackObject(8, StackAlign);
 // get address of 8 byte buffer
 SDOperand StackSlot = DAG.getFrameIndex(SSFI, TLI.getPointerTy());
 // word offset constant for Hi/Lo address computation


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.342 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.343
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.342Thu Jan 11 
06:24:14 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sat Jan 20 16:35:55 2007
@@ -244,17 +244,9 @@
 const Type *Ty = AI-getAllocatedType();
 uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
 unsigned Align = 
-  std::max((unsigned)TLI.getTargetData()-getTypeAlignment(Ty),
+  std::max((unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty),
AI-getAlignment());
 
-// If the alignment of the value is smaller than the size of the 
-// value, and if the size of the value is particularly small 
-// (= 8 bytes), round up to the size of the value for potentially 
-// better performance.
-//
-// FIXME: This could be made better with a preferred alignment hook in
-// TargetData.  It serves primarily to 8-byte align doubles for X86.
-if (Align  TySize  TySize = 8) Align = TySize;
 TySize *= CUI-getZExtValue();   // Get total allocated size.
 if (TySize == 0) TySize = 1; // Don't create zero-sized stack objects.
 StaticAllocaMap[AI] =
@@ -1729,8 +1721,9 @@
 
   const Type *Ty = I.getAllocatedType();
   uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
-  unsigned Align = 
std::max((unsigned)TLI.getTargetData()-getTypeAlignment(Ty),
-I.getAlignment());
+  unsigned Align =
+std::max((unsigned)TLI.getTargetData()-getTypeAlignmentPref(Ty),
+ I.getAlignment());
 
   SDOperand AllocSize = getValue(I.getArraySize());
   MVT::ValueType IntPtr = TLI.getPointerTy();



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-01-19 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.455 - 1.456
---
Log message:

For PR1043: http://llvm.org/PR1043 :
This is the final patch for this PR. It implements some minor cleanup 
in the use of IntegerType, to wit:
1. Type::getIntegerTypeMask - IntegerType::getBitMask
2. Type::Int*Ty changed to IntegerType* from Type*
3. ConstantInt::getType() returns IntegerType* now, not Type*

This also fixes PR1120: http://llvm.org/PR1120 .

Patch by Sheng Zhou.



---
Diffs of the changes:  (+1 -0)

 LegalizeDAG.cpp |1 +
 1 files changed, 1 insertion(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.455 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.456
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.455 Thu Jan 11 20:11:51 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Jan 19 15:13:56 2007
@@ -21,6 +21,7 @@
 #include llvm/Target/TargetOptions.h
 #include llvm/CallingConv.h
 #include llvm/Constants.h
+#include llvm/DerivedTypes.h
 #include llvm/Support/MathExtras.h
 #include llvm/Support/CommandLine.h
 #include llvm/Support/Compiler.h



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp TargetLowering.cpp

2007-01-11 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.454 - 1.455
TargetLowering.cpp updated: 1.83 - 1.84
---
Log message:

Store default libgcc routine names and allow them to be redefined by target.

---
Diffs of the changes:  (+205 -82)

 LegalizeDAG.cpp|  210 -
 TargetLowering.cpp |   77 +++
 2 files changed, 205 insertions(+), 82 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.454 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.455
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.454 Fri Jan  5 17:33:44 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Jan 11 20:11:51 2007
@@ -2284,11 +2284,11 @@
 default:  assert(0  Do not know how to expand this integer BinOp!);
 case ISD::UDIV:
 case ISD::SDIV:
-  const char *FnName = Node-getOpcode() == ISD::UDIV
-? __udivsi3 : __divsi3;
+  RTLIB::Libcall LC = Node-getOpcode() == ISD::UDIV
+? RTLIB::UDIV_I32 : RTLIB::SDIV_I32;
   SDOperand Dummy;
   bool isSigned = Node-getOpcode() == ISD::SDIV;
-  Result = ExpandLibCall(FnName, Node, isSigned, Dummy);
+  Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, 
Dummy);
 };
 break;
   }
@@ -2470,16 +2470,18 @@
 } else {
   assert(Node-getValueType(0) == MVT::i32 
  Cannot expand this binary operator!);
-  const char *FnName = Node-getOpcode() == ISD::UREM
-? __umodsi3 : __modsi3;
+  RTLIB::Libcall LC = Node-getOpcode() == ISD::UREM
+? RTLIB::UREM_I32 : RTLIB::SREM_I32;
   SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, isSigned, Dummy);
+  Result = ExpandLibCall(TLI.getLibcallName(LC), Node, isSigned, 
Dummy);
 }
   } else {
 // Floating point mod - fmod libcall.
-const char *FnName = Node-getValueType(0) == MVT::f32 ? 
fmodf:fmod;
+RTLIB::Libcall LC = Node-getValueType(0) == MVT::f32
+  ? RTLIB::REM_F32 : RTLIB::REM_F64;
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
+Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
+   false/*sign irrelevant*/, Dummy);
   }
   break;
 }
@@ -2720,15 +2722,22 @@
   case ISD::FSIN:
   case ISD::FCOS: {
 MVT::ValueType VT = Node-getValueType(0);
-const char *FnName = 0;
+RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
 switch(Node-getOpcode()) {
-case ISD::FSQRT: FnName = VT == MVT::f32 ? sqrtf : sqrt; break;
-case ISD::FSIN:  FnName = VT == MVT::f32 ? sinf  : sin; break;
-case ISD::FCOS:  FnName = VT == MVT::f32 ? cosf  : cos; break;
+case ISD::FSQRT:
+  LC = VT == MVT::f32 ? RTLIB::SQRT_F32 : RTLIB::SQRT_F64;
+  break;
+case ISD::FSIN:
+  LC = VT == MVT::f32 ? RTLIB::SIN_F32 : RTLIB::SIN_F64;
+  break;
+case ISD::FCOS:
+  LC = VT == MVT::f32 ? RTLIB::COS_F32 : RTLIB::COS_F64;
+  break;
 default: assert(0  Unreachable!);
 }
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
+Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
+   false/*sign irrelevant*/, Dummy);
 break;
   }
   }
@@ -2737,10 +2746,11 @@
 break;
   case ISD::FPOWI: {
 // We always lower FPOWI into a libcall.  No target support it yet.
-const char *FnName = Node-getValueType(0) == MVT::f32
-? __powisf2 : __powidf2;
+RTLIB::Libcall LC = Node-getValueType(0) == MVT::f32
+  ? RTLIB::POWI_F32 : RTLIB::POWI_F64;
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
+Result = ExpandLibCall(TLI.getLibcallName(LC), Node,
+   false/*sign irrelevant*/, Dummy);
 break;
   }
   case ISD::BIT_CONVERT:
@@ -2909,24 +2919,29 @@
 case Expand: {
   // Convert f32 / f64 to i32 / i64.
   MVT::ValueType VT = Op.getValueType();
-  const char *FnName = 0;
+  RTLIB::Libcall LC = RTLIB::UNKNOWN_LIBCALL;
   switch (Node-getOpcode()) {
   case ISD::FP_TO_SINT:
 if (Node-getOperand(0).getValueType() == MVT::f32)
-  FnName = (VT == MVT::i32) ? __fixsfsi : __fixsfdi;
+  LC = (VT == MVT::i32)
+? RTLIB::FPTOSINT_F32_I32 : RTLIB::FPTOSINT_F32_I64;
 else
-  FnName = (VT == MVT::i32) ? __fixdfsi : __fixdfdi;
+  LC = (VT == MVT::i32)
+? RTLIB::FPTOSINT_F64_I32 : RTLIB::FPTOSINT_F64_I64;
 break;
   case ISD::FP_TO_UINT:
 if (Node-getOperand(0).getValueType() == MVT::f32)
-  FnName = (VT 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-01-05 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.452 - 1.453
---
Log message:

Bug in ExpandFCOPYSIGNToBitwiseOps(). Clear the old sign bit of operand 0
before or'ing in the sign bit of operand 1.  

---
Diffs of the changes:  (+14 -4)

 LegalizeDAG.cpp |   18 ++
 1 files changed, 14 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.452 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.453
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.452 Thu Jan  4 15:56:39 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Jan  5 15:31:51 2007
@@ -533,15 +533,17 @@
 static
 SDOperand ExpandFCOPYSIGNToBitwiseOps(SDNode *Node, MVT::ValueType NVT,
   SelectionDAG DAG, TargetLowering TLI) {
+  MVT::ValueType VT = Node-getValueType(0);
   MVT::ValueType SrcVT = Node-getOperand(1).getValueType();
   MVT::ValueType SrcNVT = (SrcVT == MVT::f64) ? MVT::i64 : MVT::i32;
+
   // First get the sign bit of second operand.
-  SDOperand Mask = (SrcVT == MVT::f64)
+  SDOperand Mask1 = (SrcVT == MVT::f64)
 ? DAG.getConstantFP(BitsToDouble(1ULL  63), SrcVT)
 : DAG.getConstantFP(BitsToFloat(1U  31), SrcVT);
-  Mask = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask);
+  Mask1 = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask1);
   SDOperand SignBit= DAG.getNode(ISD::BIT_CONVERT, SrcNVT, 
Node-getOperand(1));
-  SignBit = DAG.getNode(ISD::AND, SrcNVT, SignBit, Mask);
+  SignBit = DAG.getNode(ISD::AND, SrcNVT, SignBit, Mask1);
   // Shift right or sign-extend it if the two operands have different types.
   int SizeDiff = MVT::getSizeInBits(SrcNVT) - MVT::getSizeInBits(NVT);
   if (SizeDiff  0) {
@@ -550,8 +552,16 @@
 SignBit = DAG.getNode(ISD::TRUNCATE, NVT, SignBit);
   } else if (SizeDiff  0)
 SignBit = DAG.getNode(ISD::SIGN_EXTEND, NVT, SignBit);
-  // Or the first operand with the sign bit.
+
+  // Clear the sign bit of first operand.
+  SDOperand Mask2 = (VT == MVT::f64)
+? DAG.getConstantFP(BitsToDouble(~(1ULL  63)), VT)
+: DAG.getConstantFP(BitsToFloat(~(1U  31)), VT);
+  Mask2 = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask2);
   SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+  Result = DAG.getNode(ISD::AND, NVT, Result, Mask2);
+
+  // Or the value with the sign bit.
   Result = DAG.getNode(ISD::OR, NVT, Result, SignBit);
   return Result;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-01-04 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.451 - 1.452
---
Log message:

Expand fcopysign to a series of bitwise of operations when it's profitable to
do so.

---
Diffs of the changes:  (+46 -19)

 LegalizeDAG.cpp |   65 +++-
 1 files changed, 46 insertions(+), 19 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.451 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.452
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.451 Tue Jan  2 22:22:32 2007
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Jan  4 15:56:39 2007
@@ -528,6 +528,35 @@
 }
 
 
+/// ExpandFCOPYSIGNToBitwiseOps - Expands fcopysign to a series of bitwise
+/// operations.
+static
+SDOperand ExpandFCOPYSIGNToBitwiseOps(SDNode *Node, MVT::ValueType NVT,
+  SelectionDAG DAG, TargetLowering TLI) {
+  MVT::ValueType SrcVT = Node-getOperand(1).getValueType();
+  MVT::ValueType SrcNVT = (SrcVT == MVT::f64) ? MVT::i64 : MVT::i32;
+  // First get the sign bit of second operand.
+  SDOperand Mask = (SrcVT == MVT::f64)
+? DAG.getConstantFP(BitsToDouble(1ULL  63), SrcVT)
+: DAG.getConstantFP(BitsToFloat(1U  31), SrcVT);
+  Mask = DAG.getNode(ISD::BIT_CONVERT, SrcNVT, Mask);
+  SDOperand SignBit= DAG.getNode(ISD::BIT_CONVERT, SrcNVT, 
Node-getOperand(1));
+  SignBit = DAG.getNode(ISD::AND, SrcNVT, SignBit, Mask);
+  // Shift right or sign-extend it if the two operands have different types.
+  int SizeDiff = MVT::getSizeInBits(SrcNVT) - MVT::getSizeInBits(NVT);
+  if (SizeDiff  0) {
+SignBit = DAG.getNode(ISD::SRL, SrcNVT, SignBit,
+  DAG.getConstant(SizeDiff, TLI.getShiftAmountTy()));
+SignBit = DAG.getNode(ISD::TRUNCATE, NVT, SignBit);
+  } else if (SizeDiff  0)
+SignBit = DAG.getNode(ISD::SIGN_EXTEND, NVT, SignBit);
+  // Or the first operand with the sign bit.
+  SDOperand Result = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+  Result = DAG.getNode(ISD::OR, NVT, Result, SignBit);
+  return Result;
+}
+
+
 /// LegalizeOp - We know that the specified value has a legal type.
 /// Recursively ensure that the operands have legal types, then return the
 /// result.
@@ -2314,10 +2343,12 @@
   if (Tmp1.Val) Result = Tmp1;
   break;
 case TargetLowering::Legal: break;
-case TargetLowering::Expand:
+case TargetLowering::Expand: {
   // If this target supports fabs/fneg natively, do this efficiently.
-  if (TLI.isOperationLegal(ISD::FABS, Tmp1.getValueType()) 
-  TLI.isOperationLegal(ISD::FNEG, Tmp1.getValueType())) {
+  if (TLI.getOperationAction(ISD::FABS, Tmp1.getValueType()) ==
+ TargetLowering::Legal 
+  TLI.getOperationAction(ISD::FNEG, Tmp1.getValueType()) ==
+ TargetLowering::Legal) {
 // Get the sign bit of the RHS.
 MVT::ValueType IVT = 
   Tmp2.getValueType() == MVT::f32 ? MVT::i32 : MVT::i64;
@@ -2337,24 +2368,14 @@
   }
   
   // Otherwise, do bitwise ops!
-  
-  // copysign - copysignf/copysign libcall.
-  const char *FnName;
-  if (Node-getValueType(0) == MVT::f32) {
-FnName = copysignf;
-if (Tmp2.getValueType() != MVT::f32)  // Force operands to match type.
-  Result = DAG.UpdateNodeOperands(Result, Tmp1, 
-DAG.getNode(ISD::FP_ROUND, MVT::f32, 
Tmp2));
-  } else {
-FnName = copysign;
-if (Tmp2.getValueType() != MVT::f64)  // Force operands to match type.
-  Result = DAG.UpdateNodeOperands(Result, Tmp1, 
-   DAG.getNode(ISD::FP_EXTEND, MVT::f64, 
Tmp2));
-  }
-  SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
+  MVT::ValueType NVT = 
+Node-getValueType(0) == MVT::f32 ? MVT::i32 : MVT::i64;
+  Result = ExpandFCOPYSIGNToBitwiseOps(Node, NVT, DAG, TLI);
+  Result = DAG.getNode(ISD::BIT_CONVERT, Node-getValueType(0), Result);
+  Result = LegalizeOp(Result);
   break;
 }
+}
 break;
 
   case ISD::ADDC:
@@ -5123,6 +5144,12 @@
   ExpandOp(Lo, Lo, Hi);
 break;
   }
+  case ISD::FCOPYSIGN: {
+Lo = ExpandFCOPYSIGNToBitwiseOps(Node, NVT, DAG, TLI);
+if (getTypeAction(NVT) == Expand)
+  ExpandOp(Lo, Lo, Hi);
+break;
+  }
   case ISD::SINT_TO_FP:
   case ISD::UINT_TO_FP: {
 bool isSigned = Node-getOpcode() == ISD::SINT_TO_FP;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2007-01-02 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.450 - 1.451
---
Log message:

Clean up from recent changes. Comment the new parameter to ExpandLibCall.
Consolidate some lines of code and remove duplication.


---
Diffs of the changes:  (+20 -24)

 LegalizeDAG.cpp |   44 
 1 files changed, 20 insertions(+), 24 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.450 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.451
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.450 Sat Dec 30 23:55:36 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Jan  2 22:22:32 2007
@@ -2127,9 +2127,7 @@
 
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
-Entry.Node = Tmp2;
-Entry.Ty = IntPtrTy;
-Entry.isSigned = false;
+Entry.Node = Tmp2; Entry.isSigned = false; Entry.Ty = IntPtrTy;
 Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
@@ -2145,12 +2143,10 @@
 FnName = memset;
   } else if (Node-getOpcode() == ISD::MEMCPY ||
  Node-getOpcode() == ISD::MEMMOVE) {
-Entry.Node = Tmp2; Entry.Ty = IntPtrTy; Entry.isSigned = false;
-Args.push_back(Entry);
-Entry.Node = Tmp3; Entry.Ty = IntPtrTy; Entry.isSigned = false;
-Args.push_back(Entry);
-Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
-Args.push_back(Entry);
+Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Entry.Node = Tmp2; Args.push_back(Entry);
+Entry.Node = Tmp3; Args.push_back(Entry);
+Entry.Node = Tmp4; Args.push_back(Entry);
 FnName = Node-getOpcode() == ISD::MEMMOVE ? memmove : memcpy;
   } else {
 assert(0  Unknown op!);
@@ -2356,7 +2352,7 @@
DAG.getNode(ISD::FP_EXTEND, MVT::f64, 
Tmp2));
   }
   SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, false, Dummy);
+  Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
   break;
 }
 break;
@@ -2450,7 +2446,7 @@
 // Floating point mod - fmod libcall.
 const char *FnName = Node-getValueType(0) == MVT::f32 ? 
fmodf:fmod;
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false, Dummy);
+Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
   }
   break;
 }
@@ -2699,7 +2695,7 @@
 default: assert(0  Unreachable!);
 }
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false, Dummy);
+Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
 break;
   }
   }
@@ -2711,7 +2707,7 @@
 const char *FnName = Node-getValueType(0) == MVT::f32
 ? __powisf2 : __powidf2;
 SDOperand Dummy;
-Result = ExpandLibCall(FnName, Node, false, Dummy);
+Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
 break;
   }
   case ISD::BIT_CONVERT:
@@ -2897,7 +2893,7 @@
   default: assert(0  Unreachable!);
   }
   SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, false, Dummy);
+  Result = ExpandLibCall(FnName, Node, false/*sign irrelevant*/, Dummy);
   break;
 }
 case Promote:
@@ -3621,14 +3617,14 @@
   SDOperand Dummy;
   Tmp1 = ExpandLibCall(FnName1,
DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
-   false, Dummy);
+   false /*sign irrelevant*/, Dummy);
   Tmp2 = DAG.getConstant(0, MVT::i32);
   CC = DAG.getCondCode(CC1);
   if (FnName2) {
 Tmp1 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), Tmp1, Tmp2, CC);
 LHS = ExpandLibCall(FnName2,
 DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
-false, Dummy);
+false /*sign irrelevant*/, Dummy);
 Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHS, Tmp2,
DAG.getCondCode(CC2));
 Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp2);
@@ -4836,9 +4832,9 @@
 }
 
 if (Node-getOperand(0).getValueType() == MVT::f32)
-  Lo = ExpandLibCall(__fixsfdi, Node, false, Hi);
+  Lo = ExpandLibCall(__fixsfdi, Node, false/*sign irrelevant*/, Hi);
 else
-  Lo = ExpandLibCall(__fixdfdi, Node, false, Hi);
+  Lo = ExpandLibCall(__fixdfdi, Node, false/*sign irrelevant*/, Hi);
 break;
 
   case ISD::FP_TO_UINT:
@@ -4860,9 +4856,9 @@
 }
 
 if (Node-getOperand(0).getValueType() == MVT::f32)
-  Lo = ExpandLibCall(__fixunssfdi, Node, false, Hi);
+  Lo = ExpandLibCall(__fixunssfdi, Node, false/*sign irrelevant*/, Hi);
 else
-  Lo = 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2006-12-30 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.449 - 1.450
SelectionDAGISel.cpp updated: 1.334 - 1.335
---
Log message:

For PR950: http://llvm.org/PR950 :
Three changes:
1. Convert signed integer types to signless versions.
2. Implement the @sext and @zext parameter attributes. Previously the
   type of an function parameter was used to determine whether it should
   be sign extended or zero extended before the call. This information is
   now communicated via the function type's parameter attributes. 
3. The interface to LowerCallTo had to be changed in order to accommodate
   the parameter attribute information. Although it would have been
   convenient to pass in the FunctionType itself, there isn't always one
   present in the caller. Consequently, a signedness indication for the
   result type and for each parameter was provided for in the interface
   to this method. All implementations were changed to make the adjustment
   necessary.


---
Diffs of the changes:  (+119 -97)

 LegalizeDAG.cpp  |  108 ++-
 SelectionDAGISel.cpp |  108 +--
 2 files changed, 119 insertions(+), 97 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.449 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.450
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.449 Mon Dec 18 19:44:04 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Dec 30 23:55:36 2006
@@ -186,7 +186,7 @@
 
   SDOperand CreateStackTemporary(MVT::ValueType VT);
 
-  SDOperand ExpandLibCall(const char *Name, SDNode *Node,
+  SDOperand ExpandLibCall(const char *Name, SDNode *Node, bool isSigned,
   SDOperand Hi);
   SDOperand ExpandIntToFP(bool isSigned, MVT::ValueType DestTy,
   SDOperand Source);
@@ -2122,33 +2122,42 @@
   // operation to an explicit libcall as appropriate.
   MVT::ValueType IntPtr = TLI.getPointerTy();
   const Type *IntPtrTy = TLI.getTargetData()-getIntPtrType();
-  std::vectorstd::pairSDOperand, const Type*  Args;
+  TargetLowering::ArgListTy Args;
+  TargetLowering::ArgListEntry Entry;
 
   const char *FnName = 0;
   if (Node-getOpcode() == ISD::MEMSET) {
-Args.push_back(std::make_pair(Tmp2, IntPtrTy));
+Entry.Node = Tmp2;
+Entry.Ty = IntPtrTy;
+Entry.isSigned = false;
+Args.push_back(Entry);
 // Extend the (previously legalized) ubyte argument to be an int value
 // for the call.
 if (Tmp3.getValueType()  MVT::i32)
   Tmp3 = DAG.getNode(ISD::TRUNCATE, MVT::i32, Tmp3);
 else
   Tmp3 = DAG.getNode(ISD::ZERO_EXTEND, MVT::i32, Tmp3);
-Args.push_back(std::make_pair(Tmp3, Type::IntTy));
-Args.push_back(std::make_pair(Tmp4, IntPtrTy));
+Entry.Node = Tmp3; Entry.Ty = Type::Int32Ty; Entry.isSigned = true;
+Args.push_back(Entry);
+Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Args.push_back(Entry);
 
 FnName = memset;
   } else if (Node-getOpcode() == ISD::MEMCPY ||
  Node-getOpcode() == ISD::MEMMOVE) {
-Args.push_back(std::make_pair(Tmp2, IntPtrTy));
-Args.push_back(std::make_pair(Tmp3, IntPtrTy));
-Args.push_back(std::make_pair(Tmp4, IntPtrTy));
+Entry.Node = Tmp2; Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Args.push_back(Entry);
+Entry.Node = Tmp3; Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Args.push_back(Entry);
+Entry.Node = Tmp4; Entry.Ty = IntPtrTy; Entry.isSigned = false;
+Args.push_back(Entry);
 FnName = Node-getOpcode() == ISD::MEMMOVE ? memmove : memcpy;
   } else {
 assert(0  Unknown op!);
   }
 
   std::pairSDOperand,SDOperand CallResult =
-TLI.LowerCallTo(Tmp1, Type::VoidTy, false, CallingConv::C, false,
+TLI.LowerCallTo(Tmp1, Type::VoidTy, false, false, CallingConv::C, 
false,
 DAG.getExternalSymbol(FnName, IntPtr), Args, DAG);
   Result = CallResult.second;
   break;
@@ -2243,7 +2252,8 @@
   const char *FnName = Node-getOpcode() == ISD::UDIV
 ? __udivsi3 : __divsi3;
   SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, Dummy);
+  bool isSigned = Node-getOpcode() == ISD::SDIV;
+  Result = ExpandLibCall(FnName, Node, isSigned, Dummy);
 };
 break;
   }
@@ -2346,7 +2356,7 @@
DAG.getNode(ISD::FP_EXTEND, MVT::f64, 
Tmp2));
   }
   SDOperand Dummy;
-  Result = ExpandLibCall(FnName, Node, Dummy);
+  Result = ExpandLibCall(FnName, Node, false, Dummy);
   break;
 }
 break;
@@ -2419,6 +2429,7 @@
   break;
 case TargetLowering::Expand:
   unsigned DivOpc= 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-15 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.443 - 1.444
---
Log message:

Fix select_cc, select expansion to soft-fp bugs.

---
Diffs of the changes:  (+11 -3)

 LegalizeDAG.cpp |   14 +++---
 1 files changed, 11 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.443 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.444
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.443 Fri Dec 15 01:36:19 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec 15 16:42:55 2006
@@ -4705,18 +4705,24 @@
 SDOperand LL, LH, RL, RH;
 ExpandOp(Node-getOperand(1), LL, LH);
 ExpandOp(Node-getOperand(2), RL, RH);
+if (getTypeAction(NVT) == Expand)
+  NVT = TLI.getTypeToExpandTo(NVT);
 Lo = DAG.getNode(ISD::SELECT, NVT, Node-getOperand(0), LL, RL);
-Hi = DAG.getNode(ISD::SELECT, NVT, Node-getOperand(0), LH, RH);
+if (VT != MVT::f32)
+  Hi = DAG.getNode(ISD::SELECT, NVT, Node-getOperand(0), LH, RH);
 break;
   }
   case ISD::SELECT_CC: {
 SDOperand TL, TH, FL, FH;
 ExpandOp(Node-getOperand(2), TL, TH);
 ExpandOp(Node-getOperand(3), FL, FH);
+if (getTypeAction(NVT) == Expand)
+  NVT = TLI.getTypeToExpandTo(NVT);
 Lo = DAG.getNode(ISD::SELECT_CC, NVT, Node-getOperand(0),
  Node-getOperand(1), TL, FL, Node-getOperand(4));
-Hi = DAG.getNode(ISD::SELECT_CC, NVT, Node-getOperand(0),
- Node-getOperand(1), TH, FH, Node-getOperand(4));
+if (VT != MVT::f32)
+  Hi = DAG.getNode(ISD::SELECT_CC, NVT, Node-getOperand(0),
+   Node-getOperand(1), TH, FH, Node-getOperand(4));
 break;
   }
   case ISD::ANY_EXTEND:
@@ -4761,6 +4767,8 @@
 // f32 / f64 must be expanded to i32 / i64.
 if (VT == MVT::f32 || VT == MVT::f64) {
   Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+  if (getTypeAction(NVT) == Expand)
+ExpandOp(Lo, Lo, Hi);
   break;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-15 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.444 - 1.445
---
Log message:

Expand fabs / fneg to and / xor.

---
Diffs of the changes:  (+22 -3)

 LegalizeDAG.cpp |   25 ++---
 1 files changed, 22 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.444 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.445
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.444 Fri Dec 15 16:42:55 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec 15 18:52:40 2006
@@ -5055,9 +5055,6 @@
   case ISD::SREM: Lo = ExpandLibCall(__moddi3 , Node, Hi); break;
   case ISD::UREM: Lo = ExpandLibCall(__umoddi3, Node, Hi); break;
 
-  case ISD::FNEG:
-Lo = ExpandLibCall(((VT == MVT::f32) ? __negsf2 : __negdf2), Node, Hi);
-break;
   case ISD::FADD:
 Lo = ExpandLibCall(((VT == MVT::f32) ? __addsf3 : __adddf3), Node, Hi);
 break;
@@ -5107,6 +5104,28 @@
 Lo = ExpandLibCall(FnName, Node, Hi);
 break;
   }
+  case ISD::FABS: {
+SDOperand Mask = (VT == MVT::f64)
+  ? DAG.getConstantFP(BitsToDouble(~(1ULL  63)), VT)
+  : DAG.getConstantFP(BitsToFloat(~(1U  31)), VT);
+Mask = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask);
+Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+Lo = DAG.getNode(ISD::AND, NVT, Lo, Mask);
+if (getTypeAction(NVT) == Expand)
+  ExpandOp(Lo, Lo, Hi);
+break;
+  }
+  case ISD::FNEG: {
+SDOperand Mask = (VT == MVT::f64)
+  ? DAG.getConstantFP(BitsToDouble(1ULL  63), VT)
+  : DAG.getConstantFP(BitsToFloat(1U  31), VT);
+Mask = DAG.getNode(ISD::BIT_CONVERT, NVT, Mask);
+Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+Lo = DAG.getNode(ISD::XOR, NVT, Lo, Mask);
+if (getTypeAction(NVT) == Expand)
+  ExpandOp(Lo, Lo, Hi);
+break;
+  }
   }
 
   // Make sure the resultant values have been legalized themselves, unless this



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-15 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.445 - 1.446
---
Log message:

Allow promoted FP_TO_UINT / FP_TO_SINT to expand operand.

---
Diffs of the changes:  (+1 -2)

 LegalizeDAG.cpp |3 +--
 1 files changed, 1 insertion(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.445 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.446
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.445 Fri Dec 15 18:52:40 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec 15 20:10:30 2006
@@ -3155,6 +3155,7 @@
   case ISD::FP_TO_UINT:
 switch (getTypeAction(Node-getOperand(0).getValueType())) {
 case Legal:
+case Expand:
   Tmp1 = Node-getOperand(0);
   break;
 case Promote:
@@ -3162,8 +3163,6 @@
   // special.
   Tmp1 = PromoteOp(Node-getOperand(0));
   break;
-case Expand:
-  assert(0  not implemented);
 }
 // If we're promoting a UINT to a larger size, check to see if the new node
 // will be legal.  If it isn't, check to see if FP_TO_SINT is legal, since



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-15 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.446 - 1.447
---
Log message:

Expand FP undef

---
Diffs of the changes:  (+1 -0)

 LegalizeDAG.cpp |1 +
 1 files changed, 1 insertion(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.446 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.447
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.446 Fri Dec 15 20:10:30 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec 15 20:20:50 2006
@@ -4523,6 +4523,7 @@
 assert(0  Do not know how to expand this operator!);
 abort();
   case ISD::UNDEF:
+NVT = TLI.getTypeToExpandTo(VT);
 Lo = DAG.getNode(ISD::UNDEF, NVT);
 Hi = DAG.getNode(ISD::UNDEF, NVT);
 break;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-14 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.441 - 1.442
---
Log message:

Expand FP compares to soft-fp call(s)

---
Diffs of the changes:  (+102 -7)

 LegalizeDAG.cpp |  109 
 1 files changed, 102 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.441 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.442
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.441 Thu Dec 14 13:17:33 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Thu Dec 14 20:59:56 2006
@@ -2011,10 +2011,10 @@
   isCustom = true;
   // FALLTHROUGH.
 case TargetLowering::Legal:
-  Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node-getOperand(2));
+  Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
   if (isCustom) {
-Tmp3 = TLI.LowerOperation(Result, DAG);
-if (Tmp3.Val) Result = Tmp3;
+Tmp4 = TLI.LowerOperation(Result, DAG);
+if (Tmp4.Val) Result = Tmp4;
   }
   break;
 case TargetLowering::Promote: {
@@ -2045,7 +2045,7 @@
   }
   Tmp1 = LegalizeOp(Tmp1);
   Tmp2 = LegalizeOp(Tmp2);
-  Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node-getOperand(2));
+  Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
   Result = LegalizeOp(Result);
   break;
 }
@@ -2055,7 +2055,7 @@
   MVT::ValueType VT = Node-getValueType(0);
   Result = DAG.getNode(ISD::SELECT_CC, VT, Tmp1, Tmp2, 
DAG.getConstant(1, VT), DAG.getConstant(0, VT),
-   Node-getOperand(2));
+   Tmp3);
   break;
 }
 break;
@@ -3533,10 +3533,104 @@
   }
 }
 break;
-  case Expand:
+  case Expand: {
+MVT::ValueType VT = LHS.getValueType();
+if (VT == MVT::f32 || VT == MVT::f64) {
+  // Expand into one or more soft-fp libcall(s).
+  const char *FnName1 = NULL, *FnName2 = NULL;
+  ISD::CondCode CC1, CC2;
+  switch (castCondCodeSDNode(CC)-get()) {
+  case ISD::SETEQ:
+  case ISD::SETOEQ:
+FnName1 = (VT == MVT::f32) ? __eqsf2 : __eqdf2;
+CC1 = ISD::SETEQ;
+break;
+  case ISD::SETNE:
+  case ISD::SETUNE:
+FnName1 = (VT == MVT::f32) ? __nesf2 : __nedf2;
+CC1 = ISD::SETNE;
+break;
+  case ISD::SETGE:
+  case ISD::SETOGE:
+FnName1 = (VT == MVT::f32) ? __gesf2 : __gedf2;
+CC1 = ISD::SETGE;
+break;
+  case ISD::SETLT:
+  case ISD::SETOLT:
+FnName1 = (VT == MVT::f32) ? __ltsf2 : __ltdf2;
+CC1 = ISD::SETLT;
+break;
+  case ISD::SETLE:
+  case ISD::SETOLE:
+FnName1 = (VT == MVT::f32) ? __lesf2 : __ledf2;
+CC1 = ISD::SETLE;
+break;
+  case ISD::SETGT:
+  case ISD::SETOGT:
+FnName1 = (VT == MVT::f32) ? __gtsf2 : __gtdf2;
+CC1 = ISD::SETGT;
+break;
+  case ISD::SETUO:
+  case ISD::SETO:
+FnName1 = (VT == MVT::f32) ? __unordsf2 : __unorddf2;
+CC1 = castCondCodeSDNode(CC)-get() == ISD::SETO
+  ? ISD::SETEQ : ISD::SETNE;
+break;
+  default:
+FnName1 = (VT == MVT::f32) ? __unordsf2 : __unorddf2;
+CC1 = ISD::SETNE;
+switch (castCondCodeSDNode(CC)-get()) {
+case ISD::SETONE:
+  // SETONE = SETOLT | SETOGT
+  FnName1 = (VT == MVT::f32) ? __ltsf2 : __ltdf2;
+  CC1 = ISD::SETLT;
+  // Fallthrough
+case ISD::SETUGT:
+  FnName2 = (VT == MVT::f32) ? __gtsf2 : __gtdf2;
+  CC2 = ISD::SETGT;
+  break;
+case ISD::SETUGE:
+  FnName2 = (VT == MVT::f32) ? __gesf2 : __gedf2;
+  CC2 = ISD::SETGE;
+  break;
+case ISD::SETULT:
+  FnName2 = (VT == MVT::f32) ? __ltsf2 : __ltdf2;
+  CC2 = ISD::SETLT;
+  break;
+case ISD::SETULE:
+  FnName2 = (VT == MVT::f32) ? __lesf2 : __ledf2;
+  CC2 = ISD::SETLE;
+  break;
+  case ISD::SETUEQ:
+FnName2 = (VT == MVT::f32) ? __eqsf2 : __eqdf2;
+CC2 = ISD::SETEQ;
+break;
+default: assert(0  Unsupported FP setcc!);
+}
+  }
+  
+  SDOperand Dummy;
+  Tmp1 = ExpandLibCall(FnName1,
+   DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
Dummy);
+  Tmp2 = DAG.getConstant(0, MVT::i32);
+  CC = DAG.getCondCode(CC1);
+  if (FnName2) {
+Tmp1 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), Tmp1, Tmp2, CC);
+LHS = ExpandLibCall(FnName2,
+   DAG.getNode(ISD::MERGE_VALUES, VT, LHS, RHS).Val, 
Dummy);
+Tmp2 = DAG.getNode(ISD::SETCC, TLI.getSetCCResultTy(), LHS, Tmp2,
+   DAG.getCondCode(CC2));
+Tmp1 = DAG.getNode(ISD::OR, Tmp1.getValueType(), Tmp1, Tmp2);
+

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-14 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.442 - 1.443
---
Log message:

silence a bogus warning


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.442 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.443
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.442 Thu Dec 14 20:59:56 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec 15 01:36:19 2006
@@ -3538,7 +3538,7 @@
 if (VT == MVT::f32 || VT == MVT::f64) {
   // Expand into one or more soft-fp libcall(s).
   const char *FnName1 = NULL, *FnName2 = NULL;
-  ISD::CondCode CC1, CC2;
+  ISD::CondCode CC1, CC2 = ISD::SETCC_INVALID;
   switch (castCondCodeSDNode(CC)-get()) {
   case ISD::SETEQ:
   case ISD::SETOEQ:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2006-12-13 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.439 - 1.440
SelectionDAGISel.cpp updated: 1.330 - 1.331
---
Log message:

More soft-fp work.

---
Diffs of the changes:  (+41 -37)

 LegalizeDAG.cpp  |   13 +++---
 SelectionDAGISel.cpp |   65 +--
 2 files changed, 41 insertions(+), 37 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.439 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.440
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.439 Tue Dec 12 21:19:57 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Dec 13 14:57:08 2006
@@ -488,9 +488,9 @@
   }
 }
 
-/// ExpandConstantFP - Expands the ConstantFP node by either converting it to
-/// integer constant or spilling the constant to memory.
-static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, bool ToMem,
+/// ExpandConstantFP - Expands the ConstantFP node to an integer constant or
+/// a load from the constant pool.
+static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, bool UseCP,
   SelectionDAG DAG, TargetLowering TLI) {
   bool Extend = false;
 
@@ -502,7 +502,7 @@
   bool isDouble = VT == MVT::f64;
   ConstantFP *LLVMC = ConstantFP::get(isDouble ? Type::DoubleTy :
   Type::FloatTy, CFP-getValue());
-  if (!ToMem) {
+  if (!UseCP) {
 double Val = LLVMC-getValue();
 return isDouble
   ? DAG.getConstant(DoubleToBits(Val), MVT::i64)
@@ -4434,6 +4434,8 @@
   case ISD::ConstantFP: {
 ConstantFPSDNode *CFP = castConstantFPSDNode(Node);
 Lo = ExpandConstantFP(CFP, false, DAG, TLI);
+if (getTypeAction(Lo.getValueType()) == Expand)
+  ExpandOp(Lo, Lo, Hi);
 break;
   }
   case ISD::BUILD_PAIR:
@@ -4526,6 +4528,9 @@
 // f32-i32 or f64-i64 one to one expansion.
 // Remember that we legalized the chain.
 AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Lo.getValue(1)));
+// Recursively expand the new load.
+if (getTypeAction(NVT) == Expand)
+  ExpandOp(Lo, Lo, Hi);
 break;
   }
 


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.330 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.331
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.330Tue Dec 12 
18:50:17 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Dec 13 14:57:08 2006
@@ -346,13 +346,10 @@
   
   // If this value is represented with multiple target registers, make sure
   // to create enough consecutive registers of the right (smaller) type.
-  unsigned NT = VT-1;  // Find the type to use.
-  while (TLI.getNumElements((MVT::ValueType)NT) != 1)
---NT;
-  
-  unsigned R = MakeReg((MVT::ValueType)NT);
+  VT = TLI.getTypeToExpandTo(VT);
+  unsigned R = MakeReg(VT);
   for (unsigned i = 1; i != NV*NumVectorRegs; ++i)
-MakeReg((MVT::ValueType)NT);
+MakeReg(VT);
   return R;
 }
 
@@ -689,19 +686,26 @@
   
   // If this type is not legal, make it so now.
   if (VT != MVT::Vector) {
-MVT::ValueType DestVT = TLI.getTypeToTransformTo(VT);
-  
-N = DAG.getCopyFromReg(DAG.getEntryNode(), InReg, DestVT);
-if (DestVT  VT) {
+if (TLI.getTypeAction(VT) == TargetLowering::Expand) {
   // Source must be expanded.  This input value is actually coming from the
   // register pair VMI-second and VMI-second+1.
-  N = DAG.getNode(ISD::BUILD_PAIR, VT, N,
-  DAG.getCopyFromReg(DAG.getEntryNode(), InReg+1, DestVT));
-} else if (DestVT  VT) { // Promotion case
-  if (MVT::isFloatingPoint(VT))
-N = DAG.getNode(ISD::FP_ROUND, VT, N);
-  else
-N = DAG.getNode(ISD::TRUNCATE, VT, N);
+  MVT::ValueType DestVT = TLI.getTypeToExpandTo(VT);
+  unsigned NumVals = TLI.getNumElements(VT);
+  N = DAG.getCopyFromReg(DAG.getEntryNode(), InReg, DestVT);
+  if (NumVals == 1)
+N = DAG.getNode(ISD::BIT_CONVERT, VT, N);
+  else {
+assert(NumVals == 2  1 to 4 (and more) expansion not implemented!);
+N = DAG.getNode(ISD::BUILD_PAIR, VT, N,
+   DAG.getCopyFromReg(DAG.getEntryNode(), InReg+1, 
DestVT));
+  }
+} else {
+  MVT::ValueType DestVT = TLI.getTypeToTransformTo(VT);
+  N = DAG.getCopyFromReg(DAG.getEntryNode(), InReg, DestVT);
+  if (TLI.getTypeAction(VT) == TargetLowering::Promote) // Promotion case
+N = MVT::isFloatingPoint(VT)
+  ? DAG.getNode(ISD::FP_ROUND, VT, N)
+  : DAG.getNode(ISD::TRUNCATE, VT, N);
 }
   } else {
 // Otherwise, if this is a vector, make it available as a generic vector
@@ -2916,12 +2920,8 @@
 // If this is a large integer, it needs to be broken up into small
 // integers.  Figure out what the destination type is and how many 
small
 // integers it 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.432 - 1.433
---
Log message:

- When expanding a bit_convert whose src operand is also to be expanded and
its expansion result type is equal to the result type of the bit_convert,
e.g. (i64 bit_convert (f64 op)) if FP is not legal
returns the result of the expanded source operand.
- Store f32 / f64 may be expanded to a single store i32/i64.


---
Diffs of the changes:  (+16 -2)

 LegalizeDAG.cpp |   18 --
 1 files changed, 16 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.432 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.433
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.432 Mon Dec 11 23:22:21 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 13:53:13 2006
@@ -1735,7 +1735,7 @@
   }
 } else {
   ExpandOp(Node-getOperand(1), Lo, Hi);
-  IncrementSize = MVT::getSizeInBits(Hi.getValueType())/8;
+  IncrementSize = Hi.Val ? MVT::getSizeInBits(Hi.getValueType())/8 : 0;
 
   if (!TLI.isLittleEndian())
 std::swap(Lo, Hi);
@@ -1743,6 +1743,13 @@
 
 Lo = DAG.getStore(Tmp1, Lo, Tmp2, ST-getSrcValue(),
   ST-getSrcValueOffset());
+
+if (Hi.Val == NULL) {
+  // Must be int - float one-to-one expansion.
+  Result = Lo;
+  break;
+}
+
 Tmp2 = DAG.getNode(ISD::ADD, Tmp2.getValueType(), Tmp2,
getIntPtrConstant(IncrementSize));
 assert(isTypeLegal(Tmp2.getValueType()) 
@@ -4593,7 +4600,14 @@
 // f32 / f64 must be expanded to i32 / i64.
 if (VT == MVT::f32 || VT == MVT::f64) {
   Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
-  Hi = SDOperand();
+  break;
+}
+
+// If source operand will be expanded to the same type as VT, i.e.
+// i64 - f64, i32 - f32, expand the source operand instead.
+MVT::ValueType VT0 = Node-getOperand(0).getValueType();
+if (getTypeAction(VT0) == Expand  TLI.getTypeToTransformTo(VT0) == VT) {
+  ExpandOp(Node-getOperand(0), Lo, Hi);
   break;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.433 - 1.434
---
Log message:

Expand ConstantFP to load from CP if float types are being expanded.

---
Diffs of the changes:  (+44 -27)

 LegalizeDAG.cpp |   71 ++--
 1 files changed, 44 insertions(+), 27 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.433 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.434
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.433 Tue Dec 12 13:53:13 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 15:32:44 2006
@@ -488,6 +488,37 @@
   }
 }
 
+/// ExpandConstantFP - Expands the ConstantFP node by spilling the constant to
+/// memory.
+static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, SelectionDAG DAG,
+  TargetLowering TLI) {
+  bool Extend = false;
+
+  // If a FP immediate is precise when represented as a float and if the
+  // target can do an extending load from float to double, we put it into
+  // the constant pool as a float, even if it's is statically typed as a
+  // double.
+  MVT::ValueType VT = CFP-getValueType(0);
+  bool isDouble = VT == MVT::f64;
+  ConstantFP *LLVMC = ConstantFP::get(isDouble ? Type::DoubleTy :
+  Type::FloatTy, CFP-getValue());
+  if (isDouble  CFP-isExactlyValue((float)CFP-getValue()) 
+  // Only do this if the target has a native EXTLOAD instruction from f32.
+  TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
+LLVMC = castConstantFP(ConstantExpr::getFPTrunc(LLVMC,Type::FloatTy));
+VT = MVT::f32;
+Extend = true;
+  }
+
+  SDOperand CPIdx = DAG.getConstantPool(LLVMC, TLI.getPointerTy());
+  if (Extend) {
+return DAG.getExtLoad(ISD::EXTLOAD, MVT::f64, DAG.getEntryNode(),
+  CPIdx, NULL, 0, MVT::f32);
+  } else {
+return DAG.getLoad(VT, DAG.getEntryNode(), CPIdx, NULL, 0);
+  }
+}
+
 
 /// LegalizeOp - We know that the specified value has a legal type.
 /// Recursively ensure that the operands have legal types, then return the
@@ -775,33 +806,7 @@
   }
   // FALLTHROUGH
 case TargetLowering::Expand:
-  // Otherwise we need to spill the constant to memory.
-  bool Extend = false;
-
-  // If a FP immediate is precise when represented as a float and if the
-  // target can do an extending load from float to double, we put it into
-  // the constant pool as a float, even if it's is statically typed as a
-  // double.
-  MVT::ValueType VT = CFP-getValueType(0);
-  bool isDouble = VT == MVT::f64;
-  ConstantFP *LLVMC = ConstantFP::get(isDouble ? Type::DoubleTy :
- Type::FloatTy, CFP-getValue());
-  if (isDouble  CFP-isExactlyValue((float)CFP-getValue()) 
-  // Only do this if the target has a native EXTLOAD instruction from
-  // f32.
-  TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
-LLVMC = 
castConstantFP(ConstantExpr::getFPTrunc(LLVMC,Type::FloatTy));
-VT = MVT::f32;
-Extend = true;
-  }
-
-  SDOperand CPIdx = DAG.getConstantPool(LLVMC, TLI.getPointerTy());
-  if (Extend) {
-Result = DAG.getExtLoad(ISD::EXTLOAD, MVT::f64, DAG.getEntryNode(),
-CPIdx, NULL, 0, MVT::f32);
-  } else {
-Result = DAG.getLoad(VT, DAG.getEntryNode(), CPIdx, NULL, 0);
-  }
+  Result = ExpandConstantFP(CFP, DAG, TLI);
 }
 break;
   }
@@ -4398,6 +4403,12 @@
 Hi = DAG.getConstant(Cst  MVT::getSizeInBits(NVT), NVT);
 break;
   }
+  case ISD::ConstantFP: {
+ConstantFPSDNode *CFP = castConstantFPSDNode(Node);
+SDOperand Tmp = ExpandConstantFP(CFP, DAG, TLI);
+ExpandOp(Tmp, Lo, Hi);
+break;
+  }
   case ISD::BUILD_PAIR:
 // Return the operands.
 Lo = Node-getOperand(0);
@@ -4484,6 +4495,12 @@
 
 if (ExtType == ISD::NON_EXTLOAD) {
   Lo = DAG.getLoad(NVT, Ch, Ptr, LD-getSrcValue(), 
LD-getSrcValueOffset());
+  if (VT == MVT::f32 || VT == MVT::f64) {
+// f32-i32 or f64-i64 one to one expansion.
+// Remember that we legalized the chain.
+AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Lo.getValue(1)));
+break;
+  }
 
   // Increment the pointer to the other half.
   unsigned IncrementSize = MVT::getSizeInBits(Lo.getValueType())/8;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.434 - 1.435
---
Log message:

Soft fp FNEG, SINT_TO_FP, UINT_TO_FP libcall expansion.

---
Diffs of the changes:  (+20 -1)

 LegalizeDAG.cpp |   21 -
 1 files changed, 20 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.434 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.435
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.434 Tue Dec 12 15:32:44 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 15:51:17 2006
@@ -4902,7 +4902,10 @@
   case ISD::UDIV: Lo = ExpandLibCall(__udivdi3, Node, Hi); break;
   case ISD::SREM: Lo = ExpandLibCall(__moddi3 , Node, Hi); break;
   case ISD::UREM: Lo = ExpandLibCall(__umoddi3, Node, Hi); break;
-  
+
+  case ISD::FNEG:
+Lo = ExpandLibCall(((VT == MVT::f32) ? __negsf2 : __negdf2), Node, Hi);
+break;
   case ISD::FADD:
 Lo = ExpandLibCall(((VT == MVT::f32) ? __addsf3 : __adddf3), Node, Hi);
 break;
@@ -4921,6 +4924,22 @@
   case ISD::FP_ROUND:
 Lo = ExpandLibCall(__truncdfsf2, Node, Hi);
 break;
+  case ISD::SINT_TO_FP:
+if (Node-getOperand(0).getValueType() == MVT::i64)
+  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatdisf : __floatdidf),
+ Node, Hi);
+else
+  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatsisf : __floatsidf),
+ Node, Hi);
+break;
+  case ISD::UINT_TO_FP:
+if (Node-getOperand(0).getValueType() == MVT::i64)
+  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatundisf : 
__floatundidf),
+ Node, Hi);
+else
+  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatunsisf : 
__floatunsidf),
+ Node, Hi);
+break;
   }
 
   // Make sure the resultant values have been legalized themselves, unless this



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.435 - 1.436
---
Log message:

Expand FP constant to integers if FP types are not legal.

---
Diffs of the changes:  (+13 -7)

 LegalizeDAG.cpp |   20 +---
 1 files changed, 13 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.435 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.436
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.435 Tue Dec 12 15:51:17 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 16:19:28 2006
@@ -488,10 +488,10 @@
   }
 }
 
-/// ExpandConstantFP - Expands the ConstantFP node by spilling the constant to
-/// memory.
-static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, SelectionDAG DAG,
-  TargetLowering TLI) {
+/// ExpandConstantFP - Expands the ConstantFP node by either converting it to
+/// integer constant or spilling the constant to memory.
+static SDOperand ExpandConstantFP(ConstantFPSDNode *CFP, bool ToMem,
+  SelectionDAG DAG, TargetLowering TLI) {
   bool Extend = false;
 
   // If a FP immediate is precise when represented as a float and if the
@@ -502,6 +502,13 @@
   bool isDouble = VT == MVT::f64;
   ConstantFP *LLVMC = ConstantFP::get(isDouble ? Type::DoubleTy :
   Type::FloatTy, CFP-getValue());
+  if (!ToMem) {
+double Val = LLVMC-getValue();
+return isDouble
+  ? DAG.getConstant(DoubleToBits(Val), MVT::i64)
+  : DAG.getConstant(FloatToBits(Val), MVT::i32);
+  }
+
   if (isDouble  CFP-isExactlyValue((float)CFP-getValue()) 
   // Only do this if the target has a native EXTLOAD instruction from f32.
   TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
@@ -806,7 +813,7 @@
   }
   // FALLTHROUGH
 case TargetLowering::Expand:
-  Result = ExpandConstantFP(CFP, DAG, TLI);
+  Result = ExpandConstantFP(CFP, true, DAG, TLI);
 }
 break;
   }
@@ -4405,8 +4412,7 @@
   }
   case ISD::ConstantFP: {
 ConstantFPSDNode *CFP = castConstantFPSDNode(Node);
-SDOperand Tmp = ExpandConstantFP(CFP, DAG, TLI);
-ExpandOp(Tmp, Lo, Hi);
+Lo = ExpandConstantFP(CFP, false, DAG, TLI);
 break;
   }
   case ISD::BUILD_PAIR:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.436 - 1.437
---
Log message:

Expand f32 / f64 to i32 / i64 conversion to soft-fp library calls.

---
Diffs of the changes:  (+23 -2)

 LegalizeDAG.cpp |   25 +++--
 1 files changed, 23 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.436 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.437
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.436 Tue Dec 12 16:19:28 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 19:57:55 2006
@@ -2860,8 +2860,29 @@
 break;
   }
   break;
-case Expand:
-  assert(0  Shouldn't need to expand other operators here!);
+case Expand: {
+  // Convert f32 / f64 to i32 / i64.
+  MVT::ValueType VT = Op.getValueType();
+  const char *FnName = 0;
+  switch (Node-getOpcode()) {
+  case ISD::FP_TO_SINT:
+if (Node-getOperand(0).getValueType() == MVT::f32)
+  FnName = (VT == MVT::i32) ? __fixsfsi : __fixsfdi;
+else
+  FnName = (VT == MVT::i32) ? __fixdfsi : __fixdfdi;
+break;
+  case ISD::FP_TO_UINT:
+if (Node-getOperand(0).getValueType() == MVT::f32)
+  FnName = (VT == MVT::i32) ? __fixunssfsi : __fixunssfdi;
+else
+  FnName = (VT == MVT::i32) ? __fixunsdfsi : __fixunsdfdi;
+break;
+  default: assert(0  Unreachable!);
+  }
+  SDOperand Dummy;
+  Result = ExpandLibCall(FnName, Node, Dummy);
+  break;
+}
 case Promote:
   Tmp1 = PromoteOp(Node-getOperand(0));
   Result = DAG.UpdateNodeOperands(Result, LegalizeOp(Tmp1));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.437 - 1.438
---
Log message:

Expand fsqrt, fsin, and fcos to libcalls.

---
Diffs of the changes:  (+25 -10)

 LegalizeDAG.cpp |   35 +--
 1 files changed, 25 insertions(+), 10 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.437 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.438
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.437 Tue Dec 12 19:57:55 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 20:38:13 2006
@@ -4951,23 +4951,38 @@
   case ISD::FP_ROUND:
 Lo = ExpandLibCall(__truncdfsf2, Node, Hi);
 break;
-  case ISD::SINT_TO_FP:
+  case ISD::SINT_TO_FP: {
+const char *FnName = 0;
 if (Node-getOperand(0).getValueType() == MVT::i64)
-  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatdisf : __floatdidf),
- Node, Hi);
+  FnName = (VT == MVT::f32) ? __floatdisf : __floatdidf;
 else
-  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatsisf : __floatsidf),
- Node, Hi);
+  FnName = (VT == MVT::f32) ? __floatsisf : __floatsidf;
+Lo = ExpandLibCall(FnName, Node, Hi);
 break;
-  case ISD::UINT_TO_FP:
+  }
+  case ISD::UINT_TO_FP: {
+const char *FnName = 0;
 if (Node-getOperand(0).getValueType() == MVT::i64)
-  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatundisf : 
__floatundidf),
- Node, Hi);
+  FnName = (VT == MVT::f32) ? __floatundisf : __floatundidf;
 else
-  Lo = ExpandLibCall(((VT == MVT::f32) ? __floatunsisf : 
__floatunsidf),
- Node, Hi);
+  FnName = (VT == MVT::f32) ? __floatunsisf : __floatunsidf;
+Lo = ExpandLibCall(FnName, Node, Hi);
 break;
   }
+  case ISD::FSQRT:
+  case ISD::FSIN:
+  case ISD::FCOS: {
+const char *FnName = 0;
+switch(Node-getOpcode()) {
+case ISD::FSQRT: FnName = (VT == MVT::f32) ? sqrtf : sqrt; break;
+case ISD::FSIN:  FnName = (VT == MVT::f32) ? sinf  : sin;  break;
+case ISD::FCOS:  FnName = (VT == MVT::f32) ? cosf  : cos;  break;
+default: assert(0  Unreachable!);
+}
+Lo = ExpandLibCall(FnName, Node, Hi);
+break;
+  }
+  }
 
   // Make sure the resultant values have been legalized themselves, unless this
   // is a type that requires multi-step expansion.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-12 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.438 - 1.439
---
Log message:

Expand (f64 extload f32) to (f64 fp_ext (load f32)) if f64 type action is 
expand.

---
Diffs of the changes:  (+10 -0)

 LegalizeDAG.cpp |   10 ++
 1 files changed, 10 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.438 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.439
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.438 Tue Dec 12 20:38:13 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Dec 12 21:19:57 2006
@@ -4547,6 +4547,16 @@
 std::swap(Lo, Hi);
 } else {
   MVT::ValueType EVT = LD-getLoadedVT();
+
+  if (VT == MVT::f64  EVT == MVT::f32) {
+// f64 = EXTLOAD f32 should expand to LOAD, FP_EXTEND
+SDOperand Load = DAG.getLoad(EVT, Ch, Ptr, LD-getSrcValue(),
+ LD-getSrcValueOffset());
+// Remember that we legalized the chain.
+AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Load.getValue(1)));
+ExpandOp(DAG.getNode(ISD::FP_EXTEND, VT, Load), Lo, Hi);
+break;
+  }
 
   if (EVT == NVT)
 Lo = DAG.getLoad(NVT, Ch, Ptr, LD-getSrcValue(),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.426 - 1.427
---
Log message:

Revert changes that broke oggenc on ppc


---
Diffs of the changes:  (+9 -14)

 LegalizeDAG.cpp |   23 +--
 1 files changed, 9 insertions(+), 14 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.426 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.427
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.426 Mon Dec 11 00:50:04 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 12:53:38 2006
@@ -1547,10 +1547,7 @@
 if (Tmp2.getValueType() != MVT::Vector) {
   SDOperand Lo, Hi;
   ExpandOp(Tmp2, Lo, Hi);
-  if (Hi.Val)
-Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, 
Hi,Tmp3);
-  else
-Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3);
+  Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, Tmp3);
   Result = LegalizeOp(Result);
 } else {
   SDNode *InVal = Tmp2.Val;
@@ -1612,10 +1609,8 @@
   ExpandOp(Node-getOperand(i), Lo, Hi);
   NewValues.push_back(Lo);
   NewValues.push_back(Node-getOperand(i+1));
-  if (Hi.Val) {
-NewValues.push_back(Hi);
-NewValues.push_back(Node-getOperand(i+1));
-  }
+  NewValues.push_back(Hi);
+  NewValues.push_back(Node-getOperand(i+1));
   break;
 }
 case Promote:
@@ -4572,10 +4567,12 @@
   Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
 }
 
+MVT::ValueType NVT = Node-getValueType(0);
 // f32 / f64 must be expanded to i32 / i64.
-if (VT == MVT::f32 || VT == MVT::f64) {
-  Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
-  Hi = SDOperand();
+if (NVT == MVT::f32 || NVT == MVT::f64) {
+  Lo = DAG.getNode(ISD::BIT_CONVERT, TLI.getTypeToTransformTo(NVT),
+   Node-getOperand(0));
+  Hi = DAG.getConstant(0, TLI.getTypeToTransformTo(NVT));
   break;
 }
 
@@ -4878,9 +4875,7 @@
   // is a type that requires multi-step expansion.
   if (getTypeAction(NVT) != Expand  NVT != MVT::isVoid) {
 Lo = LegalizeOp(Lo);
-if (Hi.Val)
-  // Don't legalize the high part if it is expanded to a single node.
-  Hi = LegalizeOp(Hi);
+Hi = LegalizeOp(Hi);
   }
 
   // Remember in a map if the values will be reused later.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.427 - 1.428
---
Log message:

Re-apply changes that were backed out and fix a naughty typo.

---
Diffs of the changes:  (+15 -10)

 LegalizeDAG.cpp |   25 +++--
 1 files changed, 15 insertions(+), 10 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.427 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.428
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.427 Mon Dec 11 12:53:38 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 13:27:14 2006
@@ -1547,7 +1547,10 @@
 if (Tmp2.getValueType() != MVT::Vector) {
   SDOperand Lo, Hi;
   ExpandOp(Tmp2, Lo, Hi);
-  Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, Tmp3);
+  if (Hi.Val)
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, 
Hi,Tmp3);
+  else
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3);
   Result = LegalizeOp(Result);
 } else {
   SDNode *InVal = Tmp2.Val;
@@ -1609,8 +1612,10 @@
   ExpandOp(Node-getOperand(i), Lo, Hi);
   NewValues.push_back(Lo);
   NewValues.push_back(Node-getOperand(i+1));
-  NewValues.push_back(Hi);
-  NewValues.push_back(Node-getOperand(i+1));
+  if (Hi.Val) {
+NewValues.push_back(Hi);
+NewValues.push_back(Node-getOperand(i+1));
+  }
   break;
 }
 case Promote:
@@ -4567,18 +4572,16 @@
   Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
 }
 
-MVT::ValueType NVT = Node-getValueType(0);
 // f32 / f64 must be expanded to i32 / i64.
-if (NVT == MVT::f32 || NVT == MVT::f64) {
-  Lo = DAG.getNode(ISD::BIT_CONVERT, TLI.getTypeToTransformTo(NVT),
-   Node-getOperand(0));
-  Hi = DAG.getConstant(0, TLI.getTypeToTransformTo(NVT));
+if (VT == MVT::f32 || VT == MVT::f64) {
+  Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+  Hi = SDOperand();
   break;
 }
 
 // Turn this into a load/store pair by default.
 if (Tmp.Val == 0)
-  Tmp = ExpandBIT_CONVERT(NVT, Node-getOperand(0));
+  Tmp = ExpandBIT_CONVERT(VT, Node-getOperand(0));
 
 ExpandOp(Tmp, Lo, Hi);
 break;
@@ -4875,7 +4878,9 @@
   // is a type that requires multi-step expansion.
   if (getTypeAction(NVT) != Expand  NVT != MVT::isVoid) {
 Lo = LegalizeOp(Lo);
-Hi = LegalizeOp(Hi);
+if (Hi.Val)
+  // Don't legalize the high part if it is expanded to a single node.
+  Hi = LegalizeOp(Hi);
   }
 
   // Remember in a map if the values will be reused later.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.428 - 1.429
---
Log message:

Change inferred cast creation calls to more specific cast creations.


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.428 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.429
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.428 Mon Dec 11 13:27:14 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 19:17:40 2006
@@ -790,7 +790,7 @@
   // Only do this if the target has a native EXTLOAD instruction from
   // f32.
   TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
-LLVMC = castConstantFP(ConstantExpr::getCast(LLVMC, Type::FloatTy));
+LLVMC = castConstantFP(ConstantExpr::getFPCast(LLVMC, 
Type::FloatTy));
 VT = MVT::f32;
 Extend = true;
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.429 - 1.430
---
Log message:

Revert Nate's patch to fix X86/store-fp-constant.ll.  With the dag combiner
and legalizer separated like they currently are, I don't see a way to handle
this xform.


---
Diffs of the changes:  (+18 -0)

 LegalizeDAG.cpp |   18 ++
 1 files changed, 18 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.429 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.430
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.429 Mon Dec 11 19:17:40 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 22:18:56 2006
@@ -1648,6 +1648,24 @@
 Tmp2 = LegalizeOp(ST-getBasePtr());  // Legalize the pointer.
 
 if (!ST-isTruncatingStore()) {
+  // Turn 'store float 1.0, Ptr' - 'store int 0x12345678, Ptr'
+  // FIXME: We shouldn't do this for TargetConstantFP's.
+  // FIXME: move this to the DAG Combiner!  Note that we can't regress due
+  // to phase ordering between legalized code and the dag combiner.  This
+  // probably means that we need to integrate dag combiner and legalizer
+  // together.
+  if (ConstantFPSDNode *CFP = dyn_castConstantFPSDNode(ST-getValue())) {
+if (CFP-getValueType(0) == MVT::f32) {
+  Tmp3 = DAG.getConstant(FloatToBits(CFP-getValue()), MVT::i32);
+} else {
+  assert(CFP-getValueType(0) == MVT::f64  Unknown FP type!);
+  Tmp3 = DAG.getConstant(DoubleToBits(CFP-getValue()), MVT::i64);
+}
+Result = DAG.getStore(Tmp1, Tmp3, Tmp2, ST-getSrcValue(),
+  ST-getSrcValueOffset());
+break;
+  }
+  
   switch (getTypeAction(ST-getStoredVT())) {
   case Legal: {
 Tmp3 = LegalizeOp(ST-getValue());



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.431 - 1.432
---
Log message:

fit in 80 cols


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.431 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.432
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.431 Mon Dec 11 23:21:51 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 23:22:21 2006
@@ -790,7 +790,7 @@
   // Only do this if the target has a native EXTLOAD instruction from
   // f32.
   TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
-LLVMC = castConstantFP(ConstantExpr::getFPTrunc(LLVMC, 
Type::FloatTy));
+LLVMC = 
castConstantFP(ConstantExpr::getFPTrunc(LLVMC,Type::FloatTy));
 VT = MVT::f32;
 Extend = true;
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-11 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.430 - 1.431
---
Log message:

this can only be fptrunc.


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.430 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.431
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.430 Mon Dec 11 22:18:56 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 23:21:51 2006
@@ -790,7 +790,7 @@
   // Only do this if the target has a native EXTLOAD instruction from
   // f32.
   TLI.isLoadXLegal(ISD::EXTLOAD, MVT::f32)) {
-LLVMC = castConstantFP(ConstantExpr::getFPCast(LLVMC, 
Type::FloatTy));
+LLVMC = castConstantFP(ConstantExpr::getFPTrunc(LLVMC, 
Type::FloatTy));
 VT = MVT::f32;
 Extend = true;
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-10 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.424 - 1.425
---
Log message:

Clean up some bad code.

---
Diffs of the changes:  (+3 -5)

 LegalizeDAG.cpp |8 +++-
 1 files changed, 3 insertions(+), 5 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.424 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.425
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.424 Sun Dec 10 20:23:46 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 00:25:26 2006
@@ -4567,12 +4567,10 @@
   Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
 }
 
-MVT::ValueType NVT = Node-getValueType(0);
 // f32 / f64 must be expanded to i32 / i64.
-if (NVT == MVT::f32 || NVT == MVT::f64) {
-  Lo = DAG.getNode(ISD::BIT_CONVERT, TLI.getTypeToTransformTo(NVT),
-   Node-getOperand(0));
-  Hi = DAG.getConstant(0, TLI.getTypeToTransformTo(NVT));
+if (VT == MVT::f32 || VT == MVT::f64) {
+  Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
+  Hi = DAG.getConstant(0, NVT);
   break;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-12-10 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.425 - 1.426
---
Log message:

f32 / f64 node is expanded to one i32 / i64 node.

---
Diffs of the changes:  (+12 -5)

 LegalizeDAG.cpp |   17 -
 1 files changed, 12 insertions(+), 5 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.425 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.426
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.425 Mon Dec 11 00:25:26 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Dec 11 00:50:04 2006
@@ -1547,7 +1547,10 @@
 if (Tmp2.getValueType() != MVT::Vector) {
   SDOperand Lo, Hi;
   ExpandOp(Tmp2, Lo, Hi);
-  Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, Tmp3);
+  if (Hi.Val)
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, 
Hi,Tmp3);
+  else
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3);
   Result = LegalizeOp(Result);
 } else {
   SDNode *InVal = Tmp2.Val;
@@ -1609,8 +1612,10 @@
   ExpandOp(Node-getOperand(i), Lo, Hi);
   NewValues.push_back(Lo);
   NewValues.push_back(Node-getOperand(i+1));
-  NewValues.push_back(Hi);
-  NewValues.push_back(Node-getOperand(i+1));
+  if (Hi.Val) {
+NewValues.push_back(Hi);
+NewValues.push_back(Node-getOperand(i+1));
+  }
   break;
 }
 case Promote:
@@ -4570,7 +4575,7 @@
 // f32 / f64 must be expanded to i32 / i64.
 if (VT == MVT::f32 || VT == MVT::f64) {
   Lo = DAG.getNode(ISD::BIT_CONVERT, NVT, Node-getOperand(0));
-  Hi = DAG.getConstant(0, NVT);
+  Hi = SDOperand();
   break;
 }
 
@@ -4873,7 +4878,9 @@
   // is a type that requires multi-step expansion.
   if (getTypeAction(NVT) != Expand  NVT != MVT::isVoid) {
 Lo = LegalizeOp(Lo);
-Hi = LegalizeOp(Hi);
+if (Hi.Val)
+  // Don't legalize the high part if it is expanded to a single node.
+  Hi = LegalizeOp(Hi);
   }
 
   // Remember in a map if the values will be reused later.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp TargetLowering.cpp

2006-12-08 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.422 - 1.423
SelectionDAGISel.cpp updated: 1.325 - 1.326
TargetLowering.cpp updated: 1.81 - 1.82
---
Log message:

Preliminary soft float support.

---
Diffs of the changes:  (+74 -19)

 LegalizeDAG.cpp  |   35 +++
 SelectionDAGISel.cpp |   15 ---
 TargetLowering.cpp   |   43 +++
 3 files changed, 74 insertions(+), 19 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.422 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.423
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.422 Thu Dec  7 14:04:42 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Dec  8 20:42:38 2006
@@ -4351,9 +4351,8 @@
   MVT::ValueType NVT = TLI.getTypeToTransformTo(VT);
   SDNode *Node = Op.Val;
   assert(getTypeAction(VT) == Expand  Not an expanded type!);
-  assert((MVT::isInteger(VT) || VT == MVT::Vector)  
- Cannot expand FP values!);
-  assert(((MVT::isInteger(NVT)  NVT  VT) || VT == MVT::Vector) 
+  assert(((MVT::isInteger(NVT)  NVT  VT) || MVT::isFloatingPoint(VT) ||
+ VT == MVT::Vector) 
  Cannot expand to FP value or to larger int value!);
 
   // See if we already expanded it.
@@ -4583,9 +4582,18 @@
   Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
 }
 
+MVT::ValueType NVT = Node-getValueType(0);
+// f32 / f64 must be expanded to i32 / i64.
+if (NVT == MVT::f32 || NVT == MVT::f64) {
+  Lo = DAG.getNode(ISD::BIT_CONVERT, TLI.getTypeToTransformTo(NVT),
+   Node-getOperand(0));
+  Hi = DAG.getConstant(0, TLI.getTypeToTransformTo(NVT));
+  break;
+}
+
 // Turn this into a load/store pair by default.
 if (Tmp.Val == 0)
-  Tmp = ExpandBIT_CONVERT(Node-getValueType(0), Node-getOperand(0));
+  Tmp = ExpandBIT_CONVERT(NVT, Node-getOperand(0));
 
 ExpandOp(Tmp, Lo, Hi);
 break;
@@ -4858,6 +4866,25 @@
   case ISD::UDIV: Lo = ExpandLibCall(__udivdi3, Node, Hi); break;
   case ISD::SREM: Lo = ExpandLibCall(__moddi3 , Node, Hi); break;
   case ISD::UREM: Lo = ExpandLibCall(__umoddi3, Node, Hi); break;
+  
+  case ISD::FADD:
+Lo = ExpandLibCall(((VT == MVT::f32) ? __addsf3 : __adddf3), Node, Hi);
+break;
+  case ISD::FSUB:
+Lo = ExpandLibCall(((VT == MVT::f32) ? __subsf3 : __subdf3), Node, Hi);
+break;
+  case ISD::FMUL:
+Lo = ExpandLibCall(((VT == MVT::f32) ? __mulsf3 : __muldf3), Node, Hi);
+break;
+  case ISD::FDIV:
+Lo = ExpandLibCall(((VT == MVT::f32) ? __divsf3 : __divdf3), Node, Hi);
+break;
+  case ISD::FP_EXTEND:
+Lo = ExpandLibCall(__extendsfdf2, Node, Hi);
+break;
+  case ISD::FP_ROUND:
+Lo = ExpandLibCall(__truncdfsf2, Node, Hi);
+break;
   }
 
   // Make sure the resultant values have been legalized themselves, unless this


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.325 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.326
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.325Thu Dec  7 
14:04:42 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Fri Dec  8 20:42:38 2006
@@ -2954,7 +2954,10 @@
 // integers it is.
 MVT::ValueType NVT = getTypeToTransformTo(VT);
 unsigned NumVals = MVT::getSizeInBits(VT)/MVT::getSizeInBits(NVT);
-if (NumVals == 2) {
+if (NumVals == 1) {
+  SDOperand Tmp = SDOperand(Result, i++);
+  Ops.push_back(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp));
+} else if (NumVals == 2) {
   SDOperand Lo = SDOperand(Result, i++);
   SDOperand Hi = SDOperand(Result, i++);
   
@@ -3040,7 +3043,10 @@
 // integers it is.
 MVT::ValueType NVT = getTypeToTransformTo(VT);
 unsigned NumVals = MVT::getSizeInBits(VT)/MVT::getSizeInBits(NVT);
-if (NumVals == 2) {
+if (NumVals == 1) {
+  Ops.push_back(DAG.getNode(ISD::BIT_CONVERT, VT, Op));
+  Ops.push_back(DAG.getConstant(isSigned, MVT::i32));
+} else if (NumVals == 2) {
   SDOperand Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, NVT, Op,
  DAG.getConstant(0, getPointerTy()));
   SDOperand Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, NVT, Op,
@@ -3166,7 +3172,10 @@
   ResVal = DAG.getNode(ISD::TRUNCATE, VT, ResVal);
 } else {
   assert(MVT::isFloatingPoint(VT));
-  ResVal = DAG.getNode(ISD::FP_ROUND, VT, ResVal);
+  if (getTypeAction(VT) == Expand)
+ResVal = DAG.getNode(ISD::BIT_CONVERT, VT, ResVal);
+  else
+ResVal = DAG.getNode(ISD::FP_ROUND, VT, ResVal);
 }
   }
 } else if (RetTys.size() == 3) {


Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
diff -u 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-11-29 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.420 - 1.421
---
Log message:

Avoid inifinite looping if READCYCLECOUNTER isn't custom lowered.

---
Diffs of the changes:  (+8 -3)

 LegalizeDAG.cpp |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.420 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.421
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.420 Wed Nov 29 02:26:18 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Nov 29 13:13:47 2006
@@ -1850,16 +1850,21 @@
 switch (TLI.getOperationAction(ISD::READCYCLECOUNTER,
Node-getValueType(0))) {
 default: assert(0  This action is not supported yet!);
-case TargetLowering::Legal: break;
+case TargetLowering::Legal:
+  Tmp1 = Result.getValue(0);
+  Tmp2 = Result.getValue(1);
+  break;
 case TargetLowering::Custom:
   Result = TLI.LowerOperation(Result, DAG);
+  Tmp1 = LegalizeOp(Result.getValue(0));
+  Tmp2 = LegalizeOp(Result.getValue(1));
   break;
 }
 
 // Since rdcc produce two values, make sure to remember that we legalized
 // both of them.
-AddLegalizedOperand(SDOperand(Node, 0), LegalizeOp(Result.getValue(0)));
-AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Result.getValue(1)));
+AddLegalizedOperand(SDOperand(Node, 0), Tmp1);
+AddLegalizedOperand(SDOperand(Node, 1), Tmp2);
 return Result;
 
   case ISD::SELECT:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-11-27 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.418 - 1.419
---
Log message:

Fix PR1016: http://llvm.org/PR1016 


---
Diffs of the changes:  (+4 -5)

 LegalizeDAG.cpp |9 -
 1 files changed, 4 insertions(+), 5 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.418 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.419
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.418 Sun Nov 26 22:39:56 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Nov 27 19:03:30 2006
@@ -1862,6 +1862,10 @@
   break;
 case Promote:
   Tmp1 = PromoteOp(Node-getOperand(0));  // Promote the condition.
+  // Make sure the condition is either zero or one.
+  if (!TLI.MaskedValueIsZero(Tmp1,
+ MVT::getIntVTBitMask(Tmp1.getValueType())^1))
+Tmp1 = DAG.getZeroExtendInReg(Tmp1, MVT::i1);
   break;
 }
 Tmp2 = LegalizeOp(Node-getOperand(1));   // TrueVal
@@ -1883,11 +1887,6 @@
   Tmp2, Tmp3,
   castCondCodeSDNode(Tmp1.getOperand(2))-get());
   } else {
-// Make sure the condition is either zero or one.  It may have been
-// promoted from something else.
-unsigned NumBits = MVT::getSizeInBits(Tmp1.getValueType());
-if (!TLI.MaskedValueIsZero(Tmp1, (~0ULL  (64-NumBits))^1))
-  Tmp1 = DAG.getZeroExtendInReg(Tmp1, MVT::i1);
 Result = DAG.getSelectCC(Tmp1, 
  DAG.getConstant(0, Tmp1.getValueType()),
  Tmp2, Tmp3, ISD::SETNE);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-11-26 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.417 - 1.418
---
Log message:

If a brcond condition is promoted, make sure to zero extend it, even if not
expanded into BR_CC.


---
Diffs of the changes:  (+6 -6)

 LegalizeDAG.cpp |   12 ++--
 1 files changed, 6 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.417 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.418
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.417 Mon Nov  6 22:11:44 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sun Nov 26 22:39:56 2006
@@ -1302,6 +1302,12 @@
   break;
 case Promote:
   Tmp2 = PromoteOp(Node-getOperand(1));  // Promote the condition.
+  
+  // The top bits of the promoted condition are not necessarily zero, 
ensure
+  // that the value is properly zero extended.
+  if (!TLI.MaskedValueIsZero(Tmp2, 
+ MVT::getIntVTBitMask(Tmp2.getValueType())^1))
+Tmp2 = DAG.getZeroExtendInReg(Tmp2, MVT::i1);
   break;
 }
 
@@ -1323,12 +1329,6 @@
  Tmp2.getOperand(0), Tmp2.getOperand(1),
  Node-getOperand(2));
   } else {
-// Make sure the condition is either zero or one.  It may have been
-// promoted from something else.
-unsigned NumBits = MVT::getSizeInBits(Tmp2.getValueType());
-if (!TLI.MaskedValueIsZero(Tmp2, (~0ULL  (64-NumBits))^1))
-  Tmp2 = DAG.getZeroExtendInReg(Tmp2, MVT::i1);
-
 Result = DAG.getNode(ISD::BR_CC, MVT::Other, Tmp1, 
  DAG.getCondCode(ISD::SETNE), Tmp2,
  DAG.getConstant(0, Tmp2.getValueType()),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-11-06 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.416 - 1.417
---
Log message:

Fix PR988: http://llvm.org/PR988  and 
CodeGen/Generic/2006-11-06-MemIntrinsicExpand.ll.
The low part goes in the first operand of expandop, not the second one.


---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.416 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.417
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.416 Thu Nov  2 14:25:49 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Nov  6 22:11:44 2006
@@ -2039,7 +2039,7 @@
 case Expand: {
   // Length is too big, just take the lo-part of the length.
   SDOperand HiPart;
-  ExpandOp(Node-getOperand(3), HiPart, Tmp4);
+  ExpandOp(Node-getOperand(3), Tmp4, HiPart);
   break;
 }
 case Legal:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2006-10-30 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.413 - 1.414
SelectionDAGISel.cpp updated: 1.307 - 1.308
---
Log message:

Lower jumptable to BR_JT. The legalizer can lower it to a BRIND or let the 
target custom lower it.

---
Diffs of the changes:  (+55 -28)

 LegalizeDAG.cpp  |   48 
 SelectionDAGISel.cpp |   35 +++
 2 files changed, 55 insertions(+), 28 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.413 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.414
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.413 Fri Oct 20 02:07:24 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Oct 30 02:00:44 2006
@@ -16,6 +16,7 @@
 #include llvm/CodeGen/MachineFrameInfo.h
 #include llvm/Target/TargetLowering.h
 #include llvm/Target/TargetData.h
+#include llvm/Target/TargetMachine.h
 #include llvm/Target/TargetOptions.h
 #include llvm/CallingConv.h
 #include llvm/Constants.h
@@ -1240,6 +1241,53 @@
 }
 Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
 break;
+  case ISD::BR_JT:
+Tmp1 = LegalizeOp(Node-getOperand(0));  // Legalize the chain.
+// Ensure that libcalls are emitted before a branch.
+Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
+Tmp1 = LegalizeOp(Tmp1);
+LastCALLSEQ_END = DAG.getEntryNode();
+
+Tmp2 = LegalizeOp(Node-getOperand(1));  // Legalize the jumptable node.
+Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Node-getOperand(2));
+
+switch (TLI.getOperationAction(ISD::BR_JT, MVT::Other)) {  
+default: assert(0  This action is not supported yet!);
+case TargetLowering::Legal: break;
+case TargetLowering::Custom:
+  Tmp1 = TLI.LowerOperation(Result, DAG);
+  if (Tmp1.Val) Result = Tmp1;
+  break;
+case TargetLowering::Expand: {
+  SDOperand Chain = Result.getOperand(0);
+  SDOperand Table = Result.getOperand(1);
+  SDOperand Index = Result.getOperand(2);
+
+  MVT::ValueType PTy = TLI.getPointerTy();
+  bool isPIC = TLI.getTargetMachine().getRelocationModel() == Reloc::PIC_;
+  // PIC jump table entries are 32-bit values.
+  unsigned EntrySize = isPIC ? 4 : MVT::getSizeInBits(PTy)/8;
+  Index= DAG.getNode(ISD::MUL, PTy, Index, DAG.getConstant(EntrySize, 
PTy));
+  SDOperand Addr = DAG.getNode(ISD::ADD, PTy, Index, Table);
+  SDOperand LD = DAG.getLoad(isPIC ? MVT::i32 : PTy, Chain, Addr, NULL, 0);
+  if (isPIC) {
+// For PIC, the sequence is:
+// BRIND(load(Jumptable + index) + RelocBase)
+// RelocBase is the JumpTable on PPC and X86, GOT on Alpha
+SDOperand Reloc;
+if (TLI.usesGlobalOffsetTable())
+  Reloc = DAG.getNode(ISD::GLOBAL_OFFSET_TABLE, PTy);
+else
+  Reloc = Table;
+Addr= (PTy != MVT::i32) ? DAG.getNode(ISD::SIGN_EXTEND, PTy, LD) : 
Addr;
+Addr = DAG.getNode(ISD::ADD, PTy, Addr, Reloc);
+Result = DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), Addr);
+  } else {
+Result = DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), LD);
+  }
+}
+}
+break;
   case ISD::BRCOND:
 Tmp1 = LegalizeOp(Node-getOperand(0));  // Legalize the chain.
 // Ensure that libcalls are emitted before a return.


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.307 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.308
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.307Sun Oct 29 
15:01:20 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Mon Oct 30 02:00:44 2006
@@ -1070,33 +1070,11 @@
 void SelectionDAGLowering::visitJumpTable(SelectionDAGISel::JumpTable JT) {
   // Emit the code for the jump table
   MVT::ValueType PTy = TLI.getPointerTy();
-  assert((PTy == MVT::i32 || PTy == MVT::i64) 
- Jump table entries are 32-bit values);
-  bool isPIC = TLI.getTargetMachine().getRelocationModel() == Reloc::PIC_;
-  // PIC jump table entries are 32-bit values.
-  unsigned EntrySize = isPIC ? 4 : MVT::getSizeInBits(PTy)/8;
-  SDOperand Copy = DAG.getCopyFromReg(getRoot(), JT.Reg, PTy);
-  SDOperand IDX = DAG.getNode(ISD::MUL, PTy, Copy,
-  DAG.getConstant(EntrySize, PTy));
-  SDOperand TAB = DAG.getJumpTable(JT.JTI,PTy);
-  SDOperand ADD = DAG.getNode(ISD::ADD, PTy, IDX, TAB);
-  SDOperand LD  = DAG.getLoad(isPIC ? MVT::i32 : PTy, Copy.getValue(1), ADD,
-  NULL, 0);
-  if (isPIC) {
-// For Pic, the sequence is:
-// BRIND(load(Jumptable + index) + RelocBase)
-// RelocBase is the JumpTable on PPC and X86, GOT on Alpha
-SDOperand Reloc;
-if (TLI.usesGlobalOffsetTable())
-  Reloc = DAG.getNode(ISD::GLOBAL_OFFSET_TABLE, PTy);
-else
-  Reloc = TAB;
-ADD = (PTy != 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-30 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.414 - 1.415
---
Log message:

Fix a typo which can break jumptables.

---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.414 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.415
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.414 Mon Oct 30 02:00:44 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Oct 30 20:31:00 2006
@@ -1279,7 +1279,7 @@
   Reloc = DAG.getNode(ISD::GLOBAL_OFFSET_TABLE, PTy);
 else
   Reloc = Table;
-Addr= (PTy != MVT::i32) ? DAG.getNode(ISD::SIGN_EXTEND, PTy, LD) : 
Addr;
+Addr = (PTy != MVT::i32) ? DAG.getNode(ISD::SIGN_EXTEND, PTy, LD) : LD;
 Addr = DAG.getNode(ISD::ADD, PTy, Addr, Reloc);
 Result = DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), Addr);
   } else {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2006-10-20 Thread Reid Spencer


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.412 - 1.413
SelectionDAGISel.cpp updated: 1.290 - 1.291
---
Log message:

For PR950: http://llvm.org/PR950 :
This patch implements the first increment for the Signless Types feature.
All changes pertain to removing the ConstantSInt and ConstantUInt classes
in favor of just using ConstantInt.


---
Diffs of the changes:  (+39 -37)

 LegalizeDAG.cpp  |6 ++--
 SelectionDAGISel.cpp |   70 ++-
 2 files changed, 39 insertions(+), 37 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.412 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.413
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.412 Fri Oct 13 16:12:22 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Oct 20 02:07:24 2006
@@ -3562,7 +3562,7 @@
 CV.push_back(ConstantFP::get(OpNTy, V-getValue()));
   } else if (ConstantSDNode *V = 
  dyn_castConstantSDNode(Node-getOperand(i))) {
-CV.push_back(ConstantUInt::get(OpNTy, V-getValue()));
+CV.push_back(ConstantInt::get(OpNTy, V-getValue()));
   } else {
 assert(Node-getOperand(i).getOpcode() == ISD::UNDEF);
 CV.push_back(UndefValue::get(OpNTy));
@@ -3915,7 +3915,7 @@
   SignSet, Four, Zero);
 uint64_t FF = 0x5f80ULL;
 if (TLI.isLittleEndian()) FF = 32;
-static Constant *FudgeFactor = ConstantUInt::get(Type::ULongTy, FF);
+static Constant *FudgeFactor = ConstantInt::get(Type::ULongTy, FF);
 
 SDOperand CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
 CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);
@@ -4046,7 +4046,7 @@
   case MVT::i64: FF = 0x5F80ULL; break;  // 2^64 (as a float)
   }
   if (TLI.isLittleEndian()) FF = 32;
-  static Constant *FudgeFactor = ConstantUInt::get(Type::ULongTy, FF);
+  static Constant *FudgeFactor = ConstantInt::get(Type::ULongTy, FF);
 
   SDOperand CPIdx = DAG.getConstantPool(FudgeFactor, TLI.getPointerTy());
   CPIdx = DAG.getNode(ISD::ADD, TLI.getPointerTy(), CPIdx, CstOffset);


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.290 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.291
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.290Thu Oct 19 
16:46:38 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Fri Oct 20 02:07:24 2006
@@ -236,21 +236,22 @@
   Function::iterator BB = Fn.begin(), EB = Fn.end();
   for (BasicBlock::iterator I = BB-begin(), E = BB-end(); I != E; ++I)
 if (AllocaInst *AI = dyn_castAllocaInst(I))
-  if (ConstantUInt *CUI = dyn_castConstantUInt(AI-getArraySize())) {
+  if (ConstantInt *CUI = dyn_castConstantInt(AI-getArraySize())) {
 const Type *Ty = AI-getAllocatedType();
 uint64_t TySize = TLI.getTargetData()-getTypeSize(Ty);
 unsigned Align = 
   std::max((unsigned)TLI.getTargetData()-getTypeAlignment(Ty),
AI-getAlignment());
 
-// If the alignment of the value is smaller than the size of the value,
-// and if the size of the value is particularly small (= 8 bytes),
-// round up to the size of the value for potentially better 
performance.
+// If the alignment of the value is smaller than the size of the 
+// value, and if the size of the value is particularly small 
+// (= 8 bytes), round up to the size of the value for potentially 
+// better performance.
 //
 // FIXME: This could be made better with a preferred alignment hook in
 // TargetData.  It serves primarily to 8-byte align doubles for X86.
 if (Align  TySize  TySize = 8) Align = TySize;
-TySize *= CUI-getValue();   // Get total allocated size.
+TySize *= CUI-getZExtValue();   // Get total allocated size.
 if (TySize == 0) TySize = 1; // Don't create zero-sized stack objects.
 StaticAllocaMap[AI] =
   MF.getFrameInfo()-CreateStackObject((unsigned)TySize, Align);
@@ -393,11 +394,13 @@
   /// The comparison function for sorting Case values.
   struct CaseCmp {
 bool operator () (const Case C1, const Case C2) {
-  if (const ConstantUInt* U1 = dyn_castconst ConstantUInt(C1.first))
-return U1-getValue()  castconst ConstantUInt(C2.first)-getValue();
+  if (const ConstantInt* I1 = dyn_castconst ConstantInt(C1.first))
+if (I1-getType()-isUnsigned())
+  return I1-getZExtValue() 
+castconst ConstantInt(C2.first)-getZExtValue();
   
-  const ConstantSInt* S1 = dyn_castconst ConstantSInt(C1.first);
-  return S1-getValue()  castconst ConstantSInt(C2.first)-getValue();
+  return castconst ConstantInt(C1.first)-getSExtValue() 
+ castconst 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-11 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.410 - 1.411
---
Log message:

Typo

---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.410 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.411
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.410 Wed Oct 11 02:09:31 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Oct 11 12:52:19 2006
@@ -2851,7 +2851,7 @@
 Result = DAG.getNode(ISD::SRA, Node-getValueType(0),
  Result, ShiftCst);
   } else if (Node-getOpcode() == ISD::FP_ROUND_INREG) {
-// The only way we can lower this is to turn it into a STORETRUNC,
+// The only way we can lower this is to turn it into a TRUNCSTORE,
 // EXTLOAD pair, targetting a temporary location (a stack slot).
 
 // NOTE: there is a choice here between constantly creating new stack



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-10 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.406 - 1.407
---
Log message:

Fix a bug introduced by my LOAD/LOADX changes.

---
Diffs of the changes:  (+4 -2)

 LegalizeDAG.cpp |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.406 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.407
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.406 Mon Oct  9 15:57:24 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Oct 10 02:51:21 2006
@@ -2433,7 +2433,6 @@
   // This defaults to loading a pointer from the input and storing it to 
the
   // output, returning the chain.
   SrcValueSDNode *SVD = castSrcValueSDNode(Node-getOperand(3));
-  SrcValueSDNode *SVS = castSrcValueSDNode(Node-getOperand(4));
   Tmp4 = DAG.getLoad(TLI.getPointerTy(), Tmp1, Tmp3, SVD-getValue(),
  SVD-getOffset());
   Result = DAG.getStore(Tmp4.getValue(1), Tmp4, Tmp2, Node-getOperand(4));
@@ -3234,7 +3233,10 @@
 
   case ISD::LOAD: {
 LoadSDNode *LD = castLoadSDNode(Node);
-Result = DAG.getExtLoad(ISD::EXTLOAD, NVT, LD-getChain(), 
LD-getBasePtr(),
+ISD::LoadExtType ExtType = ISD::isNON_EXTLoad(Node)
+  ? ISD::EXTLOAD : LD-getExtensionType();
+Result = DAG.getExtLoad(ExtType, NVT,
+LD-getChain(), LD-getBasePtr(),
 LD-getSrcValue(), LD-getSrcValueOffset(), VT);
 // Remember that we legalized the chain.
 AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-10 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.407 - 1.408
---
Log message:

Fix another bug in extload promotion.


---
Diffs of the changes:  (+2 -1)

 LegalizeDAG.cpp |3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.407 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.408
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.407 Tue Oct 10 02:51:21 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Oct 10 13:54:19 2006
@@ -3237,7 +3237,8 @@
   ? ISD::EXTLOAD : LD-getExtensionType();
 Result = DAG.getExtLoad(ExtType, NVT,
 LD-getChain(), LD-getBasePtr(),
-LD-getSrcValue(), LD-getSrcValueOffset(), VT);
+LD-getSrcValue(), LD-getSrcValueOffset(),
+LD-getLoadVT());
 // Remember that we legalized the chain.
 AddLegalizedOperand(Op.getValue(1), LegalizeOp(Result.getValue(1)));
 break;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.403 - 1.404
---
Log message:

Fix a miscompilation of:

long long foo(long long X) {
  return (long long)(signed char)(int)X;
}

Instead of:

_foo:
extsb r2, r4
srawi r3, r4, 31
mr r4, r2
blr

we now produce:

_foo:
extsb r4, r4
srawi r3, r4, 31
blr

This fixes a miscompilation in ConstantFolding.cpp.



---
Diffs of the changes:  (+5 -3)

 LegalizeDAG.cpp |8 +---
 1 files changed, 5 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.403 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.404
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.403 Thu Oct  5 17:57:27 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Oct  6 12:34:12 2006
@@ -4349,12 +4349,14 @@
 
   case ISD::SIGN_EXTEND_INREG:
 ExpandOp(Node-getOperand(0), Lo, Hi);
-// Sign extend the lo-part.
+// sext_inreg the low part if needed.
+Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Lo, Node-getOperand(1));
+
+// The high part gets the sign extension from the lo-part.  This handles
+// things like sextinreg V:i64 from i8.
 Hi = DAG.getNode(ISD::SRA, NVT, Lo,
  DAG.getConstant(MVT::getSizeInBits(NVT)-1,
  TLI.getShiftAmountTy()));
-// sext_inreg the low part if needed.
-Lo = DAG.getNode(ISD::SIGN_EXTEND_INREG, NVT, Lo, Node-getOperand(1));
 break;
 
   case ISD::BSWAP: {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.404 - 1.405
---
Log message:

Fix a bug legalizing zero-extending i64 loads into 32-bit loads.  The bottom
part was always forced to be sextload, even when we needed an zextload.


---
Diffs of the changes:  (+2 -3)

 LegalizeDAG.cpp |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.404 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.405
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.404 Fri Oct  6 12:34:12 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Oct  6 19:58:36 2006
@@ -4474,13 +4474,12 @@
 SDOperand Chain = Node-getOperand(0);
 SDOperand Ptr   = Node-getOperand(1);
 MVT::ValueType EVT = castVTSDNode(Node-getOperand(3))-getVT();
-unsigned LType = Node-getConstantOperandVal(4);
+ISD::LoadExtType LType = (ISD::LoadExtType)Node-getConstantOperandVal(4);
 
 if (EVT == NVT)
   Lo = DAG.getLoad(NVT, Chain, Ptr, Node-getOperand(2));
 else
-  Lo = DAG.getExtLoad(ISD::SEXTLOAD, NVT, Chain, Ptr, Node-getOperand(2),
-  EVT);
+  Lo = DAG.getExtLoad(LType, NVT, Chain, Ptr, Node-getOperand(2), EVT);
 
 // Remember that we legalized the chain.
 AddLegalizedOperand(SDOperand(Node, 1), LegalizeOp(Lo.getValue(1)));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-10-03 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.400 - 1.401
---
Log message:

Fix an obvious typo.

---
Diffs of the changes:  (+1 -1)

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.400 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.401
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.400 Sun Sep 24 14:44:59 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Oct  3 18:08:27 2006
@@ -1398,7 +1398,7 @@
   Tmp2 = Result.getValue(1);
   
   if (isCustom) {
-Tmp3 = TLI.LowerOperation(Tmp3, DAG);
+Tmp3 = TLI.LowerOperation(Result, DAG);
 if (Tmp3.Val) {
   Tmp1 = LegalizeOp(Tmp3);
   Tmp2 = LegalizeOp(Tmp3.getValue(1));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAGISel.cpp

2006-09-24 Thread Andrew Lenharth


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.399 - 1.400
SelectionDAGISel.cpp updated: 1.278 - 1.279
---
Log message:

Add support for other relocation bases to jump tables, as well as custom asm 
directives

---
Diffs of the changes:  (+13 -1)

 LegalizeDAG.cpp  |   11 +++
 SelectionDAGISel.cpp |3 ++-
 2 files changed, 13 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.399 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.400
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.399 Tue Sep 19 22:38:48 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sun Sep 24 14:44:59 2006
@@ -558,6 +558,17 @@
 #endif
 assert(0  Do not know how to legalize this operator!);
 abort();
+  case ISD::JumpTableRelocBase:
+switch (TLI.getOperationAction(Node-getOpcode(), Node-getValueType(0))) {
+case TargetLowering::Custom:
+  Tmp1 = TLI.LowerOperation(Op, DAG);
+  if (Tmp1.Val) Result = Tmp1;
+  break;
+default:
+  Result = LegalizeOp(Node-getOperand(0));
+  break;
+}
+break;
   case ISD::GlobalAddress:
   case ISD::ExternalSymbol:
   case ISD::ConstantPool:


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.278 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.279
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.278Sun Sep 24 
00:22:38 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sun Sep 24 14:44:59 2006
@@ -868,8 +868,9 @@
   SDOperand LD  = DAG.getLoad(isPIC ? MVT::i32 : PTy, Copy.getValue(1), ADD,
   DAG.getSrcValue(0));
   if (isPIC) {
+SDOperand Reloc = DAG.getNode(ISD::JumpTableRelocBase, PTy, TAB);
 ADD = DAG.getNode(ISD::ADD, PTy,
-((PTy != MVT::i32) ? DAG.getNode(ISD::SIGN_EXTEND, PTy, LD) : LD), 
TAB);
+((PTy != MVT::i32) ? DAG.getNode(ISD::SIGN_EXTEND, PTy, LD) : LD), 
Reloc);
 DAG.setRoot(DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), ADD));
   } else {
 DAG.setRoot(DAG.getNode(ISD::BRIND, MVT::Other, LD.getValue(1), LD));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-19 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.398 - 1.399
---
Log message:

Expand 64-bit shifts more optimally if we know that the high bit of the
shift amount is one or zero.  For example, for:

long long foo1(long long X, int C) {
  return X  (C|32);
}

long long foo2(long long X, int C) {
  return X  (C~32);
}

we get:

_foo1:
movb $31, %cl
movl 4(%esp), %edx
andb 12(%esp), %cl
shll %cl, %edx
xorl %eax, %eax
ret
_foo2:
movb $223, %cl
movl 4(%esp), %eax
movl 8(%esp), %edx
andb 12(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
ret

instead of:

_foo1:
subl $4, %esp
movl %ebx, (%esp)
movb $32, %bl
movl 8(%esp), %eax
movl 12(%esp), %edx
movb %bl, %cl
orb 16(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
xorl %ecx, %ecx
testb %bl, %bl
cmovne %eax, %edx
cmovne %ecx, %eax
movl (%esp), %ebx
addl $4, %esp
ret
_foo2:
subl $4, %esp
movl %ebx, (%esp)
movb $223, %cl
movl 8(%esp), %eax
movl 12(%esp), %edx
andb 16(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
xorl %ecx, %ecx
xorb %bl, %bl
testb %bl, %bl
cmovne %eax, %edx
cmovne %ecx, %eax
movl (%esp), %ebx
addl $4, %esp
ret




---
Diffs of the changes:  (+66 -0)

 LegalizeDAG.cpp |   66 
 1 files changed, 66 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.398 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.399
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.398 Mon Sep 18 18:28:33 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Sep 19 22:38:48 2006
@@ -3781,6 +3781,72 @@
   return true;
 }
   }
+  
+  // Okay, the shift amount isn't constant.  However, if we can tell that it is
+  // = 32 or  32, we can still simplify it, without knowing the actual value.
+  uint64_t Mask = NVTBits, KnownZero, KnownOne;
+  TLI.ComputeMaskedBits(Amt, Mask, KnownZero, KnownOne);
+  
+  // If we know that the high bit of the shift amount is one, then we can do
+  // this as a couple of simple shifts.
+  if (KnownOne  Mask) {
+// Mask out the high bit, which we know is set.
+Amt = DAG.getNode(ISD::AND, Amt.getValueType(), Amt,
+  DAG.getConstant(NVTBits-1, Amt.getValueType()));
+
+// Expand the incoming operand to be shifted, so that we have its parts
+SDOperand InL, InH;
+ExpandOp(Op, InL, InH);
+switch(Opc) {
+case ISD::SHL:
+  Lo = DAG.getConstant(0, NVT);  // Low part is zero.
+  Hi = DAG.getNode(ISD::SHL, NVT, InL, Amt); // High part from Lo part.
+  return true;
+case ISD::SRL:
+  Hi = DAG.getConstant(0, NVT);  // Hi part is zero.
+  Lo = DAG.getNode(ISD::SRL, NVT, InH, Amt); // Lo part from Hi part.
+  return true;
+case ISD::SRA:
+  Hi = DAG.getNode(ISD::SRA, NVT, InH,   // Sign extend high part.
+   DAG.getConstant(NVTBits-1, Amt.getValueType()));
+  Lo = DAG.getNode(ISD::SRA, NVT, InH, Amt); // Lo part from Hi part.
+  return true;
+}
+  }
+  
+  // If we know that the high bit of the shift amount is zero, then we can do
+  // this as a couple of simple shifts.
+  if (KnownZero  Mask) {
+// Compute 32-amt.
+SDOperand Amt2 = DAG.getNode(ISD::SUB, Amt.getValueType(),
+ DAG.getConstant(NVTBits, Amt.getValueType()),
+ Amt);
+
+// Expand the incoming operand to be shifted, so that we have its parts
+SDOperand InL, InH;
+ExpandOp(Op, InL, InH);
+switch(Opc) {
+case ISD::SHL:
+  Lo = DAG.getNode(ISD::SHL, NVT, InL, Amt);
+  Hi = DAG.getNode(ISD::OR, NVT,
+   DAG.getNode(ISD::SHL, NVT, InH, Amt),
+   DAG.getNode(ISD::SRL, NVT, InL, Amt2));
+  return true;
+case ISD::SRL:
+  Hi = DAG.getNode(ISD::SRL, NVT, InH, Amt);
+  Lo = DAG.getNode(ISD::OR, NVT,
+   DAG.getNode(ISD::SRL, NVT, InL, Amt),
+   DAG.getNode(ISD::SHL, NVT, InH, Amt2));
+  return true;
+case ISD::SRA:
+  Hi = DAG.getNode(ISD::SRA, NVT, InH, Amt);
+  Lo = DAG.getNode(ISD::OR, NVT,
+   DAG.getNode(ISD::SRL, NVT, InL, Amt),
+   DAG.getNode(ISD::SHL, NVT, InH, Amt2));
+  return true;
+}
+  }
+  
   return false;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-18 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.396 - 1.397
---
Log message:

Allow  i32 UDIV, SDIV, UREM, SREM to be expanded into libcalls.


---
Diffs of the changes:  (+30 -6)

 LegalizeDAG.cpp |   36 ++--
 1 files changed, 30 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.396 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.397
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.396 Sat Sep 16 00:08:34 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Sep 18 16:49:04 2006
@@ -2148,6 +2148,19 @@
   if (Tmp1.Val) Result = Tmp1;
   break;
 case TargetLowering::Expand: {
+  if (Node-getValueType(0) == MVT::i32) {
+switch (Node-getOpcode()) {
+default:  assert(0  Do not know how to expand this integer BinOp!);
+case ISD::UDIV:
+case ISD::SDIV:
+  const char *FnName = Node-getOpcode() == ISD::UDIV
+? __udivsi3 : __divsi3;
+  SDOperand Dummy;
+  Result = ExpandLibCall(FnName, Node, Dummy);
+};
+break;
+  }
+
   assert(MVT::isVector(Node-getValueType(0)) 
  Cannot expand this binary operator!);
   // Expand the operation into a bunch of nasty scalar code.
@@ -2318,13 +2331,24 @@
   }
   break;
 case TargetLowering::Expand:
+  unsigned DivOpc= (Node-getOpcode() == ISD::UREM) ? ISD::UDIV : 
ISD::SREM;
   if (MVT::isInteger(Node-getValueType(0))) {
-// X % Y - X-X/Y*Y
-MVT::ValueType VT = Node-getValueType(0);
-unsigned Opc = Node-getOpcode() == ISD::UREM ? ISD::UDIV : ISD::SDIV;
-Result = DAG.getNode(Opc, VT, Tmp1, Tmp2);
-Result = DAG.getNode(ISD::MUL, VT, Result, Tmp2);
-Result = DAG.getNode(ISD::SUB, VT, Tmp1, Result);
+if (TLI.getOperationAction(DivOpc, Node-getValueType(0)) ==
+TargetLowering::Legal) {
+  // X % Y - X-X/Y*Y
+  MVT::ValueType VT = Node-getValueType(0);
+  unsigned Opc = Node-getOpcode() == ISD::UREM ? ISD::UDIV : 
ISD::SDIV;
+  Result = DAG.getNode(Opc, VT, Tmp1, Tmp2);
+  Result = DAG.getNode(ISD::MUL, VT, Result, Tmp2);
+  Result = DAG.getNode(ISD::SUB, VT, Tmp1, Result);
+} else {
+  assert(Node-getValueType(0) == MVT::i32 
+ Cannot expand this binary operator!);
+  const char *FnName = Node-getOpcode() == ISD::UREM
+? __umodsi3 : __modsi3;
+  SDOperand Dummy;
+  Result = ExpandLibCall(FnName, Node, Dummy);
+}
   } else {
 // Floating point mod - fmod libcall.
 const char *FnName = Node-getValueType(0) == MVT::f32 ? 
fmodf:fmod;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-18 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.397 - 1.398
---
Log message:

Fix a typo.

---
Diffs of the changes:  (+2 -3)

 LegalizeDAG.cpp |5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.397 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.398
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.397 Mon Sep 18 16:49:04 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Sep 18 18:28:33 2006
@@ -2331,14 +2331,13 @@
   }
   break;
 case TargetLowering::Expand:
-  unsigned DivOpc= (Node-getOpcode() == ISD::UREM) ? ISD::UDIV : 
ISD::SREM;
+  unsigned DivOpc= (Node-getOpcode() == ISD::UREM) ? ISD::UDIV : 
ISD::SDIV;
   if (MVT::isInteger(Node-getValueType(0))) {
 if (TLI.getOperationAction(DivOpc, Node-getValueType(0)) ==
 TargetLowering::Legal) {
   // X % Y - X-X/Y*Y
   MVT::ValueType VT = Node-getValueType(0);
-  unsigned Opc = Node-getOpcode() == ISD::UREM ? ISD::UDIV : 
ISD::SDIV;
-  Result = DAG.getNode(Opc, VT, Tmp1, Tmp2);
+  Result = DAG.getNode(DivOpc, VT, Tmp1, Tmp2);
   Result = DAG.getNode(ISD::MUL, VT, Result, Tmp2);
   Result = DAG.getNode(ISD::SUB, VT, Tmp1, Result);
 } else {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-15 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.393 - 1.394
---
Log message:

Allow custom expand of mul


---
Diffs of the changes:  (+9 -0)

 LegalizeDAG.cpp |9 +
 1 files changed, 9 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.393 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.394
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.393 Tue Sep 12 22:50:39 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Sep 15 19:09:24 2006
@@ -4693,6 +4693,15 @@
 break;
   }
   case ISD::MUL: {
+// If the target wants to custom expand this, let them.
+if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) {
+  Op = TLI.LowerOperation(Op, DAG);
+  if (Op.Val) {
+ExpandOp(Op, Lo, Hi);
+break;
+  }
+}
+
 bool HasMULHS = TLI.isOperationLegal(ISD::MULHS, NVT);
 bool HasMULHU = TLI.isOperationLegal(ISD::MULHU, NVT);
 bool UseLibCall = true;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-15 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.394 - 1.395
---
Log message:

simplify control flow, no functionality change


---
Diffs of the changes:  (+12 -6)

 LegalizeDAG.cpp |   18 --
 1 files changed, 12 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.394 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.395
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.394 Fri Sep 15 19:09:24 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Sep 15 19:21:44 2006
@@ -4723,22 +4723,28 @@
   LH.getOpcode() == ISD::SRA  LH.getOperand(0) == LL 
   LH.getOperand(1).getOpcode() == ISD::Constant 
   castConstantSDNode(LH.getOperand(1))-getValue() == SH) {
+// FIXME: Move this to the dag combiner.
+
+// Low part:
+Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
+// High part:
 Hi = DAG.getNode(ISD::MULHS, NVT, LL, RL);
-UseLibCall = false;
+break;
   } else if (HasMULHU) {
+// Low part:
+Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
+
+// High part:
 Hi = DAG.getNode(ISD::MULHU, NVT, LL, RL);
 RH = DAG.getNode(ISD::MUL, NVT, LL, RH);
 LH = DAG.getNode(ISD::MUL, NVT, LH, RL);
 Hi = DAG.getNode(ISD::ADD, NVT, Hi, RH);
 Hi = DAG.getNode(ISD::ADD, NVT, Hi, LH);
-UseLibCall = false;
+break;
   }
-  if (!UseLibCall)
-Lo = DAG.getNode(ISD::MUL, NVT, LL, RL);
 }
 
-if (UseLibCall)
-  Lo = ExpandLibCall(__muldi3 , Node, Hi);
+Lo = ExpandLibCall(__muldi3 , Node, Hi);
 break;
   }
   case ISD::SDIV: Lo = ExpandLibCall(__divdi3 , Node, Hi); break;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-15 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.395 - 1.396
---
Log message:

Oh yeah, this is needed too


---
Diffs of the changes:  (+3 -3)

 LegalizeDAG.cpp |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.395 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.396
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.395 Fri Sep 15 19:21:44 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Sep 16 00:08:34 2006
@@ -4695,9 +4695,9 @@
   case ISD::MUL: {
 // If the target wants to custom expand this, let them.
 if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) {
-  Op = TLI.LowerOperation(Op, DAG);
-  if (Op.Val) {
-ExpandOp(Op, Lo, Hi);
+  SDOperand New = TLI.LowerOperation(Op, DAG);
+  if (New.Val) {
+ExpandOp(New, Lo, Hi);
 break;
   }
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp SelectionDAGISel.cpp

2006-09-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.391 - 1.392
SelectionDAG.cpp updated: 1.336 - 1.337
SelectionDAGISel.cpp updated: 1.273 - 1.274
---
Log message:

Implement the fpowi now by lowering to a libcall


---
Diffs of the changes:  (+16 -1)

 LegalizeDAG.cpp  |9 -
 SelectionDAG.cpp |1 +
 SelectionDAGISel.cpp |7 +++
 3 files changed, 16 insertions(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.391 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.392
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.391 Fri Sep  8 19:20:27 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Sat Sep  9 01:03:30 2006
@@ -2581,7 +2581,14 @@
   break;
 }
 break;
-
+  case ISD::FPOWI: {
+// We always lower FPOWI into a libcall.  No target support it yet.
+const char *FnName = Node-getValueType(0) == MVT::f32
+? __powisf2 : __powidf2;
+SDOperand Dummy;
+Result = ExpandLibCall(FnName, Node, Dummy);
+break;
+  }
   case ISD::BIT_CONVERT:
 if (!isTypeLegal(Node-getOperand(0).getValueType())) {
   Result = ExpandBIT_CONVERT(Node-getValueType(0), Node-getOperand(0));


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.336 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.337
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.336Tue Aug 29 
01:42:35 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Sat Sep  9 01:03:30 2006
@@ -2404,6 +2404,7 @@
   case ISD::FSQRT:  return fsqrt;
   case ISD::FSIN:   return fsin;
   case ISD::FCOS:   return fcos;
+  case ISD::FPOWI:  return fpowi;
 
   // Binary operators
   case ISD::ADD:return add;


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.273 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.274
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.273Wed Sep  6 
20:59:34 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Sat Sep  9 01:03:30 2006
@@ -1620,6 +1620,13 @@
  getValue(I.getOperand(1)).getValueType(),
  getValue(I.getOperand(1;
 return 0;
+  case Intrinsic::powi_f32:
+  case Intrinsic::powi_f64:
+setValue(I, DAG.getNode(ISD::FPOWI,
+ getValue(I.getOperand(1)).getValueType(),
+ getValue(I.getOperand(1)),
+ getValue(I.getOperand(2;
+return 0;
   case Intrinsic::pcmarker: {
 SDOperand Tmp = getValue(I.getOperand(1));
 DAG.setRoot(DAG.getNode(ISD::PCMARKER, MVT::Other, getRoot(), Tmp));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-09-08 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.390 - 1.391
---
Log message:

Allow targets to custom lower expanded BIT_CONVERT's


---
Diffs of the changes:  (+15 -2)

 LegalizeDAG.cpp |   17 +++--
 1 files changed, 15 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.390 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.391
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.390 Fri Sep  1 13:17:58 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Sep  8 19:20:27 2006
@@ -4457,8 +4457,21 @@
 break;
 
   case ISD::BIT_CONVERT: {
-SDOperand Tmp = ExpandBIT_CONVERT(Node-getValueType(0), 
-  Node-getOperand(0));
+SDOperand Tmp;
+if (TLI.getOperationAction(ISD::BIT_CONVERT, VT) == 
TargetLowering::Custom){
+  // If the target wants to, allow it to lower this itself.
+  switch (getTypeAction(Node-getOperand(0).getValueType())) {
+  case Expand: assert(0  cannot expand FP!);
+  case Legal:   Tmp = LegalizeOp(Node-getOperand(0)); break;
+  case Promote: Tmp = PromoteOp (Node-getOperand(0)); break;
+  }
+  Tmp = TLI.LowerOperation(DAG.getNode(ISD::BIT_CONVERT, VT, Tmp), DAG);
+}
+
+// Turn this into a load/store pair by default.
+if (Tmp.Val == 0)
+  Tmp = ExpandBIT_CONVERT(Node-getValueType(0), Node-getOperand(0));
+
 ExpandOp(Tmp, Lo, Hi);
 break;
   }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-08-21 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.387 - 1.388
---
Log message:

Fix PR861: http://llvm.org/PR861 


---
Diffs of the changes:  (+1 -0)

 LegalizeDAG.cpp |1 +
 1 files changed, 1 insertion(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.387 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.388
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.387 Mon Aug 14 18:53:35 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Aug 21 15:24:53 2006
@@ -1502,6 +1502,7 @@
   SDOperand Lo, Hi;
   ExpandOp(Tmp2, Lo, Hi);
   Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Tmp3, Hi, Tmp3);
+  Result = LegalizeOp(Result);
 } else {
   SDNode *InVal = Tmp2.Val;
   unsigned NumElems =



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp

2006-08-07 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.384 - 1.385
SelectionDAG.cpp updated: 1.319 - 1.320
---
Log message:

Eliminate some malloc traffic by allocating vectors on the stack.  Change some
method that took std::vectorSDOperand to take a pointer to a first operand
and #operands.

This speeds up isel on kc++ by about 3%.



---
Diffs of the changes:  (+67 -82)

 LegalizeDAG.cpp  |   44 ---
 SelectionDAG.cpp |  105 +++
 2 files changed, 67 insertions(+), 82 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.384 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.385
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.384 Fri Aug  4 12:45:20 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Aug  7 20:09:31 2006
@@ -22,6 +22,7 @@
 #include llvm/Support/MathExtras.h
 #include llvm/Support/CommandLine.h
 #include llvm/Support/Visibility.h
+#include llvm/ADT/SmallVector.h
 #include iostream
 #include map
 using namespace llvm;
@@ -541,11 +542,11 @@
 if (Node-getOpcode() = ISD::BUILTIN_OP_END) {
   // If this is a target node, legalize it by legalizing the operands then
   // passing it through.
-  std::vectorSDOperand Ops;
+  SmallVectorSDOperand, 8 Ops;
   for (unsigned i = 0, e = Node-getNumOperands(); i != e; ++i)
 Ops.push_back(LegalizeOp(Node-getOperand(i)));
 
-  Result = DAG.UpdateNodeOperands(Result.getValue(0), Ops);
+  Result = DAG.UpdateNodeOperands(Result.getValue(0), Ops[0], Ops.size());
 
   for (unsigned i = 0, e = Node-getNumValues(); i != e; ++i)
 AddLegalizedOperand(Op.getValue(i), Result.getValue(i));
@@ -621,10 +622,10 @@
   case ISD::INTRINSIC_W_CHAIN:
   case ISD::INTRINSIC_WO_CHAIN:
   case ISD::INTRINSIC_VOID: {
-std::vectorSDOperand Ops;
+SmallVectorSDOperand, 8 Ops;
 for (unsigned i = 0, e = Node-getNumOperands(); i != e; ++i)
   Ops.push_back(LegalizeOp(Node-getOperand(i)));
-Result = DAG.UpdateNodeOperands(Result, Ops);
+Result = DAG.UpdateNodeOperands(Result, Ops[0], Ops.size());
 
 // Allow the target to custom lower its intrinsics if it wants to.
 if (TLI.getOperationAction(Node-getOpcode(), MVT::Other) == 
@@ -690,7 +691,7 @@
 case TargetLowering::Legal:
   if (Tmp1 != Node-getOperand(0) ||
   getTypeAction(Node-getOperand(1).getValueType()) == Promote) {
-std::vectorSDOperand Ops;
+SmallVectorSDOperand, 8 Ops;
 Ops.push_back(Tmp1);
 if (getTypeAction(Node-getOperand(1).getValueType()) == Legal) {
   Ops.push_back(Node-getOperand(1));  // line # must be legal.
@@ -702,7 +703,7 @@
 }
 Ops.push_back(Node-getOperand(3));  // filename must be legal.
 Ops.push_back(Node-getOperand(4));  // working dir # must be legal.
-Result = DAG.UpdateNodeOperands(Result, Ops);
+Result = DAG.UpdateNodeOperands(Result, Ops[0], Ops.size());
   }
   break;
 }
@@ -815,11 +816,11 @@
   Tmp3 = LegalizeOp(Node-getOperand(2));
   Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3);
 } else {
-  std::vectorSDOperand Ops;
+  SmallVectorSDOperand, 8 Ops;
   // Legalize the operands.
   for (unsigned i = 0, e = Node-getNumOperands(); i != e; ++i)
 Ops.push_back(LegalizeOp(Node-getOperand(i)));
-  Result = DAG.UpdateNodeOperands(Result, Ops);
+  Result = DAG.UpdateNodeOperands(Result, Ops[0], Ops.size());
 }
 break;
 
@@ -1074,9 +1075,9 @@
   
 // Do not try to legalize the target-specific arguments (#1+).
 if (Tmp1 != Node-getOperand(0)) {
-  std::vectorSDOperand Ops(Node-op_begin(), Node-op_end());
+  SmallVectorSDOperand, 8 Ops(Node-op_begin(), Node-op_end());
   Ops[0] = Tmp1;
-  Result = DAG.UpdateNodeOperands(Result, Ops);
+  Result = DAG.UpdateNodeOperands(Result, Ops[0], Ops.size());
 }
 
 // Remember that the CALLSEQ_START is legalized.
@@ -1117,18 +1118,18 @@
 // an optional flag input.
 if (Node-getOperand(Node-getNumOperands()-1).getValueType() != 
MVT::Flag){
   if (Tmp1 != Node-getOperand(0)) {
-std::vectorSDOperand Ops(Node-op_begin(), Node-op_end());
+SmallVectorSDOperand, 8 Ops(Node-op_begin(), Node-op_end());
 Ops[0] = Tmp1;
-Result = DAG.UpdateNodeOperands(Result, Ops);
+Result = DAG.UpdateNodeOperands(Result, Ops[0], Ops.size());
   }
 } else {
   Tmp2 = LegalizeOp(Node-getOperand(Node-getNumOperands()-1));
   if (Tmp1 != Node-getOperand(0) ||
   Tmp2 != Node-getOperand(Node-getNumOperands()-1)) {
-std::vectorSDOperand Ops(Node-op_begin(), Node-op_end());
+SmallVectorSDOperand, 8 Ops(Node-op_begin(), Node-op_end());
 Ops[0] = Tmp1;
 Ops.back() = Tmp2;
-Result = 

[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp SelectionDAG.cpp

2006-08-04 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.383 - 1.384
SelectionDAG.cpp updated: 1.316 - 1.317
---
Log message:

Make SelectionDAG::RemoveDeadNodes iterative instead of recursive, which
also make it simpler.


---
Diffs of the changes:  (+33 -51)

 LegalizeDAG.cpp  |2 -
 SelectionDAG.cpp |   82 +--
 2 files changed, 33 insertions(+), 51 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.383 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.384
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.383 Wed Jul 26 18:55:56 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Fri Aug  4 12:45:20 2006
@@ -349,7 +349,7 @@
   PackedNodes.clear();
 
   // Remove dead nodes now.
-  DAG.RemoveDeadNodes(OldRoot.Val);
+  DAG.RemoveDeadNodes();
 }
 
 


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.316 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.317
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.316Wed Aug  2 
17:00:34 2006
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Fri Aug  4 12:45:20 2006
@@ -23,6 +23,7 @@
 #include llvm/Target/TargetInstrInfo.h
 #include llvm/Target/TargetMachine.h
 #include llvm/ADT/SetVector.h
+#include llvm/ADT/SmallVector.h
 #include llvm/ADT/StringExtras.h
 #include iostream
 #include set
@@ -263,69 +264,50 @@
 
//===--===//
 
 /// RemoveDeadNodes - This method deletes all unreachable nodes in the
-/// SelectionDAG, including nodes (like loads) that have uses of their token
-/// chain but no other uses and no side effect.  If a node is passed in as an
-/// argument, it is used as the seed for node deletion.
-void SelectionDAG::RemoveDeadNodes(SDNode *N) {
+/// SelectionDAG.
+void SelectionDAG::RemoveDeadNodes() {
   // Create a dummy node (which is not added to allnodes), that adds a 
reference
   // to the root node, preventing it from being deleted.
   HandleSDNode Dummy(getRoot());
 
-  bool MadeChange = false;
+  SmallVectorSDNode*, 128 DeadNodes;
   
-  // If we have a hint to start from, use it.
-  if (N  N-use_empty()) {
-DestroyDeadNode(N);
-MadeChange = true;
-  }
-
+  // Add all obviously-dead nodes to the DeadNodes worklist.
   for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ++I)
-if (I-use_empty()  I-getOpcode() != 65535) {
-  // Node is dead, recursively delete newly dead uses.
-  DestroyDeadNode(I);
-  MadeChange = true;
-}
-  
-  // Walk the nodes list, removing the nodes we've marked as dead.
-  if (MadeChange) {
-for (allnodes_iterator I = allnodes_begin(), E = allnodes_end(); I != E; ) 
{
-  SDNode *N = I++;
-  if (N-use_empty())
-AllNodes.erase(N);
+if (I-use_empty())
+  DeadNodes.push_back(I);
+
+  // Process the worklist, deleting the nodes and adding their uses to the
+  // worklist.
+  while (!DeadNodes.empty()) {
+SDNode *N = DeadNodes.back();
+DeadNodes.pop_back();
+
+// Take the node out of the appropriate CSE map.
+RemoveNodeFromCSEMaps(N);
+
+// Next, brutally remove the operand list.  This is safe to do, as there 
are
+// no cycles in the graph.
+for (SDNode::op_iterator I = N-op_begin(), E = N-op_end(); I != E; ++I) {
+  SDNode *Operand = I-Val;
+  Operand-removeUser(N);
+  
+  // Now that we removed this operand, see if there are no uses of it left.
+  if (Operand-use_empty())
+DeadNodes.push_back(Operand);
 }
+delete[] N-OperandList;
+N-OperandList = 0;
+N-NumOperands = 0;
+
+// Finally, remove N itself.
+AllNodes.erase(N);
   }
   
   // If the root changed (e.g. it was a dead load, update the root).
   setRoot(Dummy.getValue());
 }
 
-/// DestroyDeadNode - We know that N is dead.  Nuke it from the CSE maps for 
the
-/// graph.  If it is the last user of any of its operands, recursively process
-/// them the same way.
-/// 
-void SelectionDAG::DestroyDeadNode(SDNode *N) {
-  // Okay, we really are going to delete this node.  First take this out of the
-  // appropriate CSE map.
-  RemoveNodeFromCSEMaps(N);
-  
-  // Next, brutally remove the operand list.  This is safe to do, as there are
-  // no cycles in the graph.
-  for (SDNode::op_iterator I = N-op_begin(), E = N-op_end(); I != E; ++I) {
-SDNode *O = I-Val;
-O-removeUser(N);
-
-// Now that we removed this operand, see if there are no uses of it left.
-if (O-use_empty())
-  DestroyDeadNode(O);
-  }
-  delete[] N-OperandList;
-  N-OperandList = 0;
-  N-NumOperands = 0;
-
-  // Mark the node as dead.
-  N-MorphNodeTo(65535);
-}
-
 void SelectionDAG::DeleteNode(SDNode *N) {
   assert(N-use_empty()  Cannot delete a node that is not dead!);
 




[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-07-26 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.382 - 1.383
---
Log message:

Fix a case where LegalizeAllNodesNotLeadingTo could take exponential time.
This manifested itself as really long time to compile 
Regression/CodeGen/Generic/2003-05-28-ManyArgs.ll on ppc.
This is PR847: http://llvm.org/PR847 .


---
Diffs of the changes:  (+21 -6)

 LegalizeDAG.cpp |   27 +--
 1 files changed, 21 insertions(+), 6 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.382 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.383
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.382 Tue Jul 11 12:58:07 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Jul 26 18:55:56 2006
@@ -177,7 +177,8 @@
   /// build_vector Mask.  If it's not a legal shuffle, it returns null.
   SDNode *isShuffleLegal(MVT::ValueType VT, SDOperand Mask) const;
   
-  bool LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode *Dest);
+  bool LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode *Dest,
+std::setSDNode* NodesLeadingTo);
 
   void LegalizeSetCCOperands(SDOperand LHS, SDOperand RHS, SDOperand CC);
 
@@ -406,10 +407,18 @@
 /// LegalizeAllNodesNotLeadingTo - Recursively walk the uses of N, looking to
 /// see if any uses can reach Dest.  If no dest operands can get to dest, 
 /// legalize them, legalize ourself, and return false, otherwise, return true.
-bool SelectionDAGLegalize::LegalizeAllNodesNotLeadingTo(SDNode *N, 
-SDNode *Dest) {
+///
+/// Keep track of the nodes we fine that actually do lead to Dest in
+/// NodesLeadingTo.  This avoids retraversing them exponential number of times.
+///
+bool SelectionDAGLegalize::LegalizeAllNodesNotLeadingTo(SDNode *N, SDNode 
*Dest,
+std::setSDNode* NodesLeadingTo) 
{
   if (N == Dest) return true;  // N certainly leads to Dest :)
   
+  // If we've already processed this node and it does lead to Dest, there is no
+  // need to reprocess it.
+  if (NodesLeadingTo.count(N)) return true;
+  
   // If the first result of this node has been already legalized, then it 
cannot
   // reach N.
   switch (getTypeAction(N-getValueType(0))) {
@@ -429,9 +438,12 @@
   bool OperandsLeadToDest = false;
   for (unsigned i = 0, e = N-getNumOperands(); i != e; ++i)
 OperandsLeadToDest |= // If an operand leads to Dest, so do we.
-  LegalizeAllNodesNotLeadingTo(N-getOperand(i).Val, Dest);
+  LegalizeAllNodesNotLeadingTo(N-getOperand(i).Val, Dest, NodesLeadingTo);
 
-  if (OperandsLeadToDest) return true;
+  if (OperandsLeadToDest) {
+NodesLeadingTo.insert(N);
+return true;
+  }
 
   // Okay, this node looks safe, legalize it and return false.
   HandleOp(SDOperand(N, 0));
@@ -1043,8 +1055,11 @@
 // Recursively Legalize all of the inputs of the call end that do not lead
 // to this call start.  This ensures that any libcalls that need be 
inserted
 // are inserted *before* the CALLSEQ_START.
+{std::setSDNode* NodesLeadingTo;
 for (unsigned i = 0, e = CallEnd-getNumOperands(); i != e; ++i)
-  LegalizeAllNodesNotLeadingTo(CallEnd-getOperand(i).Val, Node);
+  LegalizeAllNodesNotLeadingTo(CallEnd-getOperand(i).Val, Node,
+   NodesLeadingTo);
+}
 
 // Now that we legalized all of the inputs (which may have inserted
 // libcalls) create the new CALLSEQ_START node.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp ScheduleDAG.cpp

2006-07-11 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.381 - 1.382
ScheduleDAG.cpp updated: 1.96 - 1.97
---
Log message:

Ensure that dump calls that are associated with asserts are removed from
non-debug build.


---
Diffs of the changes:  (+14 -2)

 LegalizeDAG.cpp |   14 +-
 ScheduleDAG.cpp |2 +-
 2 files changed, 14 insertions(+), 2 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.381 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.382
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.381 Mon Jul 10 20:40:09 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Jul 11 12:58:07 2006
@@ -540,7 +540,9 @@
   return Result.getValue(Op.ResNo);
 }
 // Otherwise this is an unhandled builtin node.  splat.
+#ifndef NDEBUG
 std::cerr  NODE: ; Node-dump(); std::cerr  \n;
+#endif
 assert(0  Do not know how to legalize this operator!);
 abort();
   case ISD::GlobalAddress:
@@ -2865,7 +2867,9 @@
   case ISD::CopyFromReg:
 assert(0  CopyFromReg must be legal!);
   default:
+#ifndef NDEBUG
 std::cerr  NODE: ; Node-dump(); std::cerr  \n;
+#endif
 assert(0  Do not know how to promote this operator!);
 abort();
   case ISD::UNDEF:
@@ -4205,7 +4209,9 @@
   case ISD::CopyFromReg:
 assert(0  CopyFromReg must be legal!);
   default:
+#ifndef NDEBUG
 std::cerr  NODE: ; Node-dump(); std::cerr  \n;
+#endif
 assert(0  Do not know how to expand this operator!);
 abort();
   case ISD::UNDEF:
@@ -4703,7 +4709,11 @@
   }
   
   switch (Node-getOpcode()) {
-  default: Node-dump(); assert(0  Unhandled operation in SplitVectorOp!);
+  default: 
+#ifndef NDEBUG
+Node-dump();
+#endif
+assert(0  Unhandled operation in SplitVectorOp!);
   case ISD::VBUILD_VECTOR: {
 std::vectorSDOperand LoOps(Node-op_begin(), 
Node-op_begin()+NewNumElts);
 LoOps.push_back(NewNumEltsNode);
@@ -4820,7 +4830,9 @@
   SDOperand Result;
   switch (Node-getOpcode()) {
   default: 
+#ifndef NDEBUG
 Node-dump(); std::cerr  \n;
+#endif
 assert(0  Unknown vector operation in PackVectorOp!);
   case ISD::VADD:
   case ISD::VSUB:


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.96 
llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.97
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.96  Thu Jun 15 02:22:16 2006
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp   Tue Jul 11 12:58:07 2006
@@ -421,7 +421,7 @@
   } else {
 switch (Node-getOpcode()) {
 default:
-  Node-dump(); 
+  DEBUG(Node-dump()); 
   assert(0  This target-independent node should have been selected!);
 case ISD::EntryToken: // fall thru
 case ISD::TokenFactor:



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


  1   2   3   >