[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2007-06-19 Thread Dan Gohman


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.65 -> 1.66
---
Log message:

Pass a SelectionDAG into SDNode::dump everywhere it's used, in prepration
for needing the DAG node to print pre-legalize extended value types, and
to get better debug messages with target-specific nodes.


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.65 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.66
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.65  Mon Apr 16 13:10:23 2007
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Jun 19 09:13:56 2007
@@ -470,7 +470,7 @@
 switch (TypeBeingLoaded) {
 default:
 #ifndef NDEBUG
-  N->dump();
+  N->dump(CurDAG);
 #endif
   assert(0 && "Cannot load this type!");
 case MVT::i1: { // this is a bool



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64InstrInfo.td

2006-11-25 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.60 -> 1.61
IA64InstrInfo.td updated: 1.48 -> 1.49
---
Log message:

fix storing bools to mem and unordered FP ops



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

 IA64ISelDAGToDAG.cpp |2 +-
 IA64InstrInfo.td |8 
 2 files changed, 5 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.60 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.61
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.60  Thu Nov  2 14:25:49 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Nov 25 22:34:26 2006
@@ -515,7 +515,7 @@
 SDOperand Tmp = ST->getValue();
 AddToISelQueue(Tmp);
 Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
-  CurDAG->getConstant(1, MVT::i64),
+  CurDAG->getTargetConstant(1, 
MVT::i64),
   Tmp), 0);
 return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
   }


Index: llvm/lib/Target/IA64/IA64InstrInfo.td
diff -u llvm/lib/Target/IA64/IA64InstrInfo.td:1.48 
llvm/lib/Target/IA64/IA64InstrInfo.td:1.49
--- llvm/lib/Target/IA64/IA64InstrInfo.td:1.48  Mon Jul 31 13:43:10 2006
+++ llvm/lib/Target/IA64/IA64InstrInfo.td   Sat Nov 25 22:34:26 2006
@@ -307,16 +307,16 @@
   "fcmp.neq $dst, p0 = $src1, $src2",
  [(set PR:$dst, (setne FP:$src1, FP:$src2))]>, isF;
 def FCMPLTU: AForm_DAG<0x03, 0x0b, (ops PR:$dst, FP:$src1, FP:$src2),
-  "fcmp.ltu $dst, p0 = $src1, $src2",
+  "fcmp.lt $dst, p0 = $src1, $src2",
  [(set PR:$dst, (setult FP:$src1, FP:$src2))]>, isF;
 def FCMPGTU: AForm_DAG<0x03, 0x0b, (ops PR:$dst, FP:$src1, FP:$src2),
-  "fcmp.gtu $dst, p0 = $src1, $src2",
+  "fcmp.gt $dst, p0 = $src1, $src2",
  [(set PR:$dst, (setugt FP:$src1, FP:$src2))]>, isF;
 def FCMPLEU: AForm_DAG<0x03, 0x0b, (ops PR:$dst, FP:$src1, FP:$src2),
-  "fcmp.leu $dst, p0 = $src1, $src2",
+  "fcmp.le $dst, p0 = $src1, $src2",
  [(set PR:$dst, (setule FP:$src1, FP:$src2))]>, isF;
 def FCMPGEU: AForm_DAG<0x03, 0x0b, (ops PR:$dst, FP:$src1, FP:$src2),
-  "fcmp.geu $dst, p0 = $src1, $src2",
+  "fcmp.ge $dst, p0 = $src1, $src2",
  [(set PR:$dst, (setuge FP:$src1, FP:$src2))]>, isF;
 
 def PCMPEQUNCR0R0 : AForm<0x03, 0x0b, (ops PR:$dst, PR:$qp),



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-11-02 Thread Reid Spencer


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.59 -> 1.60
---
Log message:

For PR786: http://llvm.org/PR786 :
Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining 
issues when they see them. All changes pass DejaGnu tests and Olden.


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.59 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.60
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.59  Tue Oct 24 12:09:43 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Nov  2 14:25:49 2006
@@ -337,11 +337,9 @@
   dyn_cast(N->getOperand(1))) {
   CallOpcode = IA64::BRCALL_IPREL_GA;
   CallOperand = CurDAG->getTargetGlobalAddress(GASD->getGlobal(), 
MVT::i64);
-} else if (ExternalSymbolSDNode *ESSDN = // FIXME: we currently NEED this
-// case for correctness, to avoid
-// "non-pic code with imm reloc.n
-// against dynamic symbol" errors
- dyn_cast(N->getOperand(1))) {
+} else if (isa(N->getOperand(1))) {
+  // FIXME: we currently NEED this case for correctness, to avoid
+  // "non-pic code with imm reloc.n against dynamic symbol" errors
 CallOpcode = IA64::BRCALL_IPREL_ES;
 CallOperand = N->getOperand(1);
   } else {



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-10-24 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.58 -> 1.59
---
Log message:

Fix CodeGen/IA64/ret-0.ll, which has apparently been broken since some of the
isel changes happened months ago.


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

 IA64ISelDAGToDAG.cpp |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.58 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.59
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.58  Fri Oct 13 16:14:26 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Oct 24 12:09:43 2006
@@ -408,12 +408,16 @@
   case ISD::TargetConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 
+SDOperand V;
 if (cast(N)->isExactlyValue(+0.0)) {
-  return CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64).Val;
+  V = CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64);
 } else if (cast(N)->isExactlyValue(+1.0)) {
-  return CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64).Val;
+  V = CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
 } else
   assert(0 && "Unexpected FP constant!");
+
+ReplaceUses(SDOperand(N, 0), V);
+return 0;
   }
 
   case ISD::FrameIndex: { // TODO: reduce creepyness



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-10-13 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.57 -> 1.58
IA64ISelLowering.cpp updated: 1.46 -> 1.47
---
Log message:

Merge ISD::TRUNCSTORE to ISD::STORE. Switch to using StoreSDNode.

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

 IA64ISelDAGToDAG.cpp |   14 +++---
 IA64ISelLowering.cpp |   10 +-
 2 files changed, 12 insertions(+), 12 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.57 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.58
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.57  Wed Oct 11 02:10:22 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Oct 13 16:14:26 2006
@@ -493,15 +493,15 @@
 Address, Chain);
   }
   
-  case ISD::TRUNCSTORE:
   case ISD::STORE: {
-SDOperand Address = N->getOperand(2);
-SDOperand Chain = N->getOperand(0);
+StoreSDNode *ST = cast(N);
+SDOperand Address = ST->getBasePtr();
+SDOperand Chain = ST->getChain();
 AddToISelQueue(Address);
 AddToISelQueue(Chain);

 unsigned Opc;
-if (N->getOpcode() == ISD::STORE) {
+if (ISD::isNON_TRUNCStore(N)) {
   switch (N->getOperand(1).getValueType()) {
   default: assert(0 && "unknown type in store");
   case MVT::i1: { // this is a bool
@@ -510,7 +510,7 @@
SDOperand Initial = CurDAG->getCopyFromReg(Chain, IA64::r0, MVT::i64);
Chain = Initial.getValue(1);
// then load 1 into the same reg iff the predicate to store is 1
-SDOperand Tmp = N->getOperand(1);
+SDOperand Tmp = ST->getValue();
 AddToISelQueue(Tmp);
 Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
   CurDAG->getConstant(1, MVT::i64),
@@ -520,8 +520,8 @@
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
   }
-} else { //ISD::TRUNCSTORE
-  switch(cast(N->getOperand(4))->getVT()) {
+} else { // Truncating store
+  switch(ST->getStoredVT()) {
   default: assert(0 && "unknown type in truncstore");
   case MVT::i8:  Opc = IA64::ST1;  break;
   case MVT::i16: Opc = IA64::ST2;  break;


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.46 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.47
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.46  Mon Oct  9 15:57:25 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Fri Oct 13 16:14:26 2006
@@ -331,7 +331,7 @@
   
   Chain = DAG.getCALLSEQ_START(Chain,DAG.getConstant(NumBytes, 
getPointerTy()));
 
-  SDOperand StackPtr, NullSV;
+  SDOperand StackPtr;
   std::vector Stores;
   std::vector Converts;
   std::vector RegValuesToPass;
@@ -383,11 +383,10 @@
   if(ValToStore.Val) {
 if(!StackPtr.Val) {
   StackPtr = DAG.getRegister(IA64::r12, MVT::i64);
-  NullSV = DAG.getSrcValue(NULL);
 }
 SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
 PtrOff = DAG.getNode(ISD::ADD, MVT::i64, StackPtr, PtrOff);
-Stores.push_back(DAG.getStore(Chain, ValToStore, PtrOff, NullSV));
+Stores.push_back(DAG.getStore(Chain, ValToStore, PtrOff, NULL, 0));
 ArgOffset += ObjSize;
   }
 
@@ -592,7 +591,7 @@
VT));
 // Store the incremented VAList to the legalized pointer
 VAIncr = DAG.getStore(VAList.getValue(1), VAIncr,
-  Op.getOperand(1), Op.getOperand(2));
+  Op.getOperand(1), SV->getValue(), SV->getOffset());
 // Load the actual argument out of the pointer VAList
 return DAG.getLoad(Op.getValueType(), VAIncr, VAList, NULL, 0);
   }
@@ -600,8 +599,9 @@
 // vastart just stores the address of the VarArgsFrameIndex slot into the
 // memory location argument.
 SDOperand FR = DAG.getFrameIndex(VarArgsFrameIndex, MVT::i64);
+SrcValueSDNode *SV = cast(Op.getOperand(2));
 return DAG.getStore(Op.getOperand(0), FR, 
-Op.getOperand(1), Op.getOperand(2));
+Op.getOperand(1), SV->getValue(), SV->getOffset());
   }
   }
 }



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-10-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.56 -> 1.57
---
Log message:

Naming consistency.

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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.56 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.57
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.56  Mon Oct  9 15:57:24 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Oct 11 02:10:22 2006
@@ -460,7 +460,7 @@
 AddToISelQueue(Chain);
 AddToISelQueue(Address);
 
-MVT::ValueType TypeBeingLoaded = LD->getLoadVT();
+MVT::ValueType TypeBeingLoaded = LD->getLoadedVT();
 unsigned Opc;
 switch (TypeBeingLoaded) {
 default:



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-10-09 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.55 -> 1.56
IA64ISelLowering.cpp updated: 1.45 -> 1.46
---
Log message:

Reflects ISD::LOAD / ISD::LOADX / LoadSDNode changes.


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

 IA64ISelDAGToDAG.cpp |   11 +--
 IA64ISelLowering.cpp |9 +
 2 files changed, 10 insertions(+), 10 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.55 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.56
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.55  Tue Oct  3 19:55:13 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Oct  9 15:57:24 2006
@@ -453,15 +453,14 @@
  }
 */
 
-  case ISD::LOAD:
-  case ISD::LOADX: { // FIXME: load -1, not 1, for bools?
-SDOperand Chain = N->getOperand(0);
-SDOperand Address = N->getOperand(1);
+  case ISD::LOAD: { // FIXME: load -1, not 1, for bools?
+LoadSDNode *LD = cast(N);
+SDOperand Chain = LD->getChain();
+SDOperand Address = LD->getBasePtr();
 AddToISelQueue(Chain);
 AddToISelQueue(Address);
 
-MVT::ValueType TypeBeingLoaded = (N->getOpcode() == ISD::LOAD) ?
-  N->getValueType(0) : cast(N->getOperand(3))->getVT();
+MVT::ValueType TypeBeingLoaded = LD->getLoadVT();
 unsigned Opc;
 switch (TypeBeingLoaded) {
 default:


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.45 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.46
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.45  Thu Oct  5 18:00:04 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Mon Oct  9 15:57:25 2006
@@ -133,7 +133,7 @@
 static bool isFloatingPointZero(SDOperand Op) {
   if (ConstantFPSDNode *CFP = dyn_cast(Op))
 return CFP->isExactlyValue(-0.0) || CFP->isExactlyValue(0.0);
-  else if (Op.getOpcode() == ISD::EXTLOAD || Op.getOpcode() == ISD::LOAD) {
+  else if (ISD::isEXTLoad(Op.Val) || ISD::isNON_EXTLoad(Op.Val)) {
 // Maybe this has already been legalized into the constant pool?
 if (ConstantPoolSDNode *CP = 
dyn_cast(Op.getOperand(1)))
   if (ConstantFP *CFP = dyn_cast(CP->getConstVal()))
@@ -226,7 +226,7 @@
 //from this parameter
 SDOperand FIN = DAG.getFrameIndex(FI, MVT::i64);
 argt = newroot = DAG.getLoad(getValueType(I->getType()),
- DAG.getEntryNode(), FIN, 
DAG.getSrcValue(NULL));
+ DAG.getEntryNode(), FIN, NULL, 0);
   }
   ++count;
   DAG.setRoot(newroot.getValue(1));
@@ -583,8 +583,9 @@
   }
   case ISD::VAARG: {
 MVT::ValueType VT = getPointerTy();
+SrcValueSDNode *SV = cast(Op.getOperand(2));
 SDOperand VAList = DAG.getLoad(VT, Op.getOperand(0), Op.getOperand(1), 
-   Op.getOperand(2));
+   SV->getValue(), SV->getOffset());
 // Increment the pointer, VAList, to the next vaarg
 SDOperand VAIncr = DAG.getNode(ISD::ADD, VT, VAList, 
DAG.getConstant(MVT::getSizeInBits(VT)/8, 
@@ -593,7 +594,7 @@
 VAIncr = DAG.getStore(VAList.getValue(1), VAIncr,
   Op.getOperand(1), Op.getOperand(2));
 // Load the actual argument out of the pointer VAList
-return DAG.getLoad(Op.getValueType(), VAIncr, VAList, DAG.getSrcValue(0));
+return DAG.getLoad(Op.getValueType(), VAIncr, VAList, NULL, 0);
   }
   case ISD::VASTART: {
 // vastart just stores the address of the VarArgsFrameIndex slot into the



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-10-03 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.54 -> 1.55
IA64ISelLowering.cpp updated: 1.43 -> 1.44
---
Log message:

Combine ISD::EXTLOAD, ISD::SEXTLOAD, ISD::ZEXTLOAD into ISD::LOADX. Add an
extra operand to LOADX to specify the exact value extension type.


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

 IA64ISelDAGToDAG.cpp |3 +--
 IA64ISelLowering.cpp |   18 +-
 2 files changed, 10 insertions(+), 11 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.54 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.55
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.54  Tue Sep 12 16:02:20 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Oct  3 19:55:13 2006
@@ -454,8 +454,7 @@
 */
 
   case ISD::LOAD:
-  case ISD::EXTLOAD: // FIXME: load -1, not 1, for bools?
-  case ISD::ZEXTLOAD: {
+  case ISD::LOADX: { // FIXME: load -1, not 1, for bools?
 SDOperand Chain = N->getOperand(0);
 SDOperand Address = N->getOperand(1);
 AddToISelQueue(Chain);


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.43 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.44
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.43  Tue Sep 12 16:02:20 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Tue Oct  3 19:55:13 2006
@@ -35,6 +35,15 @@
   // register class for predicate registers
   addRegisterClass(MVT::i1, IA64::PRRegisterClass);
 
+  setLoadXAction(ISD::EXTLOAD  , MVT::i1   , Promote);
+
+  setLoadXAction(ISD::ZEXTLOAD , MVT::i1   , Expand);
+
+  setLoadXAction(ISD::SEXTLOAD , MVT::i1   , Expand);
+  setLoadXAction(ISD::SEXTLOAD , MVT::i8   , Expand);
+  setLoadXAction(ISD::SEXTLOAD , MVT::i16  , Expand);
+  setLoadXAction(ISD::SEXTLOAD , MVT::i32  , Expand);
+
   setOperationAction(ISD::BRIND, MVT::i64,   Expand);
   setOperationAction(ISD::BR_CC, MVT::Other, Expand);
   setOperationAction(ISD::FP_ROUND_INREG   , MVT::f32  , Expand);
@@ -50,15 +59,6 @@
   setSetCCResultType(MVT::i1);
   setShiftAmountType(MVT::i64);
 
-  setOperationAction(ISD::EXTLOAD  , MVT::i1   , Promote);
-
-  setOperationAction(ISD::ZEXTLOAD , MVT::i1   , Expand);
-
-  setOperationAction(ISD::SEXTLOAD , MVT::i1   , Expand);
-  setOperationAction(ISD::SEXTLOAD , MVT::i8   , Expand);
-  setOperationAction(ISD::SEXTLOAD , MVT::i16  , Expand);
-  setOperationAction(ISD::SEXTLOAD , MVT::i32  , Expand);
-
   setOperationAction(ISD::FREM , MVT::f32  , Expand);
   setOperationAction(ISD::FREM , MVT::f64  , Expand);
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-09-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.53 -> 1.54
IA64ISelLowering.cpp updated: 1.42 -> 1.43
---
Log message:

Reflects MachineConstantPoolEntry changes.

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

 IA64ISelDAGToDAG.cpp |2 +-
 IA64ISelLowering.cpp |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.53 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.54
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.53  Sun Aug 27 03:12:51 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Sep 12 16:02:20 2006
@@ -429,7 +429,7 @@
   case ISD::ConstantPool: { // TODO: nuke the constant pool
//   (ia64 doesn't need one)
 ConstantPoolSDNode *CP = cast(N);
-Constant *C = CP->get();
+Constant *C = CP->getConstVal();
 SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64,
   CP->getAlignment());
 return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.42 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.43
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.42  Mon Sep  4 01:21:35 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Tue Sep 12 16:02:20 2006
@@ -136,7 +136,7 @@
   else if (Op.getOpcode() == ISD::EXTLOAD || Op.getOpcode() == ISD::LOAD) {
 // Maybe this has already been legalized into the constant pool?
 if (ConstantPoolSDNode *CP = 
dyn_cast(Op.getOperand(1)))
-  if (ConstantFP *CFP = dyn_cast(CP->get()))
+  if (ConstantFP *CFP = dyn_cast(CP->getConstVal()))
 return CFP->isExactlyValue(-0.0) || CFP->isExactlyValue(0.0);
   }
   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/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-27 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.52 -> 1.53
---
Log message:

Do not use getTargetNode() and SelectNodeTo() which takes more than 3
SDOperand arguments. Use the variants which take an array and number instead.


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

 IA64ISelDAGToDAG.cpp |   42 +++---
 1 files changed, 27 insertions(+), 15 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.52 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.53
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.52  Sat Aug 26 02:57:56 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Aug 27 03:12:51 2006
@@ -204,18 +204,22 @@
 }
 
 SDOperand TmpE0, TmpY1, TmpE1, TmpY2;
-
+
+SDOperand OpsE0[] = { TmpF4, TmpF5, F1, TmpPR };
 TmpE0 = SDOperand(CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
-TmpF4, TmpF5, F1, TmpPR), 0);
+OpsE0, 4), 0);
 Chain = TmpE0.getValue(1);
+SDOperand OpsY1[] = { TmpF5, TmpE0, TmpF5, TmpPR };
 TmpY1 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-TmpF5, TmpE0, TmpF5, TmpPR), 0);
+OpsY1, 4), 0);
 Chain = TmpY1.getValue(1);
