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

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

SelectionDAGISel.cpp updated: 1.95 -> 1.96
---
Log message:

Fix CodeGen/X86/shift-folding.ll:test3 on X86


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

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


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.95 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.95 Tue Nov  8 
23:03:03 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Nov  9 10:50:40 2005
@@ -641,7 +641,7 @@
   if (isPowerOf2_64(ElementSize)) {
 unsigned Amt = Log2_64(ElementSize);
 IdxN = DAG.getNode(ISD::SHL, N.getValueType(), IdxN,
-   getIntPtrConstant(Amt));
+   DAG.getConstant(Amt, TLI.getShiftAmountTy()));
 N = DAG.getNode(ISD::ADD, N.getValueType(), N, IdxN);
 continue;
   }



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


[llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c 2002-08-02-CastTest.c 2003-04-22-Switch.c 2003-05-02-DependentPHI.c 2003-07-08-BitOpsTest.c printargs.c StructModifyTest

2005-11-09 Thread Andrew Lenharth


Changes in directory llvm-test/SingleSource/UnitTests:

2002-05-02-ArgumentTest.c updated: 1.1 -> 1.2
2002-08-02-CastTest.c updated: 1.1 -> 1.2
2003-04-22-Switch.c updated: 1.2 -> 1.3
2003-05-02-DependentPHI.c updated: 1.1 -> 1.2
2003-07-08-BitOpsTest.c updated: 1.1 -> 1.2
printargs.c updated: 1.2 -> 1.3
StructModifyTest.c updated: 1.1 -> 1.2
---
Log message:

These warnings were bugging me

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

 2002-05-02-ArgumentTest.c |3 ++-
 2002-08-02-CastTest.c |3 ++-
 2003-04-22-Switch.c   |3 ++-
 2003-05-02-DependentPHI.c |3 ++-
 2003-07-08-BitOpsTest.c   |3 ++-
 StructModifyTest.c|3 ++-
 printargs.c   |3 ++-
 7 files changed, 14 insertions(+), 7 deletions(-)


Index: llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c
diff -u llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.1 
llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.2
--- llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.1  Thu May 
 2 12:43:17 2002
+++ llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c  Wed Nov  9 
12:08:08 2005
@@ -3,7 +3,8 @@
printf("%d, %f, %d, %lld, %d, %f\n", s, X, C, LL, I, D);
 }
 
-void main() {
+int main() {
testfunc(12, 1.245f, 'x', 123456677890LL, -10, 45e14);
+return 0;
 }
 


Index: llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c
diff -u llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.1 
llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.2
--- llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.1  Fri Aug  2 
13:44:13 2002
+++ llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c  Wed Nov  9 
12:08:08 2005
@@ -4,7 +4,8 @@
   return (unsigned char)X;
 }
 
-void main() {
+int main() {
printf("%d\n", test(123456));
+return 0;
 }
 


Index: llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c
diff -u llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.2 
llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.3
--- llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.2Wed Apr 23 
11:18:37 2003
+++ llvm-test/SingleSource/UnitTests/2003-04-22-Switch.cWed Nov  9 
12:08:08 2005
@@ -17,8 +17,9 @@
 }
 
 