+SDOperand OpsE1[] = { TmpE0, TmpE0, F0, TmpPR };
 TmpE1 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-TmpE0, TmpE0, F0, TmpPR), 0);
+OpsE1, 4), 0);
 Chain = TmpE1.getValue(1);
+SDOperand OpsY2[] = { TmpY1, TmpE1, TmpY1, TmpPR };
 TmpY2 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-TmpY1, TmpE1, TmpY1, TmpPR), 0);
+OpsY2, 4), 0);
 Chain = TmpY2.getValue(1);
 
 if(isFP) { // if this is an FP divide, we finish up here and exit early
@@ -223,45 +227,53 @@
 assert(0 && "Sorry, try another FORTRAN compiler.");
  
   SDOperand TmpE2, TmpY3, TmpQ0, TmpR0;
-  
+
+  SDOperand OpsE2[] = { TmpE1, TmpE1, F0, TmpPR };
   TmpE2 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpE1, TmpE1, F0, TmpPR), 0);
+  OpsE2, 4), 0);
   Chain = TmpE2.getValue(1);
+  SDOperand OpsY3[] = { TmpY2, TmpE2, TmpY2, TmpPR };
   TmpY3 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpY2, TmpE2, TmpY2, TmpPR), 0);
+  OpsY3, 4), 0);
   Chain = TmpY3.getValue(1);
+  SDOperand OpsQ0[] = { Tmp1, TmpY3, F0, TmpPR };
   TmpQ0 =
 SDOperand(CurDAG->getTargetNode(IA64::CFMADS1, MVT::f64, // double 
prec!
-Tmp1, TmpY3, F0, TmpPR), 0);
+OpsQ0, 4), 0);
   Chain = TmpQ0.getValue(1);
+  SDOperand OpsR0[] = { Tmp2, TmpQ0, Tmp1, TmpPR };
   TmpR0 =
 SDOperand(CurDAG->getTargetNode(IA64::CFNMADS1, MVT::f64, // double 
prec!
-Tmp2, TmpQ0, Tmp1, TmpPR), 0);
+OpsR0, 4), 0);
   Chain = TmpR0.getValue(1);
 
 // we want Result to have the same target register as the frcpa, so
 // we two-address hack it. See the comment "for this to work..." on
 // page 48 of Intel application note #245415
+  SDOperand Ops[] = { TmpF5, TmpY3, TmpR0, TmpQ0, TmpPR };
   Result = CurDAG->getTargetNode(IA64::TCFMADS0, MVT::f64, // d.p. s0 rndg!
- TmpF5, TmpY3, TmpR0, TmpQ0, TmpPR);
+ Ops, 5);
   Chain = SDOperand(Result, 1);
   return Result; // XXX: early exit!
 } else { // this is *not* an FP divide, so there's a bit left to do:
 
   SDOperand TmpQ2, TmpR2, TmpQ3, TmpQ;
-  
+
+  SDOperand OpsQ2[] = { TmpF3, TmpY2, F0, TmpPR };
   TmpQ2 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF3, TmpY2, F0, TmpPR), 0);
+  OpsQ2, 4), 0);
   Chain = TmpQ2.getValue(1);
+  SDOperand OpsR2[] = { TmpF4, TmpQ2, TmpF3, TmpPR };
   TmpR2 = SDOperand(CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
-  TmpF4, TmpQ2, TmpF3, TmpPR), 0);
+  OpsR2, 4), 0);
   Chain = TmpR2.getValue(1);
   
 // we want TmpQ3 to have the same target register as the frcpa? maybe we
 // should two-address hack it. See the comment "for this to work..." on page
 // 48 of Intel application note #245415
+  SDOperand OpsQ3[] = { TmpF5, TmpR2, TmpY2, TmpQ2, TmpPR };
   TmpQ3

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-26 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.51 -> 1.52
---
Log message:

SelectNodeTo now returns a SDNode*.

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

 IA64ISelDAGToDAG.cpp |   20 ++--
 1 files changed, 10 insertions(+), 10 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.51 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.52
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.51  Sat Aug 26 00:33:15 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Aug 26 02:57:56 2006
@@ -408,10 +408,10 @@
 int FI = cast(N)->getIndex();
 if (N->hasOneUse())
   return CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
- CurDAG->getTargetFrameIndex(FI, 
MVT::i64)).Val;
+ CurDAG->getTargetFrameIndex(FI, MVT::i64));
 else
-  return SDOperand(CurDAG->getTargetNode(IA64::MOV, MVT::i64,
- CurDAG->getTargetFrameIndex(FI, MVT::i64)), 
0).Val;
+  return CurDAG->getTargetNode(IA64::MOV, MVT::i64,
+   CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
 
   case ISD::ConstantPool: { // TODO: nuke the constant pool
@@ -464,7 +464,7 @@
 return CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
 SDOperand(CurDAG->getTargetNode(Opc, MVT::i64, Address), 
0),
 CurDAG->getRegister(IA64::r0, MVT::i64), 
-Chain).getValue(Op.ResNo).Val;
+Chain);
   }
   /* otherwise, we want to load a bool into something bigger: LD1
  will do that for us, so we just fall through */
@@ -480,7 +480,7 @@
 
 // TODO: comment this
 return CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
-Address, Chain).getValue(Op.ResNo).Val;
+Address, Chain);
   }
   
   case ISD::TRUNCSTORE:
@@ -505,7 +505,7 @@
 Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
   CurDAG->getConstant(1, MVT::i64),
   Tmp), 0);
-return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, 
Chain).Val;
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
   }
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
@@ -524,7 +524,7 @@
 SDOperand N2 = N->getOperand(2);
 AddToISelQueue(N1);
 AddToISelQueue(N2);
-return CurDAG->SelectNodeTo(N, Opc, MVT::Other, N2, N1, Chain).Val;
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, N2, N1, Chain);
   }
 
   case ISD::BRCOND: {
@@ -536,7 +536,7 @@
   cast(N->getOperand(2))->getBasicBlock();
 //FIXME - we do NOT need long branches all the time
 return CurDAG->SelectNodeTo(N, IA64::BRLCOND_NOTCALL, MVT::Other, CC, 
-CurDAG->getBasicBlock(Dest), Chain).Val;
+CurDAG->getBasicBlock(Dest), Chain);
   }
 
   case ISD::CALLSEQ_START:
@@ -546,7 +546,7 @@
IA64::ADJUSTCALLSTACKDOWN : IA64::ADJUSTCALLSTACKUP;
 SDOperand N0 = N->getOperand(0);
 AddToISelQueue(N0);
-return CurDAG->SelectNodeTo(N, Opc, MVT::Other, getI64Imm(Amt), N0).Val;
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, getI64Imm(Amt), N0);
   }
 
   case ISD::BR:
@@ -554,7 +554,7 @@
 SDOperand N0 = N->getOperand(0);
 AddToISelQueue(N0);
 return CurDAG->SelectNodeTo(N, IA64::BRL_NOTCALL, MVT::Other, 
-N->getOperand(1), N0).Val;
+N->getOperand(1), N0);
   }
   
   return SelectCode(Op);



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-25 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.50 -> 1.51
---
Log message:

Select() no longer require Result operand by reference.

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

 IA64ISelDAGToDAG.cpp |   33 +
 1 files changed, 13 insertions(+), 20 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.50 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.51
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.50  Fri Aug 25 20:07:16 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Aug 26 00:33:15 2006
@@ -65,7 +65,7 @@
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-SDNode *Select(SDOperand &Result, SDOperand N);
+SDNode *Select(SDOperand N);
 
 SDNode *SelectIntImmediateExpr(SDOperand LHS, SDOperand RHS,
unsigned OCHi, unsigned OCLo,
@@ -94,7 +94,7 @@
 #include "IA64GenDAGISel.inc"
 
 private:
-SDOperand SelectDIV(SDOperand Op);
+SDNode *SelectDIV(SDOperand Op);
   };
 }
 
@@ -111,7 +111,7 @@
   ScheduleAndEmitDAG(DAG);
 }
 
-SDOperand IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
+SDNode *IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
   SDNode *N = Op.Val;
   SDOperand Chain = N->getOperand(0);
   SDOperand Tmp1 = N->getOperand(0);
@@ -245,7 +245,7 @@
   Result = CurDAG->getTargetNode(IA64::TCFMADS0, MVT::f64, // d.p. s0 rndg!
  TmpF5, TmpY3, TmpR0, TmpQ0, TmpPR);
   Chain = SDOperand(Result, 1);
-  return SDOperand(Result, 0); // XXX: early exit!
+  return Result; // XXX: early exit!
 } else { // this is *not* an FP divide, so there's a bit left to do:
 
   SDOperand TmpQ2, TmpR2, TmpQ3, TmpQ;
@@ -292,19 +292,17 @@
 Chain = SDOperand(Result, 1);
   }
 
-  return SDOperand(Result, 0);
+  return Result;
 } // wasn't an FP divide
 }
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-SDNode *IA64DAGToDAGISel::Select(SDOperand &Result, SDOperand Op) {
+SDNode *IA64DAGToDAGISel::Select(SDOperand Op) {
   SDNode *N = Op.Val;
   if (N->getOpcode() >= ISD::BUILTIN_OP_END &&
-  N->getOpcode() < IA64ISD::FIRST_NUMBER) {
-Result = Op;
+  N->getOpcode() < IA64ISD::FIRST_NUMBER)
 return NULL;   // Already selected.
-  }
 
   switch (N->getOpcode()) {
   default: break;
@@ -379,15 +377,13 @@
 
for (unsigned i = 0, e = CallResults.size(); i != e; ++i)
  ReplaceUses(Op.getValue(i), CallResults[i]);
-   Result = CallResults[Op.ResNo];
return NULL;
   }
   
   case IA64ISD::GETFD: {
 SDOperand Input = N->getOperand(0);
 AddToISelQueue(Input);
-Result = SDOperand(CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input), 0);
-return Result.Val;
+return CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input);
   } 
   
   case ISD::FDIV:
@@ -395,8 +391,7 @@
   case ISD::UDIV:
   case ISD::SREM:
   case ISD::UREM:
-Result = SelectDIV(Op);
-return Result.Val;
+return SelectDIV(Op);
  
   case ISD::TargetConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
@@ -425,9 +420,8 @@
 Constant *C = CP->get();
 SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64,
   CP->getAlignment());
-Result = SDOperand(CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?
- CurDAG->getRegister(IA64::r1, MVT::i64), CPI), 0);
-return Result.Val;
+return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?
+ CurDAG->getRegister(IA64::r1, MVT::i64), CPI);
   }
 
   case ISD::GlobalAddress: {
@@ -435,8 +429,7 @@
 SDOperand GA = CurDAG->getTargetGlobalAddress(GV, MVT::i64);
 SDOperand Tmp = SDOperand(CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, 
  CurDAG->getRegister(IA64::r1, MVT::i64), GA), 
0);
-Result = SDOperand(CurDAG->getTargetNode(IA64::LD8, MVT::i64, Tmp), 0);
-return Result.Val;
+return CurDAG->getTargetNode(IA64::LD8, MVT::i64, Tmp);
   }
   
 /* XXX  case ISD::ExternalSymbol: {
@@ -564,7 +557,7 @@
 N->getOperand(1), N0).Val;
   }
   
-  return SelectCode(Result, Op);
+  return SelectCode(Op);
 }
 
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-25 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.49 -> 1.50
---
Log message:

Match tblgen changes.

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

 IA64ISelDAGToDAG.cpp |   68 ---
 1 files changed, 38 insertions(+), 30 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.49 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.50
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.49  Wed Aug 16 02:29:13 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Aug 25 20:07:16 2006
@@ -113,11 +113,13 @@
 
 SDOperand IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
   SDNode *N = Op.Val;
-  SDOperand Chain, Tmp1, Tmp2;
-  AddToQueue(Chain, N->getOperand(0));
+  SDOperand Chain = N->getOperand(0);
+  SDOperand Tmp1 = N->getOperand(0);
+  SDOperand Tmp2 = N->getOperand(1);
+  AddToISelQueue(Chain);
 
-  AddToQueue(Tmp1, N->getOperand(0));
-  AddToQueue(Tmp2, N->getOperand(1));
+  AddToISelQueue(Tmp1);
+  AddToISelQueue(Tmp2);
 
   bool isFP=false;
 
@@ -308,12 +310,14 @@
   default: break;
 
   case IA64ISD::BRCALL: { // XXX: this is also a hack!
-SDOperand Chain;
+SDOperand Chain = N->getOperand(0);
 SDOperand InFlag;  // Null incoming flag value.
 
-AddToQueue(Chain, N->getOperand(0));
-if(N->getNumOperands()==3) // we have an incoming chain, callee and flag
-  AddToQueue(InFlag, N->getOperand(2));
+AddToISelQueue(Chain);
+if(N->getNumOperands()==3) { // we have an incoming chain, callee and flag
+  InFlag = N->getOperand(2);
+  AddToISelQueue(InFlag);
+}
 
 unsigned CallOpcode;
 SDOperand CallOperand;
@@ -334,8 +338,8 @@
 // otherwise we need to load the function descriptor,
 // load the branch target (function)'s entry point and GP,
 // branch (call) then restore the GP
-SDOperand FnDescriptor;
-AddToQueue(FnDescriptor, N->getOperand(1));
+SDOperand FnDescriptor = N->getOperand(1);
+AddToISelQueue(FnDescriptor);

 // load the branch target's entry point [mem] and 
 // GP value [mem+8]
@@ -380,8 +384,8 @@
   }
   
   case IA64ISD::GETFD: {
-SDOperand Input;
-AddToQueue(Input, N->getOperand(0));
+SDOperand Input = N->getOperand(0);
+AddToISelQueue(Input);
 Result = SDOperand(CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input), 0);
 return Result.Val;
   } 
@@ -447,9 +451,10 @@
   case ISD::LOAD:
   case ISD::EXTLOAD: // FIXME: load -1, not 1, for bools?
   case ISD::ZEXTLOAD: {
-SDOperand Chain, Address;
-AddToQueue(Chain, N->getOperand(0));
-AddToQueue(Address, N->getOperand(1));
+SDOperand Chain = N->getOperand(0);
+SDOperand Address = N->getOperand(1);
+AddToISelQueue(Chain);
+AddToISelQueue(Address);
 
 MVT::ValueType TypeBeingLoaded = (N->getOpcode() == ISD::LOAD) ?
   N->getValueType(0) : cast(N->getOperand(3))->getVT();
@@ -487,9 +492,10 @@
   
   case ISD::TRUNCSTORE:
   case ISD::STORE: {
-SDOperand Address, Chain;
-AddToQueue(Address, N->getOperand(2));
-AddToQueue(Chain, N->getOperand(0));
+SDOperand Address = N->getOperand(2);
+SDOperand Chain = N->getOperand(0);
+AddToISelQueue(Address);
+AddToISelQueue(Chain);

 unsigned Opc;
 if (N->getOpcode() == ISD::STORE) {
@@ -501,8 +507,8 @@
SDOperand Initial = CurDAG->getCopyFromReg(Chain, IA64::r0, MVT::i64);
Chain = Initial.getValue(1);
// then load 1 into the same reg iff the predicate to store is 1
-SDOperand Tmp;
-AddToQueue(Tmp, N->getOperand(1));
+SDOperand Tmp = N->getOperand(1);
+AddToISelQueue(Tmp);
 Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
   CurDAG->getConstant(1, MVT::i64),
   Tmp), 0);
@@ -521,16 +527,18 @@
   }
 }
 
-SDOperand N1, N2;
-AddToQueue(N1, N->getOperand(1));
-AddToQueue(N2, N->getOperand(2));
+SDOperand N1 = N->getOperand(1);
+SDOperand N2 = N->getOperand(2);
+AddToISelQueue(N1);
+AddToISelQueue(N2);
 return CurDAG->SelectNodeTo(N, Opc, MVT::Other, N2, N1, Chain).Val;
   }
 
   case ISD::BRCOND: {
-SDOperand Chain, CC;
-AddToQueue(Chain, N->getOperand(0));
-AddToQueue(CC, N->getOperand(1));
+SDOperand Chain = N->getOperand(0);
+SDOperand CC = N->getOperand(1);
+AddToISelQueue(Chain);
+AddToISelQueue(CC);
 MachineBasicBlock *Dest =
   cast(N->getOperand(2))->getBasicBlock();
 //FIXME - we do NOT need long branches all the time
@@ -543,15 +551,15 @@
 int64_t Amt = cast(N->getOperand(1))->getValue();
 unsigned Opc = N->getOpcode() == ISD::CALLSEQ_START ?
IA64::ADJUSTCALLSTACKDOWN : IA64::ADJUSTCALLSTACKUP;
-SDOperand N0;
-AddToQueue(N0, N->getOperand(0));
+SDOperand N0 = N->getOperand(0);
+AddToISelQueue(N0);
 ret

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-16 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.48 -> 1.49
---
Log message:

SelectNodeTo() may return a SDOperand that is different from the input.

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

 IA64ISelDAGToDAG.cpp |   51 ---
 1 files changed, 20 insertions(+), 31 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.48 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.49
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.48  Fri Aug 11 04:07:25 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Aug 16 02:29:13 2006
@@ -398,25 +398,21 @@
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 
 if (cast(N)->isExactlyValue(+0.0)) {
-  Result = CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64);
+  return CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64).Val;
 } else if (cast(N)->isExactlyValue(+1.0)) {
-  Result = CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
+  return CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64).Val;
 } else
   assert(0 && "Unexpected FP constant!");
-return Result.Val;
   }
 
   case ISD::FrameIndex: { // TODO: reduce creepyness
 int FI = cast(N)->getIndex();
-if (N->hasOneUse()) {
-  Result = CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
-  CurDAG->getTargetFrameIndex(FI, MVT::i64));
-  return NULL;
-} else {
-  Result = SDOperand(CurDAG->getTargetNode(IA64::MOV, MVT::i64,
-CurDAG->getTargetFrameIndex(FI, MVT::i64)), 0);
-  return Result.Val;
-}
+if (N->hasOneUse())
+  return CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
+ CurDAG->getTargetFrameIndex(FI, 
MVT::i64)).Val;
+else
+  return SDOperand(CurDAG->getTargetNode(IA64::MOV, MVT::i64,
+ CurDAG->getTargetFrameIndex(FI, MVT::i64)), 
0).Val;
   }
 
   case ISD::ConstantPool: { // TODO: nuke the constant pool
@@ -467,11 +463,10 @@
 case MVT::i1: { // this is a bool
   Opc = IA64::LD1; // first we load a byte, then compare for != 0
   if(N->getValueType(0) == MVT::i1) { // XXX: early exit!
-Result = CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
+return CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
 SDOperand(CurDAG->getTargetNode(Opc, MVT::i64, Address), 
0),
-  CurDAG->getRegister(IA64::r0, MVT::i64), 
-  Chain).getValue(Op.ResNo);
-return NULL;
+CurDAG->getRegister(IA64::r0, MVT::i64), 
+Chain).getValue(Op.ResNo).Val;
   }
   /* otherwise, we want to load a bool into something bigger: LD1
  will do that for us, so we just fall through */
@@ -486,9 +481,8 @@
 }
 
 // TODO: comment this
-Result = CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
-Address, Chain).getValue(Op.ResNo);
-return NULL;
+return CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
+Address, Chain).getValue(Op.ResNo).Val;
   }
   
   case ISD::TRUNCSTORE:
@@ -512,8 +506,7 @@
 Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
   CurDAG->getConstant(1, MVT::i64),
   Tmp), 0);
-Result = CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
-return NULL;
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, 
Chain).Val;
   }
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
@@ -531,8 +524,7 @@
 SDOperand N1, N2;
 AddToQueue(N1, N->getOperand(1));
 AddToQueue(N2, N->getOperand(2));
-Result = CurDAG->SelectNodeTo(N, Opc, MVT::Other, N2, N1, Chain);
-return NULL;
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, N2, N1, Chain).Val;
   }
 
   case ISD::BRCOND: {
@@ -542,9 +534,8 @@
 MachineBasicBlock *Dest =
   cast(N->getOperand(2))->getBasicBlock();
 //FIXME - we do NOT need long branches all the time
-Result = CurDAG->SelectNodeTo(N, IA64::BRLCOND_NOTCALL, MVT::Other, CC, 
-CurDAG->getBasicBlock(Dest), Chain);
-return NULL;
+return CurDAG->SelectNodeTo(N, IA64::BRLCOND_NOTCALL, MVT::Other, CC, 
+CurDAG->getBasicBlock(Dest), Chain).Val;
   }
 
   case ISD::CALLSEQ_START:
@@ -554,17 +545,15 @@
IA64::ADJUSTCALLSTACKDOWN : IA64::ADJUSTCALLSTACKUP;
 SDOperand N0;
 AddToQueue(N0, N->getOperand(0));
-Result = CurDAG->SelectNodeTo(N, Opc, MVT::Other, getI64Imm(Amt), N0);
-return NULL;
+return CurDAG->SelectNodeTo(N, Opc, MVT::

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.47 -> 1.48
---
Log message:

Match tablegen changes.

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

 IA64ISelDAGToDAG.cpp |   46 +-
 1 files changed, 21 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.47 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.48
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.47  Mon Aug  7 17:23:40 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Aug 11 04:07:25 2006
@@ -65,7 +65,7 @@
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-void Select(SDOperand &Result, SDOperand N);
+SDNode *Select(SDOperand &Result, SDOperand N);
 
 SDNode *SelectIntImmediateExpr(SDOperand LHS, SDOperand RHS,
unsigned OCHi, unsigned OCLo,
@@ -296,12 +296,12 @@
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-void IA64DAGToDAGISel::Select(SDOperand &Result, SDOperand Op) {
+SDNode *IA64DAGToDAGISel::Select(SDOperand &Result, SDOperand Op) {
   SDNode *N = Op.Val;
   if (N->getOpcode() >= ISD::BUILTIN_OP_END &&
   N->getOpcode() < IA64ISD::FIRST_NUMBER) {
 Result = Op;
-return;   // Already selected.
+return NULL;   // Already selected.
   }
 
   switch (N->getOpcode()) {
@@ -376,15 +376,14 @@
for (unsigned i = 0, e = CallResults.size(); i != e; ++i)
  ReplaceUses(Op.getValue(i), CallResults[i]);
Result = CallResults[Op.ResNo];
-   return;
+   return NULL;
   }
   
   case IA64ISD::GETFD: {
 SDOperand Input;
 AddToQueue(Input, N->getOperand(0));
 Result = SDOperand(CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input), 0);
-ReplaceUses(Op, Result);
-return;
+return Result.Val;
   } 
   
   case ISD::FDIV:
@@ -393,8 +392,7 @@
   case ISD::SREM:
   case ISD::UREM:
 Result = SelectDIV(Op);
-ReplaceUses(Op, Result);
-return;
+return Result.Val;
  
   case ISD::TargetConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
@@ -405,20 +403,20 @@
   Result = CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
 } else
   assert(0 && "Unexpected FP constant!");
-return;
+return Result.Val;
   }
 
   case ISD::FrameIndex: { // TODO: reduce creepyness
 int FI = cast(N)->getIndex();
-if (N->hasOneUse())
+if (N->hasOneUse()) {
   Result = CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
   CurDAG->getTargetFrameIndex(FI, MVT::i64));
-else {
+  return NULL;
+} else {
   Result = SDOperand(CurDAG->getTargetNode(IA64::MOV, MVT::i64,
 CurDAG->getTargetFrameIndex(FI, MVT::i64)), 0);
-  ReplaceUses(Op, Result);
+  return Result.Val;
 }
-return;
   }
 
   case ISD::ConstantPool: { // TODO: nuke the constant pool
@@ -429,8 +427,7 @@
   CP->getAlignment());
 Result = SDOperand(CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?
  CurDAG->getRegister(IA64::r1, MVT::i64), CPI), 0);
-ReplaceUses(Op, Result);
-return;
+return Result.Val;
   }
 
   case ISD::GlobalAddress: {
@@ -439,8 +436,7 @@
 SDOperand Tmp = SDOperand(CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, 
  CurDAG->getRegister(IA64::r1, MVT::i64), GA), 
0);
 Result = SDOperand(CurDAG->getTargetNode(IA64::LD8, MVT::i64, Tmp), 0);
-ReplaceUses(Op, Result);
-return;
+return Result.Val;
   }
   
 /* XXX  case ISD::ExternalSymbol: {
@@ -475,7 +471,7 @@
 SDOperand(CurDAG->getTargetNode(Opc, MVT::i64, Address), 
0),
   CurDAG->getRegister(IA64::r0, MVT::i64), 
   Chain).getValue(Op.ResNo);
-return;
+return NULL;
   }
   /* otherwise, we want to load a bool into something bigger: LD1
  will do that for us, so we just fall through */
@@ -492,7 +488,7 @@
 // TODO: comment this
 Result = CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
 Address, Chain).getValue(Op.ResNo);
-return;
+return NULL;
   }
   
   case ISD::TRUNCSTORE:
@@ -517,7 +513,7 @@
   CurDAG->getConstant(1, MVT::i64),
   Tmp), 0);
 Result = CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
-return;
+return NULL;
   }
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
@@ -536,7 +532,7 @@
 AddToQueue(N1, N->getOperand(1));
 AddToQueue(N2, N->getOperand(2));
 

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-08-07 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.46 -> 1.47
---
Log message:

Match tablegen isel changes.

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

 IA64ISelDAGToDAG.cpp |   98 ++-
 1 files changed, 28 insertions(+), 70 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.46 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.47
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.46  Thu Jul 27 19:46:44 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Aug  7 17:23:40 2006
@@ -28,6 +28,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include 
+#include 
 #include 
 using namespace llvm;
 
@@ -101,50 +102,9 @@
 /// SelectionDAGISel when it has created a SelectionDAG for us to codegen.
 void IA64DAGToDAGISel::InstructionSelectBasicBlock(SelectionDAG &DAG) {
   DEBUG(BB->dump());
-  
-  // The selection process is inherently a bottom-up recursive process (users
-  // select their uses before themselves).  Given infinite stack space, we
-  // could just start selecting on the root and traverse the whole graph.  In
-  // practice however, this causes us to run out of stack space on large basic
-  // blocks.  To avoid this problem, select the entry node, then all its uses,
-  // iteratively instead of recursively.
-  std::vector Worklist;
-  Worklist.push_back(DAG.getEntryNode());
-  
-  // Note that we can do this in the IA64 target (scanning forward across token
-  // chain edges) because no nodes ever get folded across these edges.  On a
-  // target like X86 which supports load/modify/store operations, this would
-  // have to be more careful.
-  while (!Worklist.empty()) {
-SDOperand Node = Worklist.back();
-Worklist.pop_back();
-
-if ((Node.Val->getOpcode() >= ISD::BUILTIN_OP_END &&
- Node.Val->getOpcode() < IA64ISD::FIRST_NUMBER) ||
-CodeGenMap.count(Node)) continue;
-
-for (SDNode::use_iterator UI = Node.Val->use_begin(),
- E = Node.Val->use_end(); UI != E; ++UI) {
-  // Scan the values.  If this use has a value that is a token chain, add 
it
-  // to the worklist.
-  SDNode *User = *UI;
-  for (unsigned i = 0, e = User->getNumValues(); i != e; ++i)
-if (User->getValueType(i) == MVT::Other) {
-  Worklist.push_back(SDOperand(User, i));
-  break; 
-}
-}
 
-// Finally, legalize this node.
-SDOperand Dummy;
-Select(Dummy, Node);
-  }
-
   // Select target instructions for the DAG.
   DAG.setRoot(SelectRoot(DAG.getRoot()));
-  CodeGenMap.clear();
-  HandleMap.clear();
-  ReplaceMap.clear();
   DAG.RemoveDeadNodes();
   
   // Emit machine code to BB. 
@@ -154,10 +114,10 @@
 SDOperand IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
   SDNode *N = Op.Val;
   SDOperand Chain, Tmp1, Tmp2;
-  Select(Chain, N->getOperand(0));
+  AddToQueue(Chain, N->getOperand(0));
 
-  Select(Tmp1, N->getOperand(0));
-  Select(Tmp2, N->getOperand(1));
+  AddToQueue(Tmp1, N->getOperand(0));
+  AddToQueue(Tmp2, N->getOperand(1));
 
   bool isFP=false;
 
@@ -344,13 +304,6 @@
 return;   // Already selected.
   }
 
-  // If this has already been converted, use it.
-  std::map::iterator CGMI = CodeGenMap.find(Op);
-  if (CGMI != CodeGenMap.end()) {
-Result = CGMI->second;
-return;
-  }
-  
   switch (N->getOpcode()) {
   default: break;
 
@@ -358,9 +311,9 @@
 SDOperand Chain;
 SDOperand InFlag;  // Null incoming flag value.
 
-Select(Chain, N->getOperand(0));
+AddToQueue(Chain, N->getOperand(0));
 if(N->getNumOperands()==3) // we have an incoming chain, callee and flag
-  Select(InFlag, N->getOperand(2));
+  AddToQueue(InFlag, N->getOperand(2));
 
 unsigned CallOpcode;
 SDOperand CallOperand;
@@ -382,7 +335,7 @@
 // load the branch target (function)'s entry point and GP,
 // branch (call) then restore the GP
 SDOperand FnDescriptor;
-Select(FnDescriptor, N->getOperand(1));
+AddToQueue(FnDescriptor, N->getOperand(1));

 // load the branch target's entry point [mem] and 
 // GP value [mem+8]
@@ -421,16 +374,16 @@
CallResults.push_back(InFlag);
 
for (unsigned i = 0, e = CallResults.size(); i != e; ++i)
- CodeGenMap[Op.getValue(i)] = CallResults[i];
+ ReplaceUses(Op.getValue(i), CallResults[i]);
Result = CallResults[Op.ResNo];
return;
   }
   
   case IA64ISD::GETFD: {
 SDOperand Input;
-Select(Input, N->getOperand(0));
+AddToQueue(Input, N->getOperand(0));
 Result = SDOperand(CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input), 0);
-CodeGenMap[Op] = Result;
+ReplaceUses(Op, Result);
 return;
   } 
   
@@ -440,6 +393,7 @@
   case ISD::SREM:
   case ISD::UREM:
 Result = SelectDIV(Op);