-void main() {
+int main() {
   unsigned i;
   for (i = 0; i < 10; ++i)
 func(i);
+  return 0;
 }


Index: llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c
diff -u llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.1 
llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.2
--- llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.1  Sat May 
 3 01:58:11 2003
+++ llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c  Wed Nov  9 
12:08:08 2005
@@ -13,10 +13,11 @@
 List Node5 = {&Node4, 0};
 
 
-void main() {
+int main() {
 List *PrevL, *CurL;
 for (PrevL = 0, CurL = &Node5; CurL; PrevL = CurL, CurL = CurL->Next) {
printf("%d %d\n", CurL->Data, PrevL ? PrevL->Data : -1);
 }
+return 0;
 }
 


Index: llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c
diff -u llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.1 
llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.2
--- llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.1Tue Jul 
29 15:24:56 2003
+++ llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.cWed Nov  9 
12:08:08 2005
@@ -10,6 +10,7 @@
   printf("%d %d %d %d %d\n", bxor, bor, band, bandnot, bornot);
 }
 
-void main() {
+int main() {
   test(7, 8, -5, 5);
+  return 0;
 }


Index: llvm-test/SingleSource/UnitTests/printargs.c
diff -u llvm-test/SingleSource/UnitTests/printargs.c:1.2 
llvm-test/SingleSource/UnitTests/printargs.c:1.3
--- llvm-test/SingleSource/UnitTests/printargs.c:1.2Sun Mar 17 20:59:00 2002
+++ llvm-test/SingleSource/UnitTests/printargs.cWed Nov  9 12:08:08 2005
@@ -2,9 +2,10 @@
 
 int puts(const char *);
 
-void main(int argc, char **argv) {
+int main(int argc, char **argv) {
int i;
printf("#Args = %d. They are:\n", argc-1);
for (i = 1; i < argc; ++i)
puts(argv[i]);
+return 0;
 }


Index: llvm-test/SingleSource/UnitTests/StructModifyTest.c
diff -u llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.1 
llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.2
--- llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.1 Thu Jan 16 
16:58:09 2003
+++ llvm-test/SingleSource/UnitTests/StructModifyTest.c Wed Nov  9 12:08:08 2005
@@ -13,7 +13,7 @@
   printf("%d, %f, %f, %lld\n", V->w, V->x, V->y, V->z);
 }
 
-void main() {
+int main() {
   S2Ty E;
   E.A.w = 1;
   E.A.x = 123.42f;
@@ -26,5 +26,6 @@
 
   printS1(&E.A);
   printS1(&E.B);
+  return 0;
 }
 



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


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

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen:

RegAllocLocal.cpp updated: 1.75 -> 1.76
---
Log message:

Nuke noop copies.


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

 RegAllocLocal.cpp |   15 +++
 1 files changed, 11 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/RegAllocLocal.cpp
diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.75 
llvm/lib/CodeGen/RegAllocLocal.cpp:1.76
--- llvm/lib/CodeGen/RegAllocLocal.cpp:1.75 Tue Nov  8 23:28:45 2005
+++ llvm/lib/CodeGen/RegAllocLocal.cpp  Wed Nov  9 12:22:42 2005
@@ -488,9 +488,11 @@
 
 void RA::AllocateBasicBlock(MachineBasicBlock &MBB) {
   // loop over each instruction
-  MachineBasicBlock::iterator MI = MBB.begin();
-  for (; MI != MBB.end(); ++MI) {
-const TargetInstrDescriptor &TID = 
TM->getInstrInfo()->get(MI->getOpcode());
+  MachineBasicBlock::iterator MII = MBB.begin();
+  const TargetInstrInfo &TII = *TM->getInstrInfo();
+  while (MII != MBB.end()) {
+MachineInstr *MI = MII++;
+const TargetInstrDescriptor &TID = TII.get(MI->getOpcode());
 DEBUG(std::cerr << "\nStarting RegAlloc of: " << *MI;
   std::cerr << "  Regs have values: ";
   for (unsigned i = 0; i != RegInfo->getNumRegs(); ++i)
@@ -621,9 +623,14 @@
 removePhysReg(PhysReg);
   }
 }
+
+// Finally, if this is a noop copy instruction, zap it.
+unsigned SrcReg, DstReg;
+if (TII.isMoveInstr(*MI, SrcReg, DstReg) && SrcReg == DstReg)
+  MBB.erase(MI);
   }
 
-  MI = MBB.getFirstTerminator();
+  MachineBasicBlock::iterator MI = MBB.getFirstTerminator();
 
   // Spill all physical registers holding virtual registers now.
   for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i)



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


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

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.204 -> 1.205
---
Log message:

Handle the trivial (but common) two-op case more efficiently


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

 LegalizeDAG.cpp |   29 ++---
 1 files changed, 18 insertions(+), 11 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.204 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.204 Tue Nov  8 17:32:44 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Nov  9 12:48:57 2005
@@ -633,19 +633,26 @@
 }
 break;
   }
-  case ISD::TokenFactor: {
-std::vector Ops;
-bool Changed = false;
-// Legalize the operands
-for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
-  SDOperand Op = Node->getOperand(i);
-  Ops.push_back(LegalizeOp(Op));
-  Changed |= Ops[i] != Op;
+  case ISD::TokenFactor:
+if (Node->getNumOperands() == 2) {
+  bool Changed = false;
+  SDOperand Op0 = LegalizeOp(Node->getOperand(0));
+  SDOperand Op1 = LegalizeOp(Node->getOperand(1));
+  if (Op0 != Node->getOperand(0) || Op1 != Node->getOperand(1))
+Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Op0, Op1);
+} else {
+  std::vector Ops;
+  bool Changed = false;
+  // Legalize the operands.
+  for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
+SDOperand Op = Node->getOperand(i);
+Ops.push_back(LegalizeOp(Op));
+Changed |= Ops[i] != Op;
+  }
+  if (Changed)
+Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops);
 }
-if (Changed)
-  Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops);
 break;
-  }
 
   case ISD::CALLSEQ_START:
   case ISD::CALLSEQ_END:



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


[llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaISelLowering.cpp AlphaISelPattern.cpp AlphaInstrFormats.td AlphaInstrInfo.cpp AlphaInstrInfo.td AlphaRegisterInfo.cpp AlphaRegisterInfo.h AlphaRegisterIn

2005-11-09 Thread Andrew Lenharth


Changes in directory llvm/lib/Target/Alpha:

AlphaISelLowering.cpp updated: 1.7 -> 1.8
AlphaISelPattern.cpp updated: 1.177 -> 1.178
AlphaInstrFormats.td updated: 1.11 -> 1.12
AlphaInstrInfo.cpp updated: 1.5 -> 1.6
AlphaInstrInfo.td updated: 1.70 -> 1.71
AlphaRegisterInfo.cpp updated: 1.29 -> 1.30
AlphaRegisterInfo.h updated: 1.7 -> 1.8
AlphaRegisterInfo.td updated: 1.12 -> 1.13
---
Log message:

whatever.  Intermediate patch to see what breaks.  Seems ok.

---
Diffs of the changes:  (+277 -136)

 AlphaISelLowering.cpp |4 -
 AlphaISelPattern.cpp  |   59 +++
 AlphaInstrFormats.td  |   32 ++--
 AlphaInstrInfo.cpp|4 -
 AlphaInstrInfo.td |  187 ++
 AlphaRegisterInfo.cpp |   69 ++
 AlphaRegisterInfo.h   |3 
 AlphaRegisterInfo.td  |   55 --
 8 files changed, 277 insertions(+), 136 deletions(-)


Index: llvm/lib/Target/Alpha/AlphaISelLowering.cpp
diff -u llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.7 
llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.8
--- llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.7 Thu Oct  6 11:54:29 2005
+++ llvm/lib/Target/Alpha/AlphaISelLowering.cpp Wed Nov  9 13:17:08 2005
@@ -50,8 +50,8 @@
   setSetCCResultContents(ZeroOrOneSetCCResult);
   
   addRegisterClass(MVT::i64, Alpha::GPRCRegisterClass);
-  addRegisterClass(MVT::f64, Alpha::FPRCRegisterClass);
-  addRegisterClass(MVT::f32, Alpha::FPRCRegisterClass);
+  addRegisterClass(MVT::f64, Alpha::F8RCRegisterClass);
+  addRegisterClass(MVT::f32, Alpha::F4RCRegisterClass);
   
   setOperationAction(ISD::BRCONDTWOWAY, MVT::Other, Expand);
   setOperationAction(ISD::BRTWOWAY_CC,  MVT::Other, Expand);


Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp
diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.177 
llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.178
--- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.177Sat Oct 29 11:45:02 2005
+++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp  Wed Nov  9 13:17:08 2005
@@ -786,8 +786,11 @@
 .addReg(argvregs[i]);
   break;
 case MVT::f32:
+  BuildMI(BB, Alpha::CPYSS, 2, args_float[i]).addReg(argvregs[i])
+.addReg(argvregs[i]);
+  break;
 case MVT::f64:
-  BuildMI(BB, Alpha::CPYS, 2, args_float[i]).addReg(argvregs[i])
+  BuildMI(BB, Alpha::CPYST, 2, args_float[i]).addReg(argvregs[i])
 .addReg(argvregs[i]);
   break;
 }
@@ -843,8 +846,10 @@
 BuildMI(BB, Alpha::BIS, 2, Result).addReg(Alpha::R0).addReg(Alpha::R0);
 break;
   case MVT::f32:
-  case MVT::f64:
-BuildMI(BB, Alpha::CPYS, 2, 
Result).addReg(Alpha::F0).addReg(Alpha::F0);
+BuildMI(BB, Alpha::CPYSS, 2, 
Result).addReg(Alpha::F0).addReg(Alpha::F0);
+break;
+   case MVT::f64:
+BuildMI(BB, Alpha::CPYST, 2, 
Result).addReg(Alpha::F0).addReg(Alpha::F0);
 break;
   }
   return Result+N.ResNo;
@@ -1039,10 +1044,17 @@
   Select(Chain);
   unsigned r = cast(Node->getOperand(1))->getReg();
   //std::cerr << "CopyFromReg " << Result << " = " << r << "\n";
-  if (MVT::isFloatingPoint(N.getValue(0).getValueType()))
-BuildMI(BB, Alpha::CPYS, 2, Result).addReg(r).addReg(r);
-  else
+  switch(N.getValue(0).getValueType()) {
+  case MVT::f32:
+BuildMI(BB, Alpha::CPYSS, 2, Result).addReg(r).addReg(r);
+break;
+  case MVT::f64:
+BuildMI(BB, Alpha::CPYST, 2, Result).addReg(r).addReg(r);
+break;
+  default:
 BuildMI(BB, Alpha::BIS, 2, Result).addReg(r).addReg(r);
+break;
+  }
   return Result;
 }
 
@@ -1488,16 +1500,19 @@
 if(ISD::FABS == N.getOperand(0).getOpcode())
   {
 Tmp1 = SelectExpr(N.getOperand(0).getOperand(0));
-BuildMI(BB, Alpha::CPYSN, 2, Result).addReg(Alpha::F31).addReg(Tmp1);
+BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYSNT : Alpha::CPYSNS, 
+2, Result).addReg(Alpha::F31).addReg(Tmp1);
   } else {
 Tmp1 = SelectExpr(N.getOperand(0));
-BuildMI(BB, Alpha::CPYSN, 2, Result).addReg(Tmp1).addReg(Tmp1);
+BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYSNT : Alpha::CPYSNS
+, 2, Result).addReg(Tmp1).addReg(Tmp1);
   }
 return Result;
 
   case ISD::FABS:
 Tmp1 = SelectExpr(N.getOperand(0));
-BuildMI(BB, Alpha::CPYS, 2, Result).addReg(Alpha::F31).addReg(Tmp1);
+BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYST : Alpha::CPYSS, 2, Result)
+  .addReg(Alpha::F31).addReg(Tmp1);
 return Result;
 
   case ISD::FP_ROUND:
@@ -1519,10 +1534,12 @@
   case ISD::ConstantFP:
 if (ConstantFPSDNode *CN = dyn_cast(N)) {
   if (CN->isExactlyValue(+0.0)) {
-BuildMI(BB, Alpha::CPYS, 2, Result).addReg(Alpha::F31)
+BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYST : Alpha::CPYSS
+, 2, Result).addReg(Alpha::F31)
   .addReg(Alpha::F

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

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

SelectionDAGISel.cpp updated: 1.96 -> 1.97
---
Log message:

Refactor intrinsic lowering stuff out of visitCall


---
Diffs of the changes:  (+107 -98)

 SelectionDAGISel.cpp |  205 ++-
 1 files changed, 107 insertions(+), 98 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.97
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96 Wed Nov  9 
10:50:40 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Wed Nov  9 13:44:01 2005
@@ -46,7 +46,6 @@
 static const bool ViewDAGs = 0;
 #endif
 
-
 namespace llvm {
   
//======//
   /// FunctionLoweringInfo - This contains information that is global to a
@@ -405,6 +404,7 @@
   void visitStore(StoreInst &I);
   void visitPHI(PHINode &I) { } // PHI nodes are handled specially.
   void visitCall(CallInst &I);
+  const char *visitIntrinsicCall(CallInst &I, unsigned Intrinsic);
 
   void visitVAStart(CallInst &I);
   void visitVAArg(VAArgInst &I);
@@ -737,123 +737,133 @@
   DAG.getSrcValue(I.getOperand(1;
 }
 
+/// visitIntrinsicCall - Lower the call to the specified intrinsic function.  
If
+/// we want to emit this as a call to a named external function, return the 
name
+/// otherwise lower it and return null.
+const char *
+SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
+  switch (Intrinsic) {
+  case Intrinsic::vastart:  visitVAStart(I); return 0;
+  case Intrinsic::vaend:visitVAEnd(I); return 0;
+  case Intrinsic::vacopy:   visitVACopy(I); return 0;
+  case Intrinsic::returnaddress: visitFrameReturnAddress(I, false); return 0;
+  case Intrinsic::frameaddress:  visitFrameReturnAddress(I, true); return 0;
+  case Intrinsic::setjmp:
+return "_setjmp"+!TLI.usesUnderscoreSetJmpLongJmp();
+break;
+  case Intrinsic::longjmp:
+return "_longjmp"+!TLI.usesUnderscoreSetJmpLongJmp();
+break;
+  case Intrinsic::memcpy:  visitMemIntrinsic(I, ISD::MEMCPY); return 0;
+  case Intrinsic::memset:  visitMemIntrinsic(I, ISD::MEMSET); return 0;
+  case Intrinsic::memmove: visitMemIntrinsic(I, ISD::MEMMOVE); return 0;
+
+  case Intrinsic::readport:
+  case Intrinsic::readio: {
+std::vector VTs;
+VTs.push_back(TLI.getValueType(I.getType()));
+VTs.push_back(MVT::Other);
+std::vector Ops;
+Ops.push_back(getRoot());
+Ops.push_back(getValue(I.getOperand(1)));
+SDOperand Tmp = DAG.getNode(Intrinsic == Intrinsic::readport ?
+ISD::READPORT : ISD::READIO, VTs, Ops);
+
+setValue(&I, Tmp);
+DAG.setRoot(Tmp.getValue(1));
+return 0;
+  }
+  case Intrinsic::writeport:
+  case Intrinsic::writeio:
+DAG.setRoot(DAG.getNode(Intrinsic == Intrinsic::writeport ?
+ISD::WRITEPORT : ISD::WRITEIO, MVT::Other,
+getRoot(), getValue(I.getOperand(1)),
+getValue(I.getOperand(2;
+return 0;
+  case Intrinsic::dbg_stoppoint:
+  case Intrinsic::dbg_region_start:
+  case Intrinsic::dbg_region_end:
+  case Intrinsic::dbg_func_start:
+  case Intrinsic::dbg_declare:
+if (I.getType() != Type::VoidTy)
+  setValue(&I, DAG.getNode(ISD::UNDEF, TLI.getValueType(I.getType(;
+return 0;
+
+  case Intrinsic::isunordered:
+setValue(&I, DAG.getSetCC(MVT::i1,getValue(I.getOperand(1)),
+  getValue(I.getOperand(2)), ISD::SETUO));
+return 0;
+
+  case Intrinsic::sqrt:
+setValue(&I, DAG.getNode(ISD::FSQRT,
+ getValue(I.getOperand(1)).getValueType(),
+ getValue(I.getOperand(1;
+return 0;
+  case Intrinsic::pcmarker: {
+SDOperand Tmp = getValue(I.getOperand(1));
+DAG.setRoot(DAG.getNode(ISD::PCMARKER, MVT::Other, getRoot(), Tmp));
+return 0;
+  }
+  case Intrinsic::cttz:
+setValue(&I, DAG.getNode(ISD::CTTZ,
+ getValue(I.getOperand(1)).getValueType(),
+ getValue(I.getOperand(1;
+return 0;
+  case Intrinsic::ctlz:
+setValue(&I, DAG.getNode(ISD::CTLZ,
+ getValue(I.getOperand(1)).getValueType(),
+ getValue(I.getOperand(1;
+return 0;
+  case Intrinsic::ctpop:
+setValue(&I, DAG.getNode(ISD::CTPOP,
+ getValue(I.getOperand(1)).getValueType(),
+ getValue(I.getOperand(1;
+return 0;
+  default:
+std::cerr << I;
+assert(0 && "This intrinsic is not implemented yet!");
+return 0;
+  }
+}
+
+
 void SelectionDAGLowering::visitCall(CallInst &I) {
   const char *RenameFn = 0;
-  SDOperand Tmp;
-  if (Function *F = I.getCalledFunction())
+

[llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAG.h SelectionDAGNodes.h

2005-11-09 Thread Chris Lattner


Changes in directory llvm/include/llvm/CodeGen:

SelectionDAG.h updated: 1.67 -> 1.68
SelectionDAGNodes.h updated: 1.72 -> 1.73
---
Log message:

Switch the allnodes list from a vector of pointers to an ilist of nodes.
This eliminates the vector, allows constant time removal of a node from
a graph, and makes iteration over the all nodes list stable when adding
nodes to the graph.



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

 SelectionDAG.h  |   20 
 SelectionDAGNodes.h |   46 --
 2 files changed, 52 insertions(+), 14 deletions(-)


Index: llvm/include/llvm/CodeGen/SelectionDAG.h
diff -u llvm/include/llvm/CodeGen/SelectionDAG.h:1.67 
llvm/include/llvm/CodeGen/SelectionDAG.h:1.68
--- llvm/include/llvm/CodeGen/SelectionDAG.h:1.67   Tue Nov  8 17:30:11 2005
+++ llvm/include/llvm/CodeGen/SelectionDAG.hWed Nov  9 17:46:43 2005
@@ -16,6 +16,8 @@
 #define LLVM_CODEGEN_SELECTIONDAG_H
 
 #include "llvm/CodeGen/SelectionDAGNodes.h"
+#include "llvm/ADT/ilist"
+
 #include 
 #include 
 #include  // FIXME remove eventually, turning map into const char* map.
@@ -43,8 +45,8 @@
   // Root - The root of the entire DAG.  EntryNode - The starting token.
   SDOperand Root, EntryNode;
 
-  // AllNodes - All of the nodes in the DAG
-  std::vector AllNodes;
+  // AllNodes - A linked list of nodes in the current DAG.
+  ilist AllNodes;
 
   // ValueNodes - track SrcValue nodes
   std::map, SDNode*> ValueNodes;
@@ -64,11 +66,13 @@
   void viewGraph();
 
 
-  typedef std::vector::const_iterator allnodes_iterator;
-  allnodes_iterator allnodes_begin() const { return AllNodes.begin(); }
-  allnodes_iterator allnodes_end() const { return AllNodes.end(); }
-  unsigned allnodes_size() const { return AllNodes.size(); }
-
+  typedef ilist::const_iterator allnodes_const_iterator;
+  allnodes_const_iterator allnodes_begin() const { return AllNodes.begin(); }
+  allnodes_const_iterator allnodes_end() const { return AllNodes.end(); }
+  typedef ilist::iterator allnodes_iterator;
+  allnodes_iterator allnodes_begin() { return AllNodes.begin(); }
+  allnodes_iterator allnodes_end() { return AllNodes.end(); }
+  
   /// getRoot - Return the root tag of the SelectionDAG.
   ///
   const SDOperand &getRoot() const { return Root; }
@@ -413,6 +417,6 @@
   }
 };
 
-}
+}  // end namespace llvm
 
 #endif


Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h
diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.72 
llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.73
--- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.72  Tue Nov  8 17:30:11 2005
+++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h   Wed Nov  9 17:46:43 2005
@@ -22,7 +22,6 @@
 #include "llvm/CodeGen/ValueTypes.h"
 #include "llvm/Value.h"
 #include "llvm/ADT/GraphTraits.h"
-#include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/iterator"
 #include "llvm/Support/DataTypes.h"
 #include 
@@ -35,6 +34,9 @@
 class MachineBasicBlock;
 class SDNode;
 template  struct simplify_type;
+template  struct ilist_traits;
+template class iplist;
+template class ilist_iterator;
 
 /// ISD namespace - This namespace contains an enum which represents all of the
 /// SelectionDAG node types and value types.
@@ -501,12 +503,20 @@
 
   /// NumOperands/NumValues - The number of entries in the Operand/Value list.
   unsigned short NumOperands, NumValues;
+  
+  /// Prev/Next pointers - These pointers form the linked list of of the
+  /// AllNodes list in the current DAG.
+  SDNode *Prev, *Next;
+  friend struct ilist_traits;
 
   /// Uses - These are all of the SDNode's that use a value produced by this
   /// node.
   std::vector Uses;
 public:
-
+  virtual ~SDNode() {
+assert(NumOperands == 0 && "Operand list not cleared before deletion");
+  }
+  
   
//======//
   //  Accessors
   //
@@ -586,6 +596,7 @@
 OperandList = 0; NumOperands = 0;
 ValueList = getValueTypeList(VT);
 NumValues = 1;
+Prev = 0; Next = 0;
   }
   SDNode(unsigned NT, SDOperand Op)
 : NodeType(NT), NodeDepth(Op.Val->getNodeDepth()+1) {
@@ -595,6 +606,7 @@
 Op.Val->Uses.push_back(this);
 ValueList = 0;
 NumValues = 0;
+Prev = 0; Next = 0;
   }
   SDNode(unsigned NT, SDOperand N1, SDOperand N2)
 : NodeType(NT) {
@@ -609,6 +621,7 @@
 N1.Val->Uses.push_back(this); N2.Val->Uses.push_back(this);
 ValueList = 0;
 NumValues = 0;
+Prev = 0; Next = 0;
   }
   SDNode(unsigned NT, SDOperand N1, SDOperand N2, SDOperand N3)
 : NodeType(NT) {
@@ -629,6 +642,7 @@
 N3.Val->Uses.push_back(this);
 ValueList = 0;
 NumValues = 0;
+Prev = 0; Next = 0;
   }
   SDNode(unsigned NT, SDOperand N1, SDOperand N2, SDOperand N3, SDOperand N4)
 : NodeType(NT) {
@@ -652,6 +666,7 @@
 N3.Val->Uses.push_back(this); N4.Val->Uses.push_back(this);
 ValueList = 0;
 NumValues = 0;
+Prev = 0; Next = 0;
   }
   SDNode(unsigned Opc, const std::ve

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

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.205 -> 1.206
DAGCombiner.cpp updated: 1.60 -> 1.61
ScheduleDAG.cpp updated: 1.44 -> 1.45
SelectionDAG.cpp updated: 1.210 -> 1.211
---
Log message:

Switch the allnodes list from a vector of pointers to an ilist of nodes.This 
eliminates the vector, allows constant time removal of a node froma graph, and 
makes iteration over the all nodes list stable when adding 
nodes to the graph.


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

 DAGCombiner.cpp  |4 +++-
 LegalizeDAG.cpp  |   12 ++--
 ScheduleDAG.cpp  |   19 ---
 SelectionDAG.cpp |   48 
 4 files changed, 37 insertions(+), 46 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.206
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205 Wed Nov  9 12:48:57 2005
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Wed Nov  9 17:47:37 2005
@@ -394,7 +394,6 @@
   
   // Now that we have N in, add anything that uses it if all of their operands
   // are now done.
-  
   for (SDNode::use_iterator UI = N->use_begin(), E = N->use_end(); UI != 
E;++UI)
 ComputeTopDownOrdering(*UI, Order, Visited);
 }
@@ -409,19 +408,20 @@
   // node is only legalized after all of its operands are legalized.
   std::map Visited;
   std::vector Order;
-  Order.reserve(DAG.allnodes_end()-DAG.allnodes_begin());
   
   // Compute ordering from all of the leaves in the graphs, those (like the
   // entry node) that have no operands.
   for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
E = DAG.allnodes_end(); I != E; ++I) {
-if ((*I)->getNumOperands() == 0) {
-  Visited[*I] = 0 - 1U;
-  ComputeTopDownOrdering(*I, Order, Visited);
+if (I->getNumOperands() == 0) {
+  Visited[I] = 0 - 1U;
+  ComputeTopDownOrdering(I, Order, Visited);
 }
   }
   
-  assert(Order.size() == Visited.size() && Order.size() == 
DAG.allnodes_size()&&
+  assert(Order.size() == Visited.size() &&
+ Order.size() == 
+(unsigned)std::distance(DAG.allnodes_begin(), DAG.allnodes_end()) 
&&
  "Error: DAG is cyclic!");
   Visited.clear();
   


Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.60 
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.61
--- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.60  Wed Nov  2 12:42:59 2005
+++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp   Wed Nov  9 17:47:37 2005
@@ -514,7 +514,9 @@
   AfterLegalize = RunningAfterLegalize;
 
   // Add all the dag nodes to the worklist.
-  WorkList.insert(WorkList.end(), DAG.allnodes_begin(), DAG.allnodes_end());
+  for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
+   E = DAG.allnodes_end(); I != E; ++I)
+WorkList.push_back(I);
   
   // Create a dummy node (which is not added to allnodes), that adds a 
reference
   // to the root node, preventing it from being deleted, and tracking any


Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.44 
llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.45
--- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.44  Tue Nov  8 15:54:57 2005
+++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp   Wed Nov  9 17:47:37 2005
@@ -837,21 +837,18 @@
 void SimpleSched::PrepareNodeInfo() {
   // Allocate node information
   Info = new NodeInfo[NodeCount];
-  // Get base of all nodes table
-  SelectionDAG::allnodes_iterator AllNodes = DAG.allnodes_begin();
-  
-  // For each node being scheduled
-  for (unsigned i = 0, N = NodeCount; i < N; i++) {
-// Get next node from DAG all nodes table
-SDNode *Node = AllNodes[i];
+
+  unsigned i = 0;
+  for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
+   E = DAG.allnodes_end(); I != E; ++I, ++i) {
 // Fast reference to node schedule info
 NodeInfo* NI = &Info[i];
 // Set up map
-Map[Node] = NI;
+Map[I] = NI;
 // Set node
-NI->Node = Node;
+NI->Node = I;
 // Set pending visit count
-NI->setPending(Node->use_size());
+NI->setPending(I->use_size());
   }
 }
 
@@ -1235,7 +1232,7 @@
 ///
 void SimpleSched::Schedule() {
   // Number the nodes
-  NodeCount = DAG.allnodes_size();
+  NodeCount = std::distance(DAG.allnodes_begin(), DAG.allnodes_end());
   // Test to see if scheduling should occur
   bool ShouldSchedule = NodeCount > 3 && ScheduleStyle != noScheduling;
   // Set up minimum info for scheduling


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.210 
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.211
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.210Tue Nov  8 
17:30:28 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp  Wed Nov  9 17:47:3

[llvm-commits] CVS: llvm/lib/VMCore/Type.cpp

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

Type.cpp updated: 1.129 -> 1.130
---
Log message:

Force packed vectors to be a power of two in length.


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

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


Index: llvm/lib/VMCore/Type.cpp
diff -u llvm/lib/VMCore/Type.cpp:1.129 llvm/lib/VMCore/Type.cpp:1.130
--- llvm/lib/VMCore/Type.cpp:1.129  Wed Jul 27 01:12:34 2005
+++ llvm/lib/VMCore/Type.cppWed Nov  9 19:40:59 2005
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/SCCIterator.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/Support/MathExtras.h"
 #include 
 #include 
 using namespace llvm;
@@ -1005,6 +1006,7 @@
 
 PackedType *PackedType::get(const Type *ElementType, unsigned NumElements) {
   assert(ElementType && "Can't get packed of null types!");
+  assert(isPowerOf2_32(NumElements) && "Vector length should be a power of 
2!");
 
   PackedValType PVT(ElementType, NumElements);
   PackedType *PT = PackedTypes.get(PVT);



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


[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.cpp llvmAsmParser.y

2005-11-09 Thread Chris Lattner


Changes in directory llvm/lib/AsmParser:

llvmAsmParser.cpp updated: 1.22 -> 1.23
llvmAsmParser.y updated: 1.236 -> 1.237
---
Log message:

Force vectors to be a power of two in size


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

 llvmAsmParser.cpp |  332 +++---
 llvmAsmParser.y   |8 -
 2 files changed, 170 insertions(+), 170 deletions(-)


Index: llvm/lib/AsmParser/llvmAsmParser.cpp
diff -u llvm/lib/AsmParser/llvmAsmParser.cpp:1.22 
llvm/lib/AsmParser/llvmAsmParser.cpp:1.23
--- llvm/lib/AsmParser/llvmAsmParser.cpp:1.22   Sun Nov  6 00:46:53 2005
+++ llvm/lib/AsmParser/llvmAsmParser.cppWed Nov  9 19:42:43 2005
@@ -1,5 +1,5 @@
 
-/*  A Bison parser, made from 
/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y
+/*  A Bison parser, made from 
/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y
 by GNU Bison version 1.28  */
 
 #define YYBISON 1  /* Identify Bison output.  */
@@ -104,7 +104,7 @@
 #defineVAARG_old   347
 #defineVANEXT_old  348
 
-#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -963,7 +963,7 @@
 }
 
 
-#line 873 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 873 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 typedef union {
   llvm::Module   *ModuleVal;
   llvm::Function *FunctionVal;
@@ -2160,7 +2160,7 @@
   switch (yyn) {
 
 case 2:
-#line 991 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 991 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX) // Outside of my range!
 ThrowException("Value too large for type!");
@@ -2168,7 +2168,7 @@
 ;
 break;}
 case 4:
-#line 999 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 999 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX) // Outside of my range!
 ThrowException("Value too large for type!");
@@ -2176,55 +2176,55 @@
 ;
 break;}
 case 33:
-#line 1022 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1022 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
 yyval.StrVal = yyvsp[-1].StrVal;
   ;
 break;}
 case 34:
-#line 1025 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1025 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
 yyval.StrVal = 0;
   ;
 break;}
 case 35:
-#line 1029 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1029 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Linkage = GlobalValue::InternalLinkage; ;
 break;}
 case 36:
-#line 1030 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1030 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
 break;}
 case 37:
-#line 1031 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1031 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Linkage = GlobalValue::WeakLinkage; ;
 break;}
 case 38:
-#line 1032 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1032 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Linkage = GlobalValue::AppendingLinkage; ;
 break;}
 case 39:
-#line 1033 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1033 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
 break;}
 case 40:
-#line 1035 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1035 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.UIntVal = CallingConv::C; ;
 break;}
 case 41:
-#line 1036 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1036 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.UIntVal = CallingConv::C; ;
 break;}
 case 42:
-#line 1037 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1037 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.UIntVal = CallingConv::Fast; ;
 break;}
 case 43:
-#line 1038 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.UIntVal = CallingConv::Cold; ;
 break;}
 case 44:
-#line 1039 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1039 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
  ThrowException("Calling conv too large!");
@@ -2232,31 +2232,31 @@
  ;
 break;}
 case 45:
-#line 1047 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmP

[llvm-commits] CVS: llvm/docs/LangRef.html

2005-11-09 Thread Chris Lattner


Changes in directory llvm/docs:

LangRef.html updated: 1.114 -> 1.115
---
Log message:

Packed elements must be a power of two in size


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

 LangRef.html |5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)


Index: llvm/docs/LangRef.html
diff -u llvm/docs/LangRef.html:1.114 llvm/docs/LangRef.html:1.115
--- llvm/docs/LangRef.html:1.114Sun Nov  6 02:02:57 2005
+++ llvm/docs/LangRef.html  Wed Nov  9 19:44:22 2005
@@ -850,7 +850,8 @@
 of elements.  Packed types are used when multiple primitive data 
 are operated in parallel using a single instruction (SIMD). 
 A packed type requires a size (number of
-elements) and an underlying primitive data type.  Packed types are
+elements) and an underlying primitive data type.  Vectors must have a power
+of two length (1, 2, 4, 8, 16 ...).  Packed types are
 considered first class.
 
 Syntax:
@@ -3387,7 +3388,7 @@
 
   mailto:[EMAIL PROTECTED]">Chris Lattner
   http://llvm.cs.uiuc.edu";>The LLVM Compiler Infrastructure
-  Last modified: $Date: 2005/11/06 08:02:57 $
+  Last modified: $Date: 2005/11/10 01:44:22 $
 
 
 



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


[llvm-commits] CVS: llvm/lib/Transforms/Scalar/Reg2Mem.cpp

2005-11-09 Thread Andrew Lenharth


Changes in directory llvm/lib/Transforms/Scalar:

Reg2Mem.cpp added (r1.1)
---
Log message:

The pass everyone has been waiting for!
Reg2Mem

for fun you can opt -reg2mem -mem2reg



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

 Reg2Mem.cpp |   79 
 1 files changed, 79 insertions(+)


Index: llvm/lib/Transforms/Scalar/Reg2Mem.cpp
diff -c /dev/null llvm/lib/Transforms/Scalar/Reg2Mem.cpp:1.1
*** /dev/null   Wed Nov  9 19:58:48 2005
--- llvm/lib/Transforms/Scalar/Reg2Mem.cpp  Wed Nov  9 19:58:38 2005
***
*** 0 
--- 1,79 
+ //===- Reg2Mem.cpp - Convert registers to allocas 
-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for 
details.
+ //
+ 
//===--===//
+ //
+ // This file demotes all registers to memory references.  It is intented to be
+ // the inverse of PromoteMemoryToRegister.  By converting to loads, the only
+ // values live accross basic blocks are allocas and loads before phi nodes.
+ // It is intended that this should make CFG hacking much easier.
+ // To make later hacking easier, the entry block is split into two, such that
+ // all introduced allocas and nothing else are in the entry block.
+ //
+ 
//===--===//
+ 
+ #include "llvm/Transforms/Scalar.h"
+ #include "llvm/Transforms/Utils/Local.h"
+ #include "llvm/Pass.h"
+ #include "llvm/Function.h"
+ #include "llvm/Module.h"
+ #include "llvm/BasicBlock.h"
+ #include "llvm/Instructions.h"
+ #include "llvm/ADT/Statistic.h"
+ 
+ #include 
+ 
+ using namespace llvm;
+ 
+ namespace {
+   Statistic<> NumDemoted("reg2mem", "Number of registers demoted");
+   
+   struct RegToMem : public FunctionPass {
+ 
+bool valueEscapes(Instruction* i) {
+   BasicBlock* bb = i->getParent();
+   for(Value::use_iterator ii = i->use_begin(), ie = i->use_end();
+   ii != ie; ++ii)
+ if (cast(*ii)->getParent() != bb)
+   return true;
+   return false;
+ }
+ 
+ virtual bool runOnFunction(Function &F) {
+   if (!F.isExternal()) {
+ //give us a clean block
+ BasicBlock& bbhead = F.getEntryBlock();
+ bbhead.splitBasicBlock(bbhead.begin());
+ 
+ //find the instructions
+ std::list worklist;
+ for (Function::iterator ibb = F.begin(), ibe = F.end();
+  ibb != ibe; ++ibb)
+   for (BasicBlock::iterator iib = ibb->begin(), iie = ibb->end();
+iib != iie; ++iib) {
+ if(valueEscapes(iib))
+   worklist.push_front(&*iib);
+   }
+ //demote escaped instructions
+ NumDemoted += worklist.size();
+ for (std::list::iterator ilb = worklist.begin(), 
+ile = worklist.end(); ilb != ile; ++ilb)
+   DemoteRegToStack(**ilb, false);
+ return true;
+   }
+   return false;
+ }
+   };
+   
+   RegisterOpt X("reg2mem", "Demote all values to stack slots");
+ }
+ 
+ // createDemoteRegisterToMemory - Provide an entry point to create this pass.
+ //
+ FunctionPass *llvm::createDemoteRegisterToMemoryPass() {
+   return new RegToMem();
+ }



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


[llvm-commits] CVS: llvm/include/llvm/Transforms/Scalar.h

2005-11-09 Thread Andrew Lenharth


Changes in directory llvm/include/llvm/Transforms:

Scalar.h updated: 1.58 -> 1.59
---
Log message:

The pass everyone has been waiting for!
Reg2Mem

for fun you can opt -reg2mem -mem2reg



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

 Scalar.h |6 ++
 1 files changed, 6 insertions(+)


Index: llvm/include/llvm/Transforms/Scalar.h
diff -u llvm/include/llvm/Transforms/Scalar.h:1.58 
llvm/include/llvm/Transforms/Scalar.h:1.59
--- llvm/include/llvm/Transforms/Scalar.h:1.58  Sat Nov  5 03:21:28 2005
+++ llvm/include/llvm/Transforms/Scalar.h   Wed Nov  9 19:58:38 2005
@@ -162,6 +162,12 @@
 //
 FunctionPass *createPromoteMemoryToRegisterPass();
 
+//===--===//
+//
+// This pass is used to demote registers to memory references .
+// In basically undoes the PromoteMemoryToRegister pass to
+// make cfg hacking easier.
+FunctionPass *createDemoteRegisterToMemoryPass();
 
 
//===--===//
 //



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


[llvm-commits] CVS: llvm/include/llvm/Transforms/LinkAllPasses.h

2005-11-09 Thread Andrew Lenharth


Changes in directory llvm/include/llvm/Transforms:

LinkAllPasses.h updated: 1.24 -> 1.25
---
Log message:

needs to go here to apparently.

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

 LinkAllPasses.h |1 +
 1 files changed, 1 insertion(+)


Index: llvm/include/llvm/Transforms/LinkAllPasses.h
diff -u llvm/include/llvm/Transforms/LinkAllPasses.h:1.24 
llvm/include/llvm/Transforms/LinkAllPasses.h:1.25
--- llvm/include/llvm/Transforms/LinkAllPasses.h:1.24   Sat Oct 29 00:32:20 2005
+++ llvm/include/llvm/Transforms/LinkAllPasses.hWed Nov  9 20:07:45 2005
@@ -88,6 +88,7 @@
   (void) llvm::createPREPass();
   (void) llvm::createProfileLoaderPass();
   (void) llvm::createPromoteMemoryToRegisterPass();
+  (void) llvm::createDemoteRegisterToMemoryPass();
   (void) llvm::createPruneEHPass();
   (void) llvm::createRaiseAllocationsPass();
   (void) llvm::createRaisePointerReferencesPass();



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