+ReplaceUses(Op, Result);
 return;
  
   case ISD::TargetConstantFP: {
@@ -459,9 +413,11 @@
 if (N->hasOneUse())
   Result = CurDAG->Select

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-07-27 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.45 -> 1.46
---
Log message:

Remove InFlightSet hack. No longer needed.

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

 IA64ISelDAGToDAG.cpp |1 -
 1 files changed, 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.45 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.46
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.45  Thu Jul 27 01:39:46 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Jul 27 19:46:44 2006
@@ -142,7 +142,6 @@
 
   // Select target instructions for the DAG.
   DAG.setRoot(SelectRoot(DAG.getRoot()));
-  assert(InFlightSet.empty() && "ISel InFlightSet has not been emptied!");
   CodeGenMap.clear();
   HandleMap.clear();
   ReplaceMap.clear();



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-07-26 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.44 -> 1.45
---
Log message:

Remove NodeDepth

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

 IA64ISelDAGToDAG.cpp |7 +--
 1 files changed, 1 insertion(+), 6 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.44 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.45
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.44  Tue Jul 11 13:25:13 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Jul 27 01:39:46 2006
@@ -118,12 +118,7 @@
   while (!Worklist.empty()) {
 SDOperand Node = Worklist.back();
 Worklist.pop_back();
-
-// Chose from the least deep of the top two nodes.
-if (!Worklist.empty() &&
-Worklist.back().Val->getNodeDepth() < Node.Val->getNodeDepth())
-  std::swap(Worklist.back(), Node);
-
+
 if ((Node.Val->getOpcode() >= ISD::BUILTIN_OP_END &&
  Node.Val->getOpcode() < IA64ISD::FIRST_NUMBER) ||
 CodeGenMap.count(Node)) continue;



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-07-11 Thread Jim Laskey


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.43 -> 1.44
---
Log message:

It was pointed out that DEBUG() is only available with -debug.


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

 IA64ISelDAGToDAG.cpp |6 +-
 1 files changed, 5 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.43 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.44
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.43  Tue Jul 11 12:58:07 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Jul 11 13:25:13 2006
@@ -511,7 +511,11 @@
   N->getValueType(0) : cast(N->getOperand(3))->getVT();
 unsigned Opc;
 switch (TypeBeingLoaded) {
-default: DEBUG(N->dump()); assert(0 && "Cannot load this type!");
+default:
+#ifndef NDEBUG
+  N->dump();
+#endif
+  assert(0 && "Cannot load this type!");
 case MVT::i1: { // this is a bool
   Opc = IA64::LD1; // first we load a byte, then compare for != 0
   if(N->getValueType(0) == MVT::i1) { // XXX: early exit!



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-07-11 Thread Jim Laskey


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.42 -> 1.43
---
Log message:

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


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.42 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.43
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.42  Wed May 24 19:24:28 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Jul 11 12:58:07 2006
@@ -511,7 +511,7 @@
   N->getValueType(0) : cast(N->getOperand(3))->getVT();
 unsigned Opc;
 switch (TypeBeingLoaded) {
-default: N->dump(); assert(0 && "Cannot load this type!");
+default: DEBUG(N->dump()); assert(0 && "Cannot load this type!");
 case MVT::i1: { // this is a bool
   Opc = IA64::LD1; // first we load a byte, then compare for != 0
   if(N->getValueType(0) == MVT::i1) { // XXX: early exit!



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-05-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.41 -> 1.42
---
Log message:

Assert if InflightSet is not cleared after instruction selecting a BB.


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.41 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.42
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.41  Wed May 24 15:46:25 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed May 24 19:24:28 2006
@@ -147,6 +147,7 @@
 
   // Select target instructions for the DAG.
   DAG.setRoot(SelectRoot(DAG.getRoot()));
+  assert(InFlightSet.empty() && "ISel InFlightSet has not been emptied!");
   CodeGenMap.clear();
   HandleMap.clear();
   ReplaceMap.clear();



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-05-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.40 -> 1.41
---
Log message:

Clear HandleMap and ReplaceMap after instruction selection. Or it may cause
non-deterministic behavior.


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

 IA64ISelDAGToDAG.cpp |2 ++
 1 files changed, 2 insertions(+)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.40 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.41
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.40  Tue May 16 12:42:15 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed May 24 15:46:25 2006
@@ -148,6 +148,8 @@
   // Select target instructions for the DAG.
   DAG.setRoot(SelectRoot(DAG.getRoot()));
   CodeGenMap.clear();
+  HandleMap.clear();
+  ReplaceMap.clear();
   DAG.RemoveDeadNodes();
   
   // Emit machine code to BB. 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-05-16 Thread Andrew Lenharth


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.39 -> 1.40
---
Log message:

Move this code to a common place

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

 IA64ISelDAGToDAG.cpp |3 ---
 1 files changed, 3 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.39 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.40
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.39  Sat Mar 25 00:47:10 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue May 16 12:42:15 2006
@@ -81,9 +81,6 @@
 /// operation.
 bool SelectAddr(SDOperand Addr, SDOperand &Op1, SDOperand &Op2);
 
-SDOperand BuildSDIVSequence(SDNode *N);
-SDOperand BuildUDIVSequence(SDNode *N);
-
 /// InstructionSelectBasicBlock - This callback is invoked by
 /// SelectionDAGISel when it has created a SelectionDAG for us to codegen.
 virtual void InstructionSelectBasicBlock(SelectionDAG &DAG);



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-03-24 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.38 -> 1.39
---
Log message:

#include Intrinsics.h into all dag isels


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.38 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.39
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.38  Mon Mar 13 17:20:37 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Mar 25 00:47:10 2006
@@ -24,6 +24,7 @@
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Constants.h"
 #include "llvm/GlobalValue.h"
+#include "llvm/Intrinsics.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-02-10 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.36 -> 1.37
---
Log message:


fix storing booleans (grawp missed this one)



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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.36 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.37
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.36  Thu Feb  9 01:17:49 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Feb 11 01:33:17 2006
@@ -556,9 +556,9 @@
// then load 1 into the same reg iff the predicate to store is 1
 SDOperand Tmp;
 Select(Tmp, N->getOperand(1));
-CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
-  CurDAG->getConstant(1, MVT::i64),
-  Tmp);
+Tmp = SDOperand(CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
+  CurDAG->getConstant(1, MVT::i64),
+  Tmp), 0);
 Result = CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
 return;
   }



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-02-08 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.35 -> 1.36
---
Log message:

Match getTargetNode() changes (now return SDNode* instead of SDOperand).


---
Diffs of the changes:  (+78 -64)

 IA64ISelDAGToDAG.cpp |  142 ---
 1 files changed, 78 insertions(+), 64 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.35 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.36
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.35  Wed Feb  8 18:37:58 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Feb  9 01:17:49 2006
@@ -186,7 +186,7 @@
 SDOperand TmpPR, TmpPR2;
 SDOperand TmpF1, TmpF2, TmpF3, TmpF4, TmpF5, TmpF6, TmpF7, TmpF8;
 SDOperand TmpF9, TmpF10,TmpF11,TmpF12,TmpF13,TmpF14,TmpF15;
-SDOperand Result;
+SDNode *Result;
 
 // we'll need copies of F0 and F1
 SDOperand F0 = CurDAG->getRegister(IA64::F0, MVT::f64);
@@ -196,21 +196,27 @@
 
 if(!isFP) {
   // first, load the inputs into FP regs.
-  TmpF1 = CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp1);
+  TmpF1 =
+SDOperand(CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp1), 0);
   Chain = TmpF1.getValue(1);
-  TmpF2 = CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp2);
+  TmpF2 =
+SDOperand(CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp2), 0);
   Chain = TmpF2.getValue(1);
   
   // next, convert the inputs to FP
   if(isSigned) {
-TmpF3 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF1);
+TmpF3 =
+  SDOperand(CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF1), 0);
 Chain = TmpF3.getValue(1);
-TmpF4 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF2);
+TmpF4 =
+  SDOperand(CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF2), 0);
 Chain = TmpF4.getValue(1);
   } else { // is unsigned
-TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
+TmpF3 =
+  SDOperand(CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1), 
0);
 Chain = TmpF3.getValue(1);
-TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
+TmpF4 =
+  SDOperand(CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2), 
0);
 Chain = TmpF4.getValue(1);
   }
 
@@ -223,11 +229,11 @@
 // we start by computing an approximate reciprocal (good to 9 bits?)
 // note, this instruction writes _both_ TmpF5 (answer) and TmpPR 
(predicate)
 if(isFP)
-  TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS0, MVT::f64, MVT::i1,
- TmpF3, TmpF4);
+  TmpF5 = SDOperand(CurDAG->getTargetNode(IA64::FRCPAS0, MVT::f64, MVT::i1,
+  TmpF3, TmpF4), 0);
 else
-  TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS1, MVT::f64, MVT::i1,
-  TmpF3, TmpF4);
+  TmpF5 = SDOperand(CurDAG->getTargetNode(IA64::FRCPAS1, MVT::f64, MVT::i1,
+  TmpF3, TmpF4), 0);
   
 TmpPR = TmpF5.getValue(1);
 Chain = TmpF5.getValue(2);
@@ -235,24 +241,24 @@
 SDOperand minusB;
 if(isModulus) { // for remainders, it'll be handy to have
  // copies of -input_b
-  minusB = CurDAG->getTargetNode(IA64::SUB, MVT::i64,
-  CurDAG->getRegister(IA64::r0, MVT::i64), Tmp2);
+  minusB = SDOperand(CurDAG->getTargetNode(IA64::SUB, MVT::i64,
+  CurDAG->getRegister(IA64::r0, MVT::i64), Tmp2), 0);
   Chain = minusB.getValue(1);
 }
 
 SDOperand TmpE0, TmpY1, TmpE1, TmpY2;
 
-TmpE0 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
-  TmpF4, TmpF5, F1, TmpPR);
+TmpE0 = SDOperand(CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
+TmpF4, TmpF5, F1, TmpPR), 0);
 Chain = TmpE0.getValue(1);
-TmpY1 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF5, TmpE0, TmpF5, TmpPR);
+TmpY1 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+TmpF5, TmpE0, TmpF5, TmpPR), 0);
 Chain = TmpY1.getValue(1);
-TmpE1 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpE0, TmpE0, F0, TmpPR);
+TmpE1 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+TmpE0, TmpE0, F0, TmpPR), 0);
 Chain = TmpE1.getValue(1);
-TmpY2 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpY1, TmpE1, TmpY1, TmpPR);
+TmpY2 = SDOperand(CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+TmpY1, TmpE1, TmpY1, TmpPR), 0);
 Chain = TmpY2.getValue(1);
 
 if(isFP) { // if this is an FP divide, we finish up here and exit early
@@ -261,42 +267,44 @@
  
   SDOperand TmpE2, TmpY3, Tmp

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-02-08 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.34 -> 1.35
---
Log message:

Change Select() from 
SDOperand Select(SDOperand N);
to
void Select(SDOperand &Result, SDOperand N);


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

 IA64ISelDAGToDAG.cpp |  130 ---
 1 files changed, 82 insertions(+), 48 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.34 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.35
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.34  Sun Feb  5 00:46:41 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Feb  8 18:37:58 2006
@@ -63,7 +63,7 @@
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-SDOperand Select(SDOperand Op);
+void Select(SDOperand &Result, SDOperand N);
 
 SDNode *SelectIntImmediateExpr(SDOperand LHS, SDOperand RHS,
unsigned OCHi, unsigned OCLo,
@@ -143,7 +143,8 @@
 }
 
 // Finally, legalize this node.
-Select(Node);
+SDOperand Dummy;
+Select(Dummy, Node);
   }
 
   // Select target instructions for the DAG.
@@ -157,10 +158,11 @@
 
 SDOperand IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
   SDNode *N = Op.Val;
-  SDOperand Chain = Select(N->getOperand(0));
+  SDOperand Chain, Tmp1, Tmp2;
+  Select(Chain, N->getOperand(0));
 
-  SDOperand Tmp1 = Select(N->getOperand(0));
-  SDOperand Tmp2 = Select(N->getOperand(1));
+  Select(Tmp1, N->getOperand(0));
+  Select(Tmp2, N->getOperand(1));
 
   bool isFP=false;
 
@@ -328,25 +330,31 @@
 
 // Select - Convert the specified operand from a target-independent to a
 // target-specific node if it hasn't already been changed.
-SDOperand IA64DAGToDAGISel::Select(SDOperand Op) {
+void IA64DAGToDAGISel::Select(SDOperand &Result, SDOperand Op) {
   SDNode *N = Op.Val;
   if (N->getOpcode() >= ISD::BUILTIN_OP_END &&
-  N->getOpcode() < IA64ISD::FIRST_NUMBER)
-return Op;   // Already selected.
+  N->getOpcode() < IA64ISD::FIRST_NUMBER) {
+Result = Op;
+return;   // Already selected.
+  }
 
   // If this has already been converted, use it.
   std::map::iterator CGMI = CodeGenMap.find(Op);
-  if (CGMI != CodeGenMap.end()) return CGMI->second;
+  if (CGMI != CodeGenMap.end()) {
+Result = CGMI->second;
+return;
+  }
   
   switch (N->getOpcode()) {
   default: break;
 
   case IA64ISD::BRCALL: { // XXX: this is also a hack!
-SDOperand Chain = Select(N->getOperand(0));
+SDOperand Chain;
 SDOperand InFlag;  // Null incoming flag value.
 
+Select(Chain, N->getOperand(0));
 if(N->getNumOperands()==3) // we have an incoming chain, callee and flag
-  InFlag = Select(N->getOperand(2));
+  Select(InFlag, N->getOperand(2));
 
 unsigned CallOpcode;
 SDOperand CallOperand;
@@ -367,7 +375,8 @@
 // otherwise we need to load the function descriptor,
 // load the branch target (function)'s entry point and GP,
 // branch (call) then restore the GP
-SDOperand FnDescriptor = Select(N->getOperand(1));
+SDOperand FnDescriptor;
+Select(FnDescriptor, N->getOperand(1));

 // load the branch target's entry point [mem] and 
 // GP value [mem+8]
@@ -404,41 +413,47 @@
 
for (unsigned i = 0, e = CallResults.size(); i != e; ++i)
  CodeGenMap[Op.getValue(i)] = CallResults[i];
-   return CallResults[Op.ResNo];
+   Result = CallResults[Op.ResNo];
+   return;
   }
   
   case IA64ISD::GETFD: {
-SDOperand Input = Select(N->getOperand(0));
-SDOperand Result = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input);
+SDOperand Input;
+Select(Input, N->getOperand(0));
+Result = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input);
 CodeGenMap[Op] = Result;
-return Result;
+return;
   } 
   
   case ISD::FDIV:
   case ISD::SDIV:
   case ISD::UDIV:
   case ISD::SREM:
-  case ISD::UREM: return SelectDIV(Op);
+  case ISD::UREM:
+Result = SelectDIV(Op);
+return;
  
   case ISD::TargetConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 
-if (cast(N)->isExactlyValue(+0.0))
-  return CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64);
-else if (cast(N)->isExactlyValue(+1.0))
-  return CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
-else
+if (cast(N)->isExactlyValue(+0.0)) {
+  Result = CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64);
+} else if (cast(N)->isExactlyValue(+1.0)) {
+  Result = CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
+} else
   assert(0 && "Unexpected FP constant!");
+return;
   }
 
   case ISD::FrameIndex: { // TODO: reduce creepyness
 int FI = cast(N)->getIndex();
 if (N->hasOneUse())
-  return CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
+  Result = CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-02-04 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.33 -> 1.34
---
Log message:

Use SelectRoot() as entry of any tblgen based isel.


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.33 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.34
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.33  Tue Jan 31 16:21:34 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Feb  5 00:46:41 2006
@@ -27,6 +27,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/MathExtras.h"
 #include 
+#include 
 using namespace llvm;
 
 namespace {
@@ -146,7 +147,7 @@
   }
 
   // Select target instructions for the DAG.
-  DAG.setRoot(Select(DAG.getRoot()));
+  DAG.setRoot(SelectRoot(DAG.getRoot()));
   CodeGenMap.clear();
   DAG.RemoveDeadNodes();
   



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-31 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.32 -> 1.33
---
Log message:

Allow the specification of explicit alignments for constant pool entries.


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.32 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.33
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.32  Sun Jan 29 00:26:07 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Jan 31 16:21:34 2006
@@ -442,8 +442,10 @@
 
   case ISD::ConstantPool: { // TODO: nuke the constant pool
//   (ia64 doesn't need one)
-Constant *C = cast(N)->get();
-SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64);
+ConstantPoolSDNode *CP = cast(N);
+Constant *C = CP->get();
+SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64,
+  CP->getAlignment());
 return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?
  CurDAG->getRegister(IA64::r1, MVT::i64), CPI);
   }



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-01-28 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.31 -> 1.32
IA64ISelLowering.cpp updated: 1.31 -> 1.32
---
Log message:

Targets all now request ConstantFP to be legalized into TargetConstantFP.
'fpimm' in .td files is now TargetConstantFP.



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

 IA64ISelDAGToDAG.cpp |2 +-
 IA64ISelLowering.cpp |1 +
 2 files changed, 2 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.31 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.32
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.31  Fri Jan 27 18:02:51 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Jan 29 00:26:07 2006
@@ -419,7 +419,7 @@
   case ISD::SREM:
   case ISD::UREM: return SelectDIV(Op);
  
-  case ISD::ConstantFP: {
+  case ISD::TargetConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 
 if (cast(N)->isExactlyValue(+0.0))


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.31 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.32
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.31  Fri Jan 27 21:14:31 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Sun Jan 29 00:26:07 2006
@@ -104,6 +104,7 @@
 
   computeRegisterProperties();
 
+  setOperationAction(ISD::ConstantFP, MVT::f64, Expand);
   addLegalFPImmediate(+0.0);
   addLegalFPImmediate(+1.0);
 }



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-01-27 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.30 -> 1.31
IA64ISelLowering.cpp updated: 1.29 -> 1.30
---
Log message:

Remove some dead code


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

 IA64ISelDAGToDAG.cpp |   30 --
 IA64ISelLowering.cpp |5 -
 2 files changed, 35 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.30 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.31
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.30  Sun Jan 22 17:37:17 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Jan 27 18:02:51 2006
@@ -413,36 +413,6 @@
 return Result;
   } 
   
-  case ISD::CALL:
-  case ISD::TAILCALL: { {
-// FIXME: This is a workaround for a bug in tblgen.
-// Pattern #47: (call:Flag (tglobaladdr:i32):$dst, ICC:Flag)
-// Emits: (CALL:void (tglobaladdr:i32):$dst)
-// Pattern complexity = 2  cost = 1
-SDOperand N1 = N->getOperand(1);
-if (N1.getOpcode() != ISD::TargetGlobalAddress &&
-N1.getOpcode() != ISD::ExternalSymbol) goto P47Fail;
-SDOperand InFlag = SDOperand(0, 0);
-SDOperand Chain = N->getOperand(0);
-SDOperand Tmp0 = N1;
-Chain = Select(Chain);
-SDOperand Result;
-if (N->getNumOperands() == 3) {
-  InFlag = Select(N->getOperand(2));
-  Result = CurDAG->getTargetNode(IA64::BRCALL, MVT::Other, MVT::Flag, 
Tmp0, 
- Chain, InFlag);
-} else {
-  Result = CurDAG->getTargetNode(IA64::BRCALL, MVT::Other, MVT::Flag, 
Tmp0, 
- Chain);
-}
-Chain = CodeGenMap[SDOperand(N, 0)] = Result.getValue(0);
-CodeGenMap[SDOperand(N, 1)] = Result.getValue(1);
-return Result.getValue(Op.ResNo);
-  }
-P47Fail:;
-
-  }
-
   case ISD::FDIV:
   case ISD::SDIV:
   case ISD::UDIV:


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.29 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.30
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.29  Fri Jan 27 15:09:22 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Fri Jan 27 18:02:51 2006
@@ -461,11 +461,6 @@
   else
 assert(0 && "this should never happen!\n");
 
-/* out with the old...
-Chain = SDOperand(DAG.getCall(NodeTys, Chain, Callee, InFlag), 0);
-  else
-Chain = SDOperand(DAG.getCall(NodeTys, Chain, Callee), 0);
-*/
   // to make way for a hack:
   Chain = DAG.getNode(IA64ISD::BRCALL, NodeTys, CallOperands);
   InFlag = Chain.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/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-21 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.28 -> 1.29
---
Log message:


insignificant, but next up is proper stack frame layout!



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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.28 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.29
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.28  Fri Jan 20 14:24:31 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Jan 21 08:27:19 2006
@@ -464,7 +464,8 @@
 if (N->hasOneUse())
   return CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
   CurDAG->getTargetFrameIndex(FI, MVT::i64));
-return CurDAG->getTargetNode(IA64::MOV, MVT::i64,
+else
+  return CodeGenMap[Op] = CurDAG->getTargetNode(IA64::MOV, MVT::i64,
 CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp IA64ISelLowering.h IA64InstrInfo.td

2006-01-20 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.27 -> 1.28
IA64ISelLowering.cpp updated: 1.24 -> 1.25
IA64ISelLowering.h updated: 1.4 -> 1.5
IA64InstrInfo.td updated: 1.41 -> 1.42
---
Log message:


remove RET hack, add proper support for rets (watching out for ret voids)



---
Diffs of the changes:  (+89 -56)

 IA64ISelDAGToDAG.cpp |   51 ---
 IA64ISelLowering.cpp |   66 +++
 IA64ISelLowering.h   |   16 ++--
 IA64InstrInfo.td |   12 ++---
 4 files changed, 89 insertions(+), 56 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.27 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.28
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.27  Fri Jan 20 10:10:05 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Jan 20 14:24:31 2006
@@ -585,57 +585,6 @@
 getI64Imm(Amt), Select(N->getOperand(0)));
   }
 
-  case ISD::RET: {
-SDOperand Chain = Select(N->getOperand(0)); // Token chain.
-SDOperand InFlag;
-
-switch (N->getNumOperands()) {
-default:
-  assert(0 && "Unknown return instruction!");
-case 2: {
-  SDOperand RetVal = Select(N->getOperand(1));
-  switch (RetVal.getValueType()) {
-  default: assert(0 && "I don't know how to return this type! (promote?)");
-   // FIXME: do I need to add support for bools here?
-   // (return '0' or '1' in r8, basically...)
-   //
-   // FIXME: need to round floats - 80 bits is bad, the tester
-   // told me so
-  case MVT::i64:
-// we mark r8 as live on exit up above in LowerArguments()
-// BuildMI(BB, IA64::MOV, 1, IA64::r8).addReg(Tmp1);
-Chain = CurDAG->getCopyToReg(Chain, IA64::r8, RetVal);
-   InFlag = Chain.getValue(1);
-   break;
-  case MVT::f64:
-// we mark F8 as live on exit up above in LowerArguments()
-// BuildMI(BB, IA64::FMOV, 1, IA64::F8).addReg(Tmp1);
-Chain = CurDAG->getCopyToReg(Chain, IA64::F8, RetVal);
-   InFlag = Chain.getValue(1);
-break;
-  }
-  break;
-  }
-case 1:
-  break;
-}
-
-// we need to copy VirtGPR (the vreg (to become a real reg)) that holds
-// the output of this function's alloc instruction back into ar.pfs
-// before we return. this copy must not float up above the last 
-// outgoing call in this function!!!
-SDOperand AR_PFSVal = CurDAG->getCopyFromReg(Chain, IA64Lowering.VirtGPR,
- MVT::i64);
-Chain = AR_PFSVal.getValue(1);
-Chain = CurDAG->getCopyToReg(Chain, IA64::AR_PFS, AR_PFSVal);
-
-// and then just emit a 'ret' instruction
-// before returning, restore the ar.pfs register (set by the 'alloc' up 
top)
-// BuildMI(BB, IA64::MOV, 
1).addReg(IA64::AR_PFS).addReg(IA64Lowering.VirtGPR);
-//
-return CurDAG->SelectNodeTo(N, IA64::RET, MVT::Other, Chain);
-  }
-  
   case ISD::BR:
 // FIXME: we don't need long branches all the time!
 return CurDAG->SelectNodeTo(N, IA64::BRL_NOTCALL, MVT::Other, 


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.24 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.25
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.24  Fri Jan 20 10:10:05 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Fri Jan 20 14:24:31 2006
@@ -39,6 +39,11 @@
   setOperationAction(ISD::BRTWOWAY_CC  , MVT::Other, Expand);
   setOperationAction(ISD::FP_ROUND_INREG   , MVT::f32  , Expand);
 
+  // We need to handle ISD::RET for void functions ourselves,
+  // so we get a chance to restore ar.pfs before adding a
+  // br.ret insn
+  setOperationAction(ISD::RET, MVT::Other, Custom);
+
   setSetCCResultType(MVT::i1);
   setShiftAmountType(MVT::i64);
 
@@ -101,6 +106,7 @@
   default: return 0;
   case IA64ISD::GETFD:  return "IA64ISD::GETFD";
   case IA64ISD::BRCALL: return "IA64ISD::BRCALL";  
+  case IA64ISD::RET_FLAG: return "IA64ISD::RET_FLAG";
   }
 }
   
@@ -524,6 +530,44 @@
   return std::make_pair(RetVal, Chain);
 }
 
+SDOperand IA64TargetLowering::LowerReturnTo(SDOperand Chain, SDOperand Op,
+   SelectionDAG &DAG) {
+  SDOperand Copy, InFlag;
+  SDOperand AR_PFSVal = DAG.getCopyFromReg(Chain, this->VirtGPR,
+  MVT::i64);
+  Chain = AR_PFSVal.getValue(1);
+
+  switch (Op.getValueType()) {
+  default: assert(0 && "Unknown type to return! (promote?)");
+  case MVT::i64:
+Copy = DAG.getCopyToReg(Chain, IA64::r8, Op, InFlag);
+break;
+  case MVT::f64:
+Copy = DAG.getCopyToReg(Chain, IA64::F8, Op, InFlag);
+break;
+  }
+
+  Chain = Copy.getValue(0);
+  InFlag = Copy.getValue(1);
+  // we need to copy VirtGPR (the

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-01-20 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.26 -> 1.27
IA64ISelLowering.cpp updated: 1.23 -> 1.24
---
Log message:


fix sext breakage: now we correctly deal with functions that return
int vs uint



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

 IA64ISelDAGToDAG.cpp |2 +-
 IA64ISelLowering.cpp |4 
 2 files changed, 5 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.26 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.27
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.26  Thu Jan 19 21:40:25 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Jan 20 10:10:05 2006
@@ -494,7 +494,7 @@
 */
 
   case ISD::LOAD:
-  case ISD::EXTLOAD:
+  case ISD::EXTLOAD: // FIXME: load -1, not 1, for bools?
   case ISD::ZEXTLOAD: {
 SDOperand Chain = Select(N->getOperand(0));
 SDOperand Address = Select(N->getOperand(1));


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.23 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.24
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.23  Thu Jan 19 02:31:51 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Fri Jan 20 10:10:05 2006
@@ -475,6 +475,8 @@
 switch (RetTyVT) {
 default: assert(0 && "Unknown value type to return!");
 case MVT::i1: { // bools are just like other integers (returned in r8)
+  // we *could* fall through to the truncate below, but this saves a
+  // few redundant predicate ops
   SDOperand boolInR8 = DAG.getCopyFromReg(Chain, IA64::r8, MVT::i64, 
InFlag);
   InFlag = boolInR8.getValue(2);
   Chain = boolInR8.getValue(1);
@@ -492,8 +494,10 @@
   Chain = RetVal.getValue(1);
   
   // keep track of whether it is sign or zero extended (todo: bools?)
+/* XXX
   RetVal = DAG.getNode(RetTy->isSigned() ? ISD::AssertSext 
:ISD::AssertZext,
MVT::i64, RetVal, DAG.getValueType(RetTyVT));
+*/
   RetVal = DAG.getNode(ISD::TRUNCATE, RetTyVT, RetVal);
   break;
 case MVT::i64:



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64InstrInfo.td

2006-01-19 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.25 -> 1.26
IA64InstrInfo.td updated: 1.40 -> 1.41
---
Log message:


fix storing bools! eek!



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

 IA64ISelDAGToDAG.cpp |4 ++--
 IA64InstrInfo.td |9 +++--
 2 files changed, 5 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.25 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.26
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.25  Mon Jan 16 21:09:48 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Jan 19 21:40:25 2006
@@ -542,9 +542,9 @@
// first load zero!
SDOperand Initial = CurDAG->getCopyFromReg(Chain, IA64::r0, MVT::i64);
Chain = Initial.getValue(1);
-   // then load 1 iff the predicate to store is 1
+   // then load 1 into the same reg iff the predicate to store is 1
 SDOperand Tmp = 
-  CurDAG->getTargetNode(IA64::PADDS, MVT::i64, Initial,
+  CurDAG->getTargetNode(IA64::TPCADDS, MVT::i64, Initial,
 CurDAG->getConstant(1, MVT::i64),
 Select(N->getOperand(1)));
 return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);


Index: llvm/lib/Target/IA64/IA64InstrInfo.td
diff -u llvm/lib/Target/IA64/IA64InstrInfo.td:1.40 
llvm/lib/Target/IA64/IA64InstrInfo.td:1.41
--- llvm/lib/Target/IA64/IA64InstrInfo.td:1.40  Thu Jan 19 09:18:56 2006
+++ llvm/lib/Target/IA64/IA64InstrInfo.td   Thu Jan 19 21:40:25 2006
@@ -113,10 +113,6 @@
"adds $dst = $imm, $src1;;",
   [(set GR:$dst, (add GR:$src1, immSExt14:$imm))]>;
  
-def PADDS: AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, s14imm:$imm, PR:$qp),
-   "($qp) adds $dst = $imm, $src1;;",
-  []>;
-
 def MOVL : AForm_DAG<0x03, 0x0b, (ops GR:$dst, s64imm:$imm),
"movl $dst = $imm;;",
   [(set GR:$dst, imm64:$imm)]>;
@@ -142,9 +138,10 @@
 def TPCADDIMM22 : AForm<0x03, 0x0b,
   (ops GR:$dst, GR:$src1, s22imm:$imm, PR:$qp),
 "($qp) add $dst = $imm, $dst;;">;
-def TPCADDS : AForm<0x03, 0x0b,
+def TPCADDS : AForm_DAG<0x03, 0x0b,
   (ops GR:$dst, GR:$src1, s14imm:$imm, PR:$qp),
-"($qp) adds $dst = $imm, $dst;;">;
+"($qp) adds $dst = $imm, $dst;;",
+[]>;
 def TPCMPIMM8NE : AForm<0x03, 0x0b,
   (ops PR:$dst, PR:$src1, s22imm:$imm, GR:$src2, PR:$qp),
 "($qp) cmp.ne $dst , p0 = $imm, $src2;;">;



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-16 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.24 -> 1.25
---
Log message:

oops, this shouldn't have gotten in



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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.24 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.25
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.24  Mon Jan 16 19:19:49 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Jan 16 21:09:48 2006
@@ -228,8 +228,6 @@
 TmpPR = TmpF5.getValue(1);
 Chain = TmpF5.getValue(2);
 
-Chain = CurDAG->getCopyToReg(Chain, IA64::F8, TmpF5);
-
 SDOperand minusB;
 if(isModulus) { // for remainders, it'll be handy to have
  // copies of -input_b



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-16 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.23 -> 1.24
---
Log message:


fixing divides



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

 IA64ISelDAGToDAG.cpp |   21 +
 1 files changed, 9 insertions(+), 12 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.23 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.24
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.23  Mon Jan 16 08:33:04 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Jan 16 19:19:49 2006
@@ -228,6 +228,8 @@
 TmpPR = TmpF5.getValue(1);
 Chain = TmpF5.getValue(2);
 
+Chain = CurDAG->getCopyToReg(Chain, IA64::F8, TmpF5);
+
 SDOperand minusB;
 if(isModulus) { // for remainders, it'll be handy to have
  // copies of -input_b
@@ -287,23 +289,18 @@
   TmpR2 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
 TmpF4, TmpQ2, TmpF3, TmpPR);
   Chain = TmpR2.getValue(1);
-
+  
 // we want TmpQ3 to have the same target register as the frcpa? maybe we
 // should two-address hack it. See the comment "for this to work..." on page
 // 48 of Intel application note #245415
-  TmpQ3 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-TmpR2, TmpY2, TmpQ2, TmpPR);
+  TmpQ3 = CurDAG->getTargetNode(IA64::TCFMAS1, MVT::f64,
+TmpF5, TmpR2, TmpY2, TmpQ2, TmpPR);
   Chain = TmpQ3.getValue(1);
 
-  // FIXME: this is unfortunate :(
-  // the story is that the dest reg of the fnma above and the fma below it
-  // (and therefore the src of the fcvt.fx[u] below as well) cannot
-  // be the same register, or this code breaks if the first argument is
-  // zero. (e.g. without this hack, 0%8 yields -64, not 0.)
-/* XXX: these two lines do nothing */
-  SDOperand bogus = CurDAG->getTargetNode(IA64::IUSE, MVT::Other, TmpR2);
-  Chain = bogus.getValue(0);
-
+  // STORY: without these two-address instructions (TCFMAS1 and TCFMADS0)
+  // the FPSWA won't be able to help out in the case of large/tiny
+  // arguments. Other fun bugs may also appear, e.g. 0/x = x, not 0.
+  
   if(isSigned)
 TmpQ = CurDAG->getTargetNode(IA64::FCVTFXTRUNCS1, MVT::f64, TmpQ3);
   else



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-16 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.22 -> 1.23
---
Log message:


fixing divides: FP should now be 100%, and integers are fine too
unless you try to div/mod 0 by anything, in which case you will
get some cute number, and not 0, which is bad.



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

 IA64ISelDAGToDAG.cpp |   41 -
 1 files changed, 24 insertions(+), 17 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.22 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.23
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.22  Mon Jan 16 00:33:38 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Jan 16 08:33:04 2006
@@ -183,6 +183,10 @@
 SDOperand TmpF1, TmpF2, TmpF3, TmpF4, TmpF5, TmpF6, TmpF7, TmpF8;
 SDOperand TmpF9, TmpF10,TmpF11,TmpF12,TmpF13,TmpF14,TmpF15;
 SDOperand Result;
+
+// we'll need copies of F0 and F1
+SDOperand F0 = CurDAG->getRegister(IA64::F0, MVT::f64);
+SDOperand F1 = CurDAG->getRegister(IA64::F1, MVT::f64);
 
 // OK, emit some code:
 
@@ -200,12 +204,10 @@
 TmpF4 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF2);
 Chain = TmpF4.getValue(1);
   } else { // is unsigned
-if(isModulus) { /* unsigned integer divides do not need any fcvt.x*f* 
insns */
-  TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
-  Chain = TmpF3.getValue(1);
-  TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
-  Chain = TmpF4.getValue(1);
-}
+TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
+Chain = TmpF3.getValue(1);
+TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
+Chain = TmpF4.getValue(1);
   }
 
 } else { // this is an FP divide/remainder, so we 'leak' some temp
@@ -226,10 +228,6 @@
 TmpPR = TmpF5.getValue(1);
 Chain = TmpF5.getValue(2);
 
-// we'll need copies of F0 and F1
-SDOperand F0 = CurDAG->getRegister(IA64::F0, MVT::f64);
-SDOperand F1 = CurDAG->getRegister(IA64::F1, MVT::f64);
-
 SDOperand minusB;
 if(isModulus) { // for remainders, it'll be handy to have
  // copies of -input_b
@@ -276,7 +274,7 @@
 // we two-address hack it. See the comment "for this to work..." on
 // page 48 of Intel application note #245415
   Result = CurDAG->getTargetNode(IA64::TCFMADS0, MVT::f64, // d.p. s0 rndg!
-TmpY3, TmpR0, TmpQ0, TmpPR);
+TmpF5, TmpY3, TmpR0, TmpQ0, TmpPR);
   Chain = Result.getValue(1);
   return Result; // XXX: early exit!
 } else { // this is *not* an FP divide, so there's a bit left to do:
@@ -290,13 +288,22 @@
 TmpF4, TmpQ2, TmpF3, TmpPR);
   Chain = TmpR2.getValue(1);
 
-// we want TmpQ3 to have the same target register as the frcpa, so
-// we two-address hack it. See the comment "for this to work..." on
-// page 48 of Intel application note #245415
-  TmpQ3 = CurDAG->getTargetNode(IA64::TCFMAS1, MVT::f64,
-TmpR2, TmpR2, TmpY2, TmpQ2, TmpPR);
+// we want TmpQ3 to have the same target register as the frcpa? maybe we
+// should two-address hack it. See the comment "for this to work..." on page
+// 48 of Intel application note #245415
+  TmpQ3 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+TmpR2, TmpY2, TmpQ2, TmpPR);
   Chain = TmpQ3.getValue(1);
-  
+
+  // FIXME: this is unfortunate :(
+  // the story is that the dest reg of the fnma above and the fma below it
+  // (and therefore the src of the fcvt.fx[u] below as well) cannot
+  // be the same register, or this code breaks if the first argument is
+  // zero. (e.g. without this hack, 0%8 yields -64, not 0.)
+/* XXX: these two lines do nothing */
+  SDOperand bogus = CurDAG->getTargetNode(IA64::IUSE, MVT::Other, TmpR2);
+  Chain = bogus.getValue(0);
+
   if(isSigned)
 TmpQ = CurDAG->getTargetNode(IA64::FCVTFXTRUNCS1, MVT::f64, TmpQ3);
   else



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64InstrInfo.td

2006-01-15 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.21 -> 1.22
IA64InstrInfo.td updated: 1.37 -> 1.38
---
Log message:


fix division! again!! pattern isel, prepare to die. 



---
Diffs of the changes:  (+118 -101)

 IA64ISelDAGToDAG.cpp |  198 ---
 IA64InstrInfo.td |   21 +
 2 files changed, 118 insertions(+), 101 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.21 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.22
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.21  Sun Jan 15 03:45:22 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Jan 16 00:33:38 2006
@@ -199,11 +199,13 @@
 Chain = TmpF3.getValue(1);
 TmpF4 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF2);
 Chain = TmpF4.getValue(1);
-  } else {
-TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
-Chain = TmpF3.getValue(1);
-TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
-Chain = TmpF4.getValue(1);
+  } else { // is unsigned
+if(isModulus) { /* unsigned integer divides do not need any fcvt.x*f* 
insns */
+  TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
+  Chain = TmpF3.getValue(1);
+  TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
+  Chain = TmpF4.getValue(1);
+}
   }
 
 } else { // this is an FP divide/remainder, so we 'leak' some temp
@@ -214,116 +216,110 @@
 
 // we start by computing an approximate reciprocal (good to 9 bits?)
 // note, this instruction writes _both_ TmpF5 (answer) and TmpPR 
(predicate)
-TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS1, MVT::f64, MVT::i1,
+if(isFP)
+  TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS0, MVT::f64, MVT::i1,
  TmpF3, TmpF4);
+else
+  TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS1, MVT::f64, MVT::i1,
+  TmpF3, TmpF4);
+  
 TmpPR = TmpF5.getValue(1);
 Chain = TmpF5.getValue(2);
 
-if(!isModulus) { // if this is a divide, we worry about div-by-zero
-SDOperand bogusPR = CurDAG->getTargetNode(IA64::CMPEQ, MVT::i1, 
-  CurDAG->getRegister(IA64::r0, MVT::i64),
-  CurDAG->getRegister(IA64::r0, MVT::i64));
-Chain = bogusPR.getValue(1);
-TmpPR2 = CurDAG->getTargetNode(IA64::TPCMPNE, MVT::i1, bogusPR,
-  CurDAG->getRegister(IA64::r0, MVT::i64),
-  CurDAG->getRegister(IA64::r0, MVT::i64), TmpPR); 
-Chain = TmpPR2.getValue(1);
-}
-
+// we'll need copies of F0 and F1
 SDOperand F0 = CurDAG->getRegister(IA64::F0, MVT::f64);
 SDOperand F1 = CurDAG->getRegister(IA64::F1, MVT::f64);
 
-// now we apply newton's method, thrice! (FIXME: this is ~72 bits of
-// precision, don't need this much for f32/i32)
-TmpF6 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
-  TmpF4, TmpF5, F1, TmpPR);
-Chain = TmpF6.getValue(1);
-TmpF7 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF3, TmpF5, F0, TmpPR);
-Chain = TmpF7.getValue(1);
-TmpF8 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF6, TmpF6, F0, TmpPR);
-Chain = TmpF8.getValue(1);
-TmpF9 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF6, TmpF7, TmpF7, TmpPR);
-Chain = TmpF9.getValue(1);
-TmpF10 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF6, TmpF5, TmpF5, TmpPR);
-Chain = TmpF10.getValue(1);
-TmpF11 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF8, TmpF9, TmpF9, TmpPR);
-Chain = TmpF11.getValue(1);
-TmpF12 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF8, TmpF10, TmpF10, TmpPR);
-Chain = TmpF12.getValue(1);
-TmpF13 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
-  TmpF4, TmpF11, TmpF3, TmpPR);
-Chain = TmpF13.getValue(1);
+SDOperand minusB;
+if(isModulus) { // for remainders, it'll be handy to have
+ // copies of -input_b
+  minusB = CurDAG->getTargetNode(IA64::SUB, MVT::i64,
+  CurDAG->getRegister(IA64::r0, MVT::i64), Tmp2);
+  Chain = minusB.getValue(1);
+}
 
-   // FIXME: this is unfortunate :(
-   // the story is that the dest reg of the fnma above and the fma below
-   // (and therefore possibly the src of the fcvt.fx[u] as well) cannot
-   // be the same register, or this code breaks if the first argument is
-   // zero. (e.g. without this hack, 0%8 yields -64, not 0.)
-TmpF14 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
-  TmpF13, TmpF12, TmpF11, TmpPR);
-Chain = TmpF14.getValue(1);
+SDOperand TmpE0, TmpY1, TmpE1, TmpY2;
 
-if(isModulus) { // XXX: fragile! fixes _only_ mod, *breaks* div! !
-  SDOperand bogus = CurDAG->getTargetNode(IA64::IUSE, MVT::Other, TmpF13);

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2006-01-15 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.20 -> 1.21
IA64ISelLowering.cpp updated: 1.21 -> 1.22
---
Log message:


explain that r12 is the stack pointer reg



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

 IA64ISelDAGToDAG.cpp |   34 ++
 IA64ISelLowering.cpp |4 +++-
 2 files changed, 5 insertions(+), 33 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.20 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.21
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.20  Fri Jan 13 04:28:25 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Jan 15 03:45:22 2006
@@ -450,37 +450,6 @@
   case ISD::SREM:
   case ISD::UREM: return SelectDIV(Op);
  
-  case ISD::DYNAMIC_STACKALLOC: {
-if (!isa(N->getOperand(2)) ||
-cast(N->getOperand(2))->getValue() != 0) {
-  std::cerr << "Cannot allocate stack object with greater alignment than"
-<< " the stack alignment yet!";
-  abort();
-}
-
-SDOperand Chain = Select(N->getOperand(0));
-SDOperand Amt   = Select(N->getOperand(1));
-SDOperand Reg = CurDAG->getRegister(IA64::r12, MVT::i64);
-SDOperand Val = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64);
-Chain = Val.getValue(1);
-
-// Subtract the amount (guaranteed to be a multiple of the stack alignment)
-// from the stack pointer, giving us the result pointer.
-SDOperand Result = Select(CurDAG->getNode(ISD::SUB, MVT::i64, Val, Amt));
-
-// Copy this result back into r12.
-Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, Reg, Result);
-
-// Copy this result back out of r12 to make sure we're not using the stack
-// space without decrementing the stack pointer.
-Result = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64);
-  
-// Finally, replace the DYNAMIC_STACKALLOC with the copyfromreg.
-CodeGenMap[Op.getValue(0)] = Result;
-CodeGenMap[Op.getValue(1)] = Result.getValue(1);
-return SDOperand(Result.Val, Op.ResNo);
-  }
-
   case ISD::ConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 
@@ -501,7 +470,8 @@
 CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
 
-  case ISD::ConstantPool: {
+  case ISD::ConstantPool: { // TODO: nuke the constant pool
+   //   (ia64 doesn't need one)
 Constant *C = cast(N)->get();
 SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64);
 return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.21 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.22
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.21  Sat Jan 14 16:27:21 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Sun Jan 15 03:45:23 2006
@@ -84,9 +84,11 @@
   setOperationAction(ISD::ROTR , MVT::i64  , Expand);
   setOperationAction(ISD::BSWAP, MVT::i64  , Expand);  // mux @rev
 
-  // Not implemented yet.
   setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
   setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
+  setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i64, Expand);
+
+  setStackPointerRegisterToSaveRestore(IA64::r12);
 
   computeRegisterProperties();
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-13 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.19 -> 1.20
---
Log message:

don't be a doofus - this fixes storing bools



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

 IA64ISelDAGToDAG.cpp |7 +--
 1 files changed, 5 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.19 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.20
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.19  Wed Jan 11 13:53:22 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Jan 13 04:28:25 2006
@@ -571,9 +571,12 @@
   default: assert(0 && "unknown type in store");
   case MVT::i1: { // this is a bool
 Opc = IA64::ST1; // we store either 0 or 1 as a byte 
+   // first load zero!
+   SDOperand Initial = CurDAG->getCopyFromReg(Chain, IA64::r0, MVT::i64);
+   Chain = Initial.getValue(1);
+   // then load 1 iff the predicate to store is 1
 SDOperand Tmp = 
-  CurDAG->getTargetNode(IA64::PADDS, MVT::i64,
-CurDAG->getRegister(IA64::r0, MVT::i64),
+  CurDAG->getTargetNode(IA64::PADDS, MVT::i64, Initial,
 CurDAG->getConstant(1, MVT::i64),
 Select(N->getOperand(1)));
 return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-11 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.18 -> 1.19
---
Log message:

tblgen does this now


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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.18 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.19
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.18  Tue Jan 10 21:50:40 2006
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Jan 11 13:53:22 2006
@@ -341,8 +341,6 @@
   switch (N->getOpcode()) {
   default: break;
 
-  case ISD::Register: return Op; // XXX: this is a hack, tblgen one day?
- 
   case IA64ISD::BRCALL: { // XXX: this is also a hack!
 SDOperand Chain = Select(N->getOperand(0));
 SDOperand InFlag;  // Null incoming flag value.



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2006-01-10 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.17 -> 1.18
---
Log message:

cleanup GETFD



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

 IA64ISelDAGToDAG.cpp |7 +++
 1 files changed, 3 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.17 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.18
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.17  Sun Dec 25 08:09:08 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Jan 10 21:50:40 2006
@@ -411,10 +411,9 @@
   
   case IA64ISD::GETFD: {
 SDOperand Input = Select(N->getOperand(0));
-SDOperand Result = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, MVT::Flag, 
Input);
-CodeGenMap[Op.getValue(0)] = Result;
-CodeGenMap[Op.getValue(1)] = Result.getValue(1);
-return Result.getValue(Op.ResNo);
+SDOperand Result = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Input);
+CodeGenMap[Op] = Result;
+return Result;
   } 
   
   case ISD::CALL:



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-12-25 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.16 -> 1.17
---
Log message:

unbreak calls, a few more tests should run. Tomorrow: bugpoint!



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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.16 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.17
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.16  Thu Dec 22 07:29:14 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Dec 25 08:09:08 2005
@@ -352,7 +352,6 @@
 
 unsigned CallOpcode;
 SDOperand CallOperand;
-std::vector TypeOperands;
 
 // if we can call directly, do so
 if (GlobalAddressSDNode *GASD =
@@ -395,7 +394,7 @@
  
// Finally, once everything is setup, emit the call itself
if(InFlag.Val)
- Chain = CurDAG->getTargetNode(CallOpcode, MVT::Other, MVT::Flag, 
CallOperand, Chain, InFlag);
+ Chain = CurDAG->getTargetNode(CallOpcode, MVT::Other, MVT::Flag, 
CallOperand, InFlag);
else // there might be no arguments
  Chain = CurDAG->getTargetNode(CallOpcode, MVT::Other, MVT::Flag, 
CallOperand, Chain);
InFlag = Chain.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/Target/IA64/IA64ISelDAGToDAG.cpp

2005-12-21 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.14 -> 1.15
---
Log message:

we can't do this directly in lowering, so we need this case



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

 IA64ISelDAGToDAG.cpp |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.14 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.15
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.14  Wed Dec 21 21:58:17 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Thu Dec 22 01:14:45 2005
@@ -343,6 +343,14 @@
 
   case ISD::Register: return Op; // XXX: this is a hack, tblgen one day?
   
+  case IA64ISD::GETFD: {
+SDOperand Input = Select(N->getOperand(0));
+SDOperand Result = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, MVT::Flag, 
Input);
+CodeGenMap[Op.getValue(0)] = Result;
+CodeGenMap[Op.getValue(1)] = Result.getValue(1);
+return Result.getValue(Op.ResNo);
+  } 
+  
   case ISD::CALL:
   case ISD::TAILCALL: { {
 // FIXME: This is a workaround for a bug in tblgen.



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-12-21 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.13 -> 1.14
---
Log message:

kill SelectCALL() in the DAG isel, we handle this in lowering now, like
SPARCv8. (we copy sparcv8's workaround for tablegen not being nice about
ISD::CALL/TAILCALL)


---
Diffs of the changes:  (+47 -189)

 IA64ISelDAGToDAG.cpp |  236 ++-
 1 files changed, 47 insertions(+), 189 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.13 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.14
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.13  Wed Nov 30 17:02:08 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Dec 21 21:58:17 2005
@@ -94,7 +94,6 @@
 
 private:
 SDOperand SelectDIV(SDOperand Op);
-SDOperand SelectCALL(SDOperand Op);
   };
 }
 
@@ -327,191 +326,6 @@
   return Result;
 }
 
-
-SDOperand IA64DAGToDAGISel::SelectCALL(SDOperand Op) {
-  SDNode *N = Op.Val;
-  SDOperand Chain = Select(N->getOperand(0));
-  
-  unsigned CallOpcode;
-  std::vector CallOperands;
-
-  // save the current GP, SP and RP : FIXME: do we need to do all 3 always?
-  SDOperand GPBeforeCall = CurDAG->getCopyFromReg(Chain, IA64::r1, MVT::i64);
-  Chain = GPBeforeCall.getValue(1);
-  SDOperand SPBeforeCall = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64);
-  Chain = SPBeforeCall.getValue(1);
-  SDOperand RPBeforeCall = CurDAG->getCopyFromReg(Chain, IA64::rp, MVT::i64);
-  Chain = RPBeforeCall.getValue(1);
-
-  // if we can call directly, do so
-  if (GlobalAddressSDNode *GASD =
-  dyn_cast(N->getOperand(1))) {
-CallOpcode = IA64::BRCALL_IPREL;
-CallOperands.push_back(CurDAG->getTargetGlobalAddress(GASD->getGlobal(),
-  MVT::i64));
-  } else if (ExternalSymbolSDNode *ESSDN = // FIXME: we currently NEED this
-// case for correctness, to avoid
-// "non-pic code with imm reloc.n
-// against dynamic symbol" errors
- dyn_cast(N->getOperand(1))) {
-CallOpcode = IA64::BRCALL_IPREL;
-CallOperands.push_back(N->getOperand(1));
-  } else {
-// otherwise we need to load the function descriptor,
-// load the branch target (function)'s entry point and GP,
-// branch (call) then restore the GP
-
-SDOperand FnDescriptor = Select(N->getOperand(1));
-   
-// load the branch target's entry point [mem] and 
-// GP value [mem+8]
-SDOperand targetEntryPoint=CurDAG->getTargetNode(IA64::LD8, MVT::i64,
-   FnDescriptor);
-Chain = targetEntryPoint.getValue(1);
-SDOperand targetGPAddr=CurDAG->getTargetNode(IA64::ADDS, MVT::i64, 
-   FnDescriptor, CurDAG->getConstant(8, MVT::i64));
-Chain = targetGPAddr.getValue(1);
-SDOperand targetGP=CurDAG->getTargetNode(IA64::LD8, MVT::i64,
-   targetGPAddr);
-Chain = targetGP.getValue(1);
-
-/* FIXME? (methcall still fails)
-SDOperand targetEntryPoint=CurDAG->getLoad(MVT::i64, Chain, FnDescriptor,
-   CurDAG->getSrcValue(0));
-SDOperand targetGPAddr=CurDAG->getNode(ISD::ADD, MVT::i64, FnDescriptor, 
-   CurDAG->getConstant(8, MVT::i64));
-SDOperand targetGP=CurDAG->getLoad(MVT::i64, Chain, targetGPAddr,
-  CurDAG->getSrcValue(0));
-*/
-
-/* this is just the long way of writing the two lines below?
-// Copy the callee GP into r1
-SDOperand r1 = CurDAG->getRegister(IA64::r1, MVT::i64);
-Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, r1,
-targetGP);
-
-
-// Copy the callee address into the b6 branch register
-SDOperand B6 = CurDAG->getRegister(IA64::B6, MVT::i64);
-Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, B6,
-targetEntryPoint);
-*/
-
-Chain = CurDAG->getCopyToReg(Chain, IA64::r1, targetGP);
-Chain = CurDAG->getCopyToReg(Chain, IA64::B6, targetEntryPoint);
-
-CallOperands.push_back(CurDAG->getRegister(IA64::B6, MVT::i64));
-CallOpcode = IA64::BRCALL_INDIRECT;
-  }
- 
-  // see section 8.5.8 of "Itanium Software Conventions and
-  // Runtime Architecture Guide to see some examples of what's going
-  // on here. (in short: int args get mapped 1:1 'slot-wise' to out0->out7,
-  // while FP args get mapped to F8->F15 as needed)
-  
-  // TODO: support in-memory arguments
- 
-  unsigned used_FPArgs=0; // how many FP args have been used so far?
-
-  unsigned intArgs[] = {IA64::out0, IA64::out1, IA64::out2, IA64::out3,
-IA64::out4, IA64::out5, IA64::out6, IA64::out7 };
-  unsigned FPArgs[] = {IA64::F8, IA64::F9, IA64::F10, IA64::F11,
-   IA64::F12, IA64::F13, IA64::F14, IA64::F15 };
-
-  SDOperand InFlag;  // Null incoming f

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-30 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.12 -> 1.13
---
Log message:

Pay attn to the node returned by SelectNodeTo


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

 IA64ISelDAGToDAG.cpp |   65 +--
 1 files changed, 28 insertions(+), 37 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.12 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.13
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.12  Fri Nov 25 01:49:25 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Nov 30 17:02:08 2005
@@ -580,11 +580,9 @@
 
   case ISD::FrameIndex: { // TODO: reduce creepyness
 int FI = cast(N)->getIndex();
-if (N->hasOneUse()) {
-  CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
-   CurDAG->getTargetFrameIndex(FI, MVT::i64));
-  return SDOperand(N, 0);
-}
+if (N->hasOneUse())
+  return CurDAG->SelectNodeTo(N, IA64::MOV, MVT::i64,
+  CurDAG->getTargetFrameIndex(FI, MVT::i64));
 return CurDAG->getTargetNode(IA64::MOV, MVT::i64,
 CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
@@ -617,11 +615,11 @@
 default: N->dump(); assert(0 && "Cannot load this type!");
 case MVT::i1: { // this is a bool
   Opc = IA64::LD1; // first we load a byte, then compare for != 0
-  CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
-   CurDAG->getTargetNode(Opc, MVT::i64, Address),
-   CurDAG->getRegister(IA64::r0, MVT::i64), Chain);
-  return SDOperand(N, Op.ResNo); // XXX: early exit
-  }
+  return CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
+  CurDAG->getTargetNode(Opc, MVT::i64, 
Address),
+  CurDAG->getRegister(IA64::r0, MVT::i64), 
+  Chain).getValue(Op.ResNo);
+}
 case MVT::i8:  Opc = IA64::LD1; break;
 case MVT::i16: Opc = IA64::LD2; break;
 case MVT::i32: Opc = IA64::LD4; break;
@@ -631,10 +629,9 @@
 case MVT::f64: Opc = IA64::LDF8; break;
 }
 
-CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
- Address, Chain); // TODO: comment this
-
-return SDOperand(N, Op.ResNo);
+// TODO: comment this
+return CurDAG->SelectNodeTo(N, Opc, N->getValueType(0), MVT::Other,
+Address, Chain).getValue(Op.ResNo);
   }
   
   case ISD::TRUNCSTORE:
@@ -648,14 +645,13 @@
   default: assert(0 && "unknown type in store");
   case MVT::i1: { // this is a bool
 Opc = IA64::ST1; // we store either 0 or 1 as a byte 
-CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address,
-   CurDAG->getTargetNode(IA64::PADDS, MVT::i64,
- CurDAG->getRegister(IA64::r0, MVT::i64),
- CurDAG->getConstant(1, MVT::i64),
- Select(N->getOperand(1))),
-   Chain);
-return SDOperand(N, 0); // XXX: early exit
-}
+SDOperand Tmp = 
+  CurDAG->getTargetNode(IA64::PADDS, MVT::i64,
+CurDAG->getRegister(IA64::r0, MVT::i64),
+CurDAG->getConstant(1, MVT::i64),
+Select(N->getOperand(1)));
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address, Tmp, Chain);
+  }
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
   }
@@ -669,9 +665,8 @@
   }
 }
 
-CurDAG->SelectNodeTo(N, Opc, MVT::Other, Select(N->getOperand(2)),
- Select(N->getOperand(1)), Chain);
-return SDOperand(N, 0);
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other, Select(N->getOperand(2)),
+Select(N->getOperand(1)), Chain);
   }
 
   case ISD::BRCOND: {
@@ -680,8 +675,8 @@
 MachineBasicBlock *Dest =
   cast(N->getOperand(2))->getBasicBlock();
 //FIXME - we do NOT need long branches all the time
-CurDAG->SelectNodeTo(N, IA64::BRLCOND_NOTCALL, MVT::Other, CC, 
CurDAG->getBasicBlock(Dest), Chain);
-return SDOperand(N, 0);
+return CurDAG->SelectNodeTo(N, IA64::BRLCOND_NOTCALL, MVT::Other, CC, 
+CurDAG->getBasicBlock(Dest), Chain);
   }
 
   case ISD::CALLSEQ_START:
@@ -689,9 +684,8 @@
 int64_t Amt = cast(N->getOperand(1))->getValue();
 unsigned Opc = N->getOpcode() == ISD::CALLSEQ_START ?
IA64::ADJUSTCALLSTACKDOWN : IA64::ADJUSTCALLSTACKUP;
-CurDAG->SelectNodeTo(N, Opc, MVT::Other,
- getI64Imm(Amt), Select(N->getOperand(0)));
-return SDOperand(N, 0);
+return CurDAG->SelectNodeTo(N, Opc, MVT::Other,
+getI64Imm(Amt), Select(N->getOperand(0)));
   }
 
   case ISD::RET: {
@@ -735,20 +729,17 @@
 Chain = AR_PFSVal.getValue(1);
 Chain = CurDA

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-24 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.11 -> 1.12
---
Log message:

add support for dynamic_stackalloc to the dag isel (thanks andrew ;)

next up: support argument passing in memory, not just registers



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

 IA64ISelDAGToDAG.cpp |   34 +++---
 1 files changed, 31 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.11 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.12
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.11  Mon Nov 21 08:14:54 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Nov 25 01:49:25 2005
@@ -536,9 +536,37 @@
   case ISD::SREM:
   case ISD::UREM: return SelectDIV(Op);
  
-/* todo:
- * case ISD::DYNAMIC_STACKALLOC:
-*/
+  case ISD::DYNAMIC_STACKALLOC: {
+if (!isa(N->getOperand(2)) ||
+cast(N->getOperand(2))->getValue() != 0) {
+  std::cerr << "Cannot allocate stack object with greater alignment than"
+<< " the stack alignment yet!";
+  abort();
+}
+
+SDOperand Chain = Select(N->getOperand(0));
+SDOperand Amt   = Select(N->getOperand(1));
+SDOperand Reg = CurDAG->getRegister(IA64::r12, MVT::i64);
+SDOperand Val = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64);
+Chain = Val.getValue(1);
+
+// Subtract the amount (guaranteed to be a multiple of the stack alignment)
+// from the stack pointer, giving us the result pointer.
+SDOperand Result = Select(CurDAG->getNode(ISD::SUB, MVT::i64, Val, Amt));
+
+// Copy this result back into r12.
+Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, Reg, Result);
+
+// Copy this result back out of r12 to make sure we're not using the stack
+// space without decrementing the stack pointer.
+Result = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64);
+  
+// Finally, replace the DYNAMIC_STACKALLOC with the copyfromreg.
+CodeGenMap[Op.getValue(0)] = Result;
+CodeGenMap[Op.getValue(1)] = Result.getValue(1);
+return SDOperand(Result.Val, Op.ResNo);
+  }
+
   case ISD::ConstantFP: {
 SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-21 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.10 -> 1.11
---
Log message:

add support for div/rem to the dag->dag isel. yay.



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

 IA64ISelDAGToDAG.cpp |  180 +++
 1 files changed, 180 insertions(+)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.10 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.11
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.10  Sun Nov  6 21:11:03 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Nov 21 08:14:54 2005
@@ -93,6 +93,7 @@
 #include "IA64GenDAGISel.inc"
 
 private:
+SDOperand SelectDIV(SDOperand Op);
 SDOperand SelectCALL(SDOperand Op);
   };
 }
@@ -153,6 +154,179 @@
   ScheduleAndEmitDAG(DAG);
 }
 
+SDOperand IA64DAGToDAGISel::SelectDIV(SDOperand Op) {
+  SDNode *N = Op.Val;
+  SDOperand Chain = Select(N->getOperand(0));
+
+  SDOperand Tmp1 = Select(N->getOperand(0));
+  SDOperand Tmp2 = Select(N->getOperand(1));
+
+  bool isFP=false;
+
+  if(MVT::isFloatingPoint(Tmp1.getValueType()))
+isFP=true;
+
+  bool isModulus=false; // is it a division or a modulus?
+  bool isSigned=false;
+
+  switch(N->getOpcode()) {
+case ISD::FDIV:
+case ISD::SDIV:  isModulus=false; isSigned=true;  break;
+case ISD::UDIV:  isModulus=false; isSigned=false; break;
+case ISD::FREM:
+case ISD::SREM:  isModulus=true;  isSigned=true;  break;
+case ISD::UREM:  isModulus=true;  isSigned=false; break;
+  }
+
+  // TODO: check for integer divides by powers of 2 (or other simple patterns?)
+
+SDOperand TmpPR, TmpPR2;
+SDOperand TmpF1, TmpF2, TmpF3, TmpF4, TmpF5, TmpF6, TmpF7, TmpF8;
+SDOperand TmpF9, TmpF10,TmpF11,TmpF12,TmpF13,TmpF14,TmpF15;
+SDOperand Result;
+
+// OK, emit some code:
+
+if(!isFP) {
+  // first, load the inputs into FP regs.
+  TmpF1 = CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp1);
+  Chain = TmpF1.getValue(1);
+  TmpF2 = CurDAG->getTargetNode(IA64::SETFSIG, MVT::f64, Tmp2);
+  Chain = TmpF2.getValue(1);
+  
+  // next, convert the inputs to FP
+  if(isSigned) {
+TmpF3 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF1);
+Chain = TmpF3.getValue(1);
+TmpF4 = CurDAG->getTargetNode(IA64::FCVTXF, MVT::f64, TmpF2);
+Chain = TmpF4.getValue(1);
+  } else {
+TmpF3 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF1);
+Chain = TmpF3.getValue(1);
+TmpF4 = CurDAG->getTargetNode(IA64::FCVTXUFS1, MVT::f64, TmpF2);
+Chain = TmpF4.getValue(1);
+  }
+
+} else { // this is an FP divide/remainder, so we 'leak' some temp
+ // regs and assign TmpF3=Tmp1, TmpF4=Tmp2
+  TmpF3=Tmp1;
+  TmpF4=Tmp2;
+}
+
+// we start by computing an approximate reciprocal (good to 9 bits?)
+// note, this instruction writes _both_ TmpF5 (answer) and TmpPR 
(predicate)
+TmpF5 = CurDAG->getTargetNode(IA64::FRCPAS1, MVT::f64, MVT::i1,
+ TmpF3, TmpF4);
+TmpPR = TmpF5.getValue(1);
+Chain = TmpF5.getValue(2);
+
+if(!isModulus) { // if this is a divide, we worry about div-by-zero
+SDOperand bogusPR = CurDAG->getTargetNode(IA64::CMPEQ, MVT::i1, 
+  CurDAG->getRegister(IA64::r0, MVT::i64),
+  CurDAG->getRegister(IA64::r0, MVT::i64));
+Chain = bogusPR.getValue(1);
+TmpPR2 = CurDAG->getTargetNode(IA64::TPCMPNE, MVT::i1, bogusPR,
+  CurDAG->getRegister(IA64::r0, MVT::i64),
+  CurDAG->getRegister(IA64::r0, MVT::i64), TmpPR); 
+Chain = TmpPR2.getValue(1);
+}
+
+SDOperand F0 = CurDAG->getRegister(IA64::F0, MVT::f64);
+SDOperand F1 = CurDAG->getRegister(IA64::F1, MVT::f64);
+
+// now we apply newton's method, thrice! (FIXME: this is ~72 bits of
+// precision, don't need this much for f32/i32)
+TmpF6 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
+  TmpF4, TmpF5, F1, TmpPR);
+Chain = TmpF6.getValue(1);
+TmpF7 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF3, TmpF5, F0, TmpPR);
+Chain = TmpF7.getValue(1);
+TmpF8 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF6, TmpF6, F0, TmpPR);
+Chain = TmpF8.getValue(1);
+TmpF9 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF6, TmpF7, TmpF7, TmpPR);
+Chain = TmpF9.getValue(1);
+TmpF10 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF6, TmpF5, TmpF5, TmpPR);
+Chain = TmpF10.getValue(1);
+TmpF11 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF8, TmpF9, TmpF9, TmpPR);
+Chain = TmpF11.getValue(1);
+TmpF12 = CurDAG->getTargetNode(IA64::CFMAS1, MVT::f64,
+  TmpF8, TmpF10, TmpF10, TmpPR);
+Chain = TmpF12.getValue(1);
+TmpF13 = CurDAG->getTargetNode(IA64::CFNMAS1, MVT::f64,
+  TmpF4, TmpF11, TmpF3, TmpPR);
+Chain = TmpF13.getValue(1);
+
+   // FIXME

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-06 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.9 -> 1.10
---
Log message:

add support for storing and returning bools



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

 IA64ISelDAGToDAG.cpp |   31 ++-
 1 files changed, 26 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.9 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.10
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.9   Sun Nov  6 07:43:30 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Nov  6 21:11:03 2005
@@ -301,6 +301,16 @@
   switch (N->getValueType(0)) {
 default: assert(0 && "Unexpected ret value!");
 case MVT::Other: break;
+case MVT::i1: {
+// bools are returned as bytes 0/1 in r8
+   SDOperand byteval = CurDAG->getCopyFromReg(Chain, IA64::r8, MVT::i64,
+  Chain.getValue(1));
+Chain = byteval.getValue(1);
+   Chain = CurDAG->getTargetNode(IA64::CMPNE, MVT::i1, MVT::Other,
+   byteval, CurDAG->getRegister(IA64::r0, MVT::i64)).getValue(1);
+   CallResults.push_back(Chain.getValue(0));
+   break;
+   }
 case MVT::i64:
 Chain = CurDAG->getCopyFromReg(Chain, IA64::r8, MVT::i64,
Chain.getValue(1)).getValue(1);
@@ -422,17 +432,28 @@
   case ISD::TRUNCSTORE:
   case ISD::STORE: {
 SDOperand Address = Select(N->getOperand(2));
-
+SDOperand Chain = Select(N->getOperand(0));
+   
 unsigned Opc;
 if (N->getOpcode() == ISD::STORE) {
   switch (N->getOperand(1).getValueType()) {
-  default: assert(0 && "unknown Type in store");
+  default: assert(0 && "unknown type in store");
+  case MVT::i1: { // this is a bool
+Opc = IA64::ST1; // we store either 0 or 1 as a byte 
+CurDAG->SelectNodeTo(N, Opc, MVT::Other, Address,
+   CurDAG->getTargetNode(IA64::PADDS, MVT::i64,
+ CurDAG->getRegister(IA64::r0, MVT::i64),
+ CurDAG->getConstant(1, MVT::i64),
+ Select(N->getOperand(1))),
+   Chain);
+return SDOperand(N, 0); // XXX: early exit
+}
   case MVT::i64: Opc = IA64::ST8;  break;
   case MVT::f64: Opc = IA64::STF8; break;
- }
+  }
 } else { //ISD::TRUNCSTORE
   switch(cast(N->getOperand(4))->getVT()) {
-  default: assert(0 && "unknown Type in store");
+  default: assert(0 && "unknown type in truncstore");
   case MVT::i8:  Opc = IA64::ST1;  break;
   case MVT::i16: Opc = IA64::ST2;  break;
   case MVT::i32: Opc = IA64::ST4;  break;
@@ -441,7 +462,7 @@
 }
 
 CurDAG->SelectNodeTo(N, Opc, MVT::Other, Select(N->getOperand(2)),
- Select(N->getOperand(1)), Select(N->getOperand(0)));
+ Select(N->getOperand(1)), Chain);
 return SDOperand(N, 0);
   }
 



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-06 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.8 -> 1.9
---
Log message:

just some random hacking - calls (particularly indirect) need a lot of
love (especially with -sched=simple)



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

 IA64ISelDAGToDAG.cpp |   39 +--
 1 files changed, 25 insertions(+), 14 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.8 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.9
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.8   Fri Nov  4 11:55:53 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sun Nov  6 07:43:30 2005
@@ -201,7 +201,7 @@
targetGPAddr);
 Chain = targetGP.getValue(1);
 
-/* FIXME! (methcall still fails)
+/* FIXME? (methcall still fails)
 SDOperand targetEntryPoint=CurDAG->getLoad(MVT::i64, Chain, FnDescriptor,
CurDAG->getSrcValue(0));
 SDOperand targetGPAddr=CurDAG->getNode(ISD::ADD, MVT::i64, FnDescriptor, 
@@ -209,7 +209,8 @@
 SDOperand targetGP=CurDAG->getLoad(MVT::i64, Chain, targetGPAddr,
   CurDAG->getSrcValue(0));
 */
- 
+
+/* this is just the long way of writing the two lines below?
 // Copy the callee GP into r1
 SDOperand r1 = CurDAG->getRegister(IA64::r1, MVT::i64);
 Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, r1,
@@ -220,8 +221,12 @@
 SDOperand B6 = CurDAG->getRegister(IA64::B6, MVT::i64);
 Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, B6,
 targetEntryPoint);
+*/
+
+Chain = CurDAG->getCopyToReg(Chain, IA64::r1, targetGP);
+Chain = CurDAG->getCopyToReg(Chain, IA64::B6, targetEntryPoint);
 
-CallOperands.push_back(B6);
+CallOperands.push_back(CurDAG->getRegister(IA64::B6, MVT::i64));
 CallOpcode = IA64::BRCALL_INDIRECT;
   }
  
@@ -256,18 +261,23 @@
 
 if (N->getOperand(i).getOpcode() != ISD::UNDEF) {
   SDOperand Val = Select(N->getOperand(i));
-  Chain = CurDAG->getCopyToReg(Chain, DestReg, Val, InFlag);
-  InFlag = Chain.getValue(1);
-  CallOperands.push_back(CurDAG->getRegister(DestReg, RegTy));
+  if(MVT::isInteger(N->getOperand(i).getValueType())) {
+Chain = CurDAG->getCopyToReg(Chain, DestReg, Val, InFlag);
+InFlag = Chain.getValue(1);
+CallOperands.push_back(CurDAG->getRegister(DestReg, RegTy));
+  }
   // some functions (e.g. printf) want floating point arguments
   // *also* passed as in-memory representations in integer registers
   // this is FORTRAN legacy junk which we don't _always_ need
   // to do, but to be on the safe side, we do. 
-  if(MVT::isFloatingPoint(N->getOperand(i).getValueType())) {
+  else if(MVT::isFloatingPoint(N->getOperand(i).getValueType())) {
 assert((i-2) < 8 && "FP args alone would fit, but no int regs left");
-   DestReg = intArgs[i-2]; // this FP arg goes in an int reg
+   // first copy into the appropriate FP reg
+Chain = CurDAG->getCopyToReg(Chain, DestReg, Val); 
+   // then copy into the appropriate integer reg
+   DestReg = intArgs[i-2];
 // GETFD takes an FP reg and writes a GP reg   
-   Chain = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Val, InFlag);
+   Chain = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Val);
 // FIXME: this next line is a bit unfortunate 
Chain = CurDAG->getCopyToReg(Chain, DestReg, Chain, InFlag); 
 InFlag = Chain.getValue(1);
@@ -285,8 +295,6 @@
   Chain = CurDAG->getTargetNode(CallOpcode, MVT::Other, MVT::Flag,
 CallOperands);
  
-//  return Chain; // HACK: err, this means that functions never return 
anything. need to intergrate this with the code immediately below FIXME XXX
-
   std::vector CallResults;
   
   // If the call has results, copy the values out of the ret val registers.
@@ -304,12 +312,15 @@
   CallResults.push_back(Chain.getValue(0));
   break;
   }
-   // restore GP, SP and RP
+   
+  // restore GP, SP and RP - FIXME: this doesn't quite work (e.g.
+  // methcall / objinst both segfault on exit) and it *really*
+  // doesn't work unless you have -sched=none
   Chain = CurDAG->getCopyToReg(Chain, IA64::r1, GPBeforeCall);
   Chain = CurDAG->getCopyToReg(Chain, IA64::r12, SPBeforeCall);
   Chain = CurDAG->getCopyToReg(Chain, IA64::rp, RPBeforeCall);
- 
-  CallResults.push_back(Chain);
+  CallResults.push_back(Chain); // llc segfaults w/o this,
+  // ary3(e.g.) SIGILLs with 3
 
   for (unsigned i = 0, e = CallResults.size(); i != e; ++i)
 CodeGenMap[Op.getValue(i)] = CallResults[i];



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-04 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.7 -> 1.8
---
Log message:

oops, forgot to load GP for indirect calls, though the old code now commented
out failed (e.g. methcall) - now the code compiles, though it's not quite
right just yet (tm) ;)

would fix this but it's 3am! :O



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

 IA64ISelDAGToDAG.cpp |   25 +
 1 files changed, 21 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.7 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.8
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.7   Fri Nov  4 03:59:06 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Nov  4 11:55:53 2005
@@ -185,23 +185,40 @@
   } else {
 // otherwise we need to load the function descriptor,
 // load the branch target (function)'s entry point and GP,
-//  branch (call) then restore the
-// GP
+// branch (call) then restore the GP
 
 SDOperand FnDescriptor = Select(N->getOperand(1));

 // load the branch target's entry point [mem] and 
 // GP value [mem+8]
+SDOperand targetEntryPoint=CurDAG->getTargetNode(IA64::LD8, MVT::i64,
+   FnDescriptor);
+Chain = targetEntryPoint.getValue(1);
+SDOperand targetGPAddr=CurDAG->getTargetNode(IA64::ADDS, MVT::i64, 
+   FnDescriptor, CurDAG->getConstant(8, MVT::i64));
+Chain = targetGPAddr.getValue(1);
+SDOperand targetGP=CurDAG->getTargetNode(IA64::LD8, MVT::i64,
+   targetGPAddr);
+Chain = targetGP.getValue(1);
+
+/* FIXME! (methcall still fails)
 SDOperand targetEntryPoint=CurDAG->getLoad(MVT::i64, Chain, FnDescriptor,
CurDAG->getSrcValue(0));
 SDOperand targetGPAddr=CurDAG->getNode(ISD::ADD, MVT::i64, FnDescriptor, 
CurDAG->getConstant(8, MVT::i64));
 SDOperand targetGP=CurDAG->getLoad(MVT::i64, Chain, targetGPAddr,
-   CurDAG->getSrcValue(0));
+  CurDAG->getSrcValue(0));
+*/
+ 
+// Copy the callee GP into r1
+SDOperand r1 = CurDAG->getRegister(IA64::r1, MVT::i64);
+Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, r1,
+targetGP);
 
+
 // Copy the callee address into the b6 branch register
 SDOperand B6 = CurDAG->getRegister(IA64::B6, MVT::i64);
-Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, B6,
+Chain = CurDAG->getNode(ISD::CopyToReg, MVT::i64, Chain, B6,
 targetEntryPoint);
 
 CallOperands.push_back(B6);



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-04 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.6 -> 1.7
---
Log message:

add support for loading bools



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

 IA64ISelDAGToDAG.cpp |8 +++-
 1 files changed, 7 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.6 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.7
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.6   Wed Nov  2 01:32:59 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Nov  4 03:59:06 2005
@@ -369,7 +369,13 @@
 unsigned Opc;
 switch (TypeBeingLoaded) {
 default: N->dump(); assert(0 && "Cannot load this type!");
-// FIXME: bools? case MVT::i1:
+case MVT::i1: { // this is a bool
+  Opc = IA64::LD1; // first we load a byte, then compare for != 0
+  CurDAG->SelectNodeTo(N, IA64::CMPNE, MVT::i1, MVT::Other, 
+   CurDAG->getTargetNode(Opc, MVT::i64, Address),
+   CurDAG->getRegister(IA64::r0, MVT::i64), Chain);
+  return SDOperand(N, Op.ResNo); // XXX: early exit
+  }
 case MVT::i8:  Opc = IA64::LD1; break;
 case MVT::i16: Opc = IA64::LD2; break;
 case MVT::i32: Opc = IA64::LD4; break;



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-11-01 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.5 -> 1.6
---
Log message:

"fix" support for FP constants (this code asserts in the scheduler,
though)



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

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


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.5 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.6
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.5   Tue Nov  1 20:35:04 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Wed Nov  2 01:32:59 2005
@@ -322,10 +322,12 @@
  * case ISD::DYNAMIC_STACKALLOC:
 */
   case ISD::ConstantFP: {
+SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so..
+
 if (cast(N)->isExactlyValue(+0.0))
-  return CurDAG->getRegister(IA64::F0, MVT::f64); // load 0.0
+  return CurDAG->getCopyFromReg(Chain, IA64::F0, MVT::f64);
 else if (cast(N)->isExactlyValue(+1.0))
-  return CurDAG->getRegister(IA64::F1, MVT::f64); // load 1.0
+  return CurDAG->getCopyFromReg(Chain, IA64::F1, MVT::f64);
 else
   assert(0 && "Unexpected FP constant!");
   }



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64ISelLowering.cpp

2005-11-01 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.4 -> 1.5
IA64ISelLowering.cpp updated: 1.1 -> 1.2
---
Log message:

add support for loading FP constants +0.0 and +1.0 to the dag isel,
stop pretending -0.0 and -1.0 are machine constants



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

 IA64ISelDAGToDAG.cpp |8 
 IA64ISelLowering.cpp |3 ---
 2 files changed, 8 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.4 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.5
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.4   Mon Oct 31 23:46:16 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Tue Nov  1 20:35:04 2005
@@ -321,6 +321,14 @@
 /* todo:
  * case ISD::DYNAMIC_STACKALLOC:
 */
+  case ISD::ConstantFP: {
+if (cast(N)->isExactlyValue(+0.0))
+  return CurDAG->getRegister(IA64::F0, MVT::f64); // load 0.0
+else if (cast(N)->isExactlyValue(+1.0))
+  return CurDAG->getRegister(IA64::F1, MVT::f64); // load 1.0
+else
+  assert(0 && "Unexpected FP constant!");
+  }
 
   case ISD::FrameIndex: { // TODO: reduce creepyness
 int FI = cast(N)->getIndex();


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.1 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.2
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.1   Fri Oct 28 12:46:36 2005
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Tue Nov  1 20:35:04 2005
@@ -80,9 +80,6 @@
 
   addLegalFPImmediate(+0.0);
   addLegalFPImmediate(+1.0);
-  addLegalFPImmediate(-0.0);
-  addLegalFPImmediate(-1.0);
-
 }
 
 /// isFloatingPointZero - Return true if this is 0.0 or -0.0.



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-10-31 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.3 -> 1.4
---
Log message:

FORTRAN!!! :( and other similarly unfortunate things mean that on ia64
one sometimes needs to pass FP args in both FP *and* integer registers.



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

 IA64ISelDAGToDAG.cpp |   20 
 1 files changed, 20 insertions(+)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.3 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.4
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.3   Sat Oct 29 11:08:30 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Mon Oct 31 23:46:16 2005
@@ -208,7 +208,13 @@
 CallOpcode = IA64::BRCALL_INDIRECT;
   }
  
+  // see section 8.5.8 of "Itanium Software Conventions and
+  // Runtime Architecture Guide to see some examples of what's going
+  // on here. (in short: int args get mapped 1:1 'slot-wise' to out0->out7,
+  // while FP args get mapped to F8->F15 as needed)
+  
   // TODO: support in-memory arguments
+ 
   unsigned used_FPArgs=0; // how many FP args have been used so far?
 
   unsigned intArgs[] = {IA64::out0, IA64::out1, IA64::out2, IA64::out3,
@@ -236,6 +242,20 @@
   Chain = CurDAG->getCopyToReg(Chain, DestReg, Val, InFlag);
   InFlag = Chain.getValue(1);
   CallOperands.push_back(CurDAG->getRegister(DestReg, RegTy));
+  // some functions (e.g. printf) want floating point arguments
+  // *also* passed as in-memory representations in integer registers
+  // this is FORTRAN legacy junk which we don't _always_ need
+  // to do, but to be on the safe side, we do. 
+  if(MVT::isFloatingPoint(N->getOperand(i).getValueType())) {
+assert((i-2) < 8 && "FP args alone would fit, but no int regs left");
+   DestReg = intArgs[i-2]; // this FP arg goes in an int reg
+// GETFD takes an FP reg and writes a GP reg   
+   Chain = CurDAG->getTargetNode(IA64::GETFD, MVT::i64, Val, InFlag);
+// FIXME: this next line is a bit unfortunate 
+   Chain = CurDAG->getCopyToReg(Chain, DestReg, Chain, InFlag); 
+InFlag = Chain.getValue(1);
+CallOperands.push_back(CurDAG->getRegister(DestReg, MVT::i64));
+  }
 }
   }
   



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


[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp IA64InstrInfo.td

2005-10-29 Thread Duraid Madina


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.2 -> 1.3
IA64InstrInfo.td updated: 1.17 -> 1.18
---
Log message:

add some FP stuff, some mix.* stuff, and constant pool support to the
DAG instruction selector, which should be destroyed one day (in the pattern
isel also) since ia64 can pack any constant in the instruction stream



---
Diffs of the changes:  (+131 -61)

 IA64ISelDAGToDAG.cpp |7 +
 IA64InstrInfo.td |  185 ++-
 2 files changed, 131 insertions(+), 61 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.2 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.3
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.2   Fri Oct 28 13:26:52 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Sat Oct 29 11:08:30 2005
@@ -313,6 +313,13 @@
 CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
 
+  case ISD::ConstantPool: {
+Constant *C = cast(N)->get();
+SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64);
+return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ?
+ CurDAG->getRegister(IA64::r1, MVT::i64), CPI);
+  }
+
   case ISD::GlobalAddress: {
 GlobalValue *GV = cast(N)->getGlobal();
 SDOperand GA = CurDAG->getTargetGlobalAddress(GV, MVT::i64);


Index: llvm/lib/Target/IA64/IA64InstrInfo.td
diff -u llvm/lib/Target/IA64/IA64InstrInfo.td:1.17 
llvm/lib/Target/IA64/IA64InstrInfo.td:1.18
--- llvm/lib/Target/IA64/IA64InstrInfo.td:1.17  Fri Oct 28 23:13:40 2005
+++ llvm/lib/Target/IA64/IA64InstrInfo.td   Sat Oct 29 11:08:30 2005
@@ -45,10 +45,33 @@
 def is32ones : PatLeaf<(i64 imm), [{
   // is32ones predicate - True if the immediate is 0x 
   // Used to create ZXT4s appropriately 
-  int64_t v = (int64_t)N->getValue();
+  uint64_t v = (uint64_t)N->getValue();
   return (v == 0xLL);
 }]>;
 
+// isMIXable predicates - True if the immediate is
+// 0xFF00FF00FF00FF00, 0x00FF00FF00FF00FF
+// etc, through 0x
+// Used to test for the suitability of mix* 
+def isMIX1Lable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0xFF00FF00FF00FF00LL);
+}]>;
+def isMIX1Rable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0x00FF00FF00FF00FFLL);
+}]>;
+def isMIX2Lable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0xLL);
+}]>;
+def isMIX2Rable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0xLL);
+}]>;
+def isMIX4Lable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0xLL);
+}]>;
+def isMIX4Rable: PatLeaf<(i64 imm), [{
+  return((uint64_t)N->getValue()==0xLL);
+}]>;
+
 def isSHLADDimm: PatLeaf<(i64 imm), [{
   // isSHLADDimm predicate - True if the immediate is exactly 1, 2, 3 or 4
   // - 0 is *not* okay.
@@ -83,6 +106,37 @@
 def ZXT4 : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src), "zxt4 $dst = $src;;",
[(set GR:$dst, (and GR:$src, is32ones))]>;
 
+// fixme: shrs vs shru?
+def MIX1L : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix1.l $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and GR:$src1, isMIX1Lable),
+(and (srl GR:$src2, 8), isMIX1Lable)))]>;
+
+def MIX2L : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix2.l $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and GR:$src1, isMIX2Lable),
+(and (srl GR:$src2, 16), isMIX2Lable)))]>;
+
+def MIX4L : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix4.l $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and GR:$src1, isMIX4Lable),
+(and (srl GR:$src2, 32), isMIX4Lable)))]>;
+
+def MIX1R : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix1.r $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and (shl GR:$src1, 8), isMIX1Rable),
+(and GR:$src2, isMIX1Rable)))]>;
+
+def MIX2R : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix2.r $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and (shl GR:$src1, 16), isMIX2Rable),
+(and GR:$src2, isMIX2Rable)))]>;
+
+def MIX4R : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
+  "mix4.r $dst = $src1, $src2;;",
+ [(set GR:$dst, (or (and (shl GR:$src1, 32), isMIX4Rable),
+(and GR:$src2, isMIX4Rable)))]>;
+
 def ADD  : AForm_DAG<0x03, 0x0b, (ops GR:$dst, GR:$src1, GR:$src2),
"add $dst = $src1, $src2;;",
   [(set GR:$dst, (add GR:$src1, GR:$src2))]>;
@@ -122,10 +176,20 @@
 def XMALD : AForm_DAG<0x03, 0x0b, (ops FP:$dst, FP:$src1, FP:$src2, FP:$src3),
   "xma.l $dst = $src1, $src2, $src3;;",
   []>;
+def XMAHD : AForm_DAG<0x03, 0x0b, (ops FP:$dst, FP:$src1, FP:$src2, FP:$src3),
+  "xma.h $dst = $src1, $s

[llvm-commits] CVS: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp

2005-10-28 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelDAGToDAG.cpp updated: 1.1 -> 1.2
---
Log message:

These are autogenerated


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

 IA64ISelDAGToDAG.cpp |   33 -
 1 files changed, 33 deletions(-)


Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp
diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.1 
llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.2
--- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.1   Fri Oct 28 12:46:36 2005
+++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp   Fri Oct 28 13:26:52 2005
@@ -313,39 +313,6 @@
 CurDAG->getTargetFrameIndex(FI, MVT::i64));
   }
 
-  case ISD::TokenFactor: {
-SDOperand New;
-if (N->getNumOperands() == 2) {
-  SDOperand Op0 = Select(N->getOperand(0));
-  SDOperand Op1 = Select(N->getOperand(1));
-  New = CurDAG->getNode(ISD::TokenFactor, MVT::Other, Op0, Op1);
-} else {
-  std::vector Ops;
-  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i)
-Ops.push_back(Select(N->getOperand(i)));
-  New = CurDAG->getNode(ISD::TokenFactor, MVT::Other, Ops);
-}
-
-CodeGenMap[Op] = New;
-return New;
-  }
-  case ISD::CopyFromReg: {
-SDOperand Chain = Select(N->getOperand(0));
-if (Chain == N->getOperand(0)) return Op; // No change
-SDOperand New = CurDAG->getCopyFromReg(Chain,
- cast(N->getOperand(1))->getReg(), N->getValueType(0));
-return New.getValue(Op.ResNo);
-  }
-  case ISD::CopyToReg: {
-SDOperand Chain = Select(N->getOperand(0));
-SDOperand Reg = N->getOperand(1);
-SDOperand Val = Select(N->getOperand(2));
-SDOperand New = CurDAG->getNode(ISD::CopyToReg, MVT::Other,
-Chain, Reg, Val);
-CodeGenMap[Op] = New;
-return New;
-  }
-
   case ISD::GlobalAddress: {
 GlobalValue *GV = cast(N)->getGlobal();
 SDOperand GA = CurDAG->getTargetGlobalAddress(GV, MVT::i64);



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