[llvm-commits] CVS: llvm-www/OpenProjects.html

2006-01-12 Thread Misha Brukman


Changes in directory llvm-www:

OpenProjects.html updated: 1.10 - 1.11
---
Log message:

Added link to the Elsa C++ parser and Elkhound GLR parser generator -- this
could be used to implement a better C++ front-end for LLVM.


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

 OpenProjects.html |   14 ++
 1 files changed, 10 insertions(+), 4 deletions(-)


Index: llvm-www/OpenProjects.html
diff -u llvm-www/OpenProjects.html:1.10 llvm-www/OpenProjects.html:1.11
--- llvm-www/OpenProjects.html:1.10 Sat Oct 29 00:46:00 2005
+++ llvm-www/OpenProjects.html  Thu Jan 12 09:05:17 2006
@@ -347,9 +347,15 @@
 candidate./li
 liWrite a new frontend for C/C++ bin/b C++, giving us the ability to
 directly use LLVM C++ classes from within a compiler rather than use
-C-based wrapper functions a la llvm-gcc.  One possible starting point is the a
-href=http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.11;C++
-yacc grammar by Ed Willink/a./li
+C-based wrapper functions a la llvm-gcc.  Possible starting points:
+  ul
+  lia href=http://www.cs.berkeley.edu/~smcpeak/elkhound/sources/elsa/;Elsa
+  C++ parser/a, written in C++ and built with a Generalized LR parser
+  generator a
+  href=http://www.cs.berkeley.edu/~smcpeak/elkhound/;Elkhound/a/li
+  lia 
href=http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.11;C++
 yacc grammar by Ed Willink/a/li
+  /ul
+/li
 liWrite a new frontend for some other language (Java? OCaml? Forth?)/li
 liWrite a disassembler for machine code that would use TableGen to output 
 ttMachineInstr/tts for transformations, optimizations, etc./li
@@ -375,7 +381,7 @@
   src=http://www.w3.org/Icons/valid-html401; alt=Valid HTML 4.01!/a
 
   a href=http://llvm.cs.uiuc.edu;LLVM Compiler Infrastructure/abr
-  Last modified: $Date: 2005/10/29 05:46:00 $
+  Last modified: $Date: 2006/01/12 15:05:17 $
 /address
 
 !--#include virtual=footer.incl --



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


[llvm-commits] CVS: llvm/lib/VMCore/PassManagerT.h

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

PassManagerT.h updated: 1.66 - 1.67
---
Log message:

Patch #10 from Saem:
Extracts a few more methods, reduces some redundancy in the code at
the same time.


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

 PassManagerT.h |   84 +
 1 files changed, 32 insertions(+), 52 deletions(-)


Index: llvm/lib/VMCore/PassManagerT.h
diff -u llvm/lib/VMCore/PassManagerT.h:1.66 llvm/lib/VMCore/PassManagerT.h:1.67
--- llvm/lib/VMCore/PassManagerT.h:1.66 Wed Jan 11 10:14:49 2006
+++ llvm/lib/VMCore/PassManagerT.h  Thu Jan 12 10:48:23 2006
@@ -472,33 +472,10 @@
E = RequiredSet.end(); I != E; ++I)
   markPassUsed(*I, P); // Mark *I as used by P
 
-// Erase all analyses not in the preserved set...
-if (!AnUsage.getPreservesAll()) {
-  const std::vectorAnalysisID PreservedSet = AnUsage.getPreservedSet();
-  for (std::mapAnalysisID, Pass*::iterator I = CurrentAnalyses.begin(),
- E = CurrentAnalyses.end(); I != E; ) {
-if (std::find(PreservedSet.begin(), PreservedSet.end(), I-first) ==
-PreservedSet.end()) { // Analysis not preserved!
-  CurrentAnalyses.erase(I);   // Remove from available analyses
-  I = CurrentAnalyses.begin();
-} else {
-  ++I;
-}
-  }
-}
-
-// Add this pass to the currently available set...
-if (const PassInfo *PI = P-getPassInfo()) {
-  CurrentAnalyses[PI] = P;
-
-  // This pass is the current implementation of all of the interfaces it
-  // implements as well.
-  //
-  const std::vectorconst PassInfo* II = PI-getInterfacesImplemented();
-  for (unsigned i = 0, e = II.size(); i != e; ++i)
-CurrentAnalyses[II[i]] = P;
-}
-
+removeNonPreservedAnalyses(AnUsage);
+
+makeCurrentlyAvailable(P);
+
 // For now assume that our results are never used...
 LastUseOf[P] = P;
   }
@@ -632,30 +609,10 @@
   // Erase all analyses not in the preserved set
   removeNonPreservedAnalyses(AnUsage);
   
-  // Add the current pass to the set of passes that have been run, and are
-  // thus available to users.
-  //
-  if (const PassInfo *PI = P-getPassInfo()) {
-CurrentAnalyses[PI] = P;
-
-// This pass is the current implementation of all of the interfaces it
-// implements as well.
-//
-const std::vectorconst PassInfo* II = 
PI-getInterfacesImplemented();
-for (unsigned i = 0, e = II.size(); i != e; ++i)
-  CurrentAnalyses[II[i]] = P;
-  }
-
-  // Free memory for any passes that we are the last use of...
-  std::vectorPass* DeadPass = LastUserOf[P];
-  for (std::vectorPass*::iterator I = DeadPass.begin(),E = 
DeadPass.end();
-   I != E; ++I) {
-PMDebug::PrintPassInformation(getDepth()+1, Freeing Pass, *I, M);
-(*I)-releaseMemory();
-  }
+  makeCurrentlyAvailable(P);
   
-  // remove dead passes from the CurrentAnalyses list...
-  removeDeadPasses(DeadPass);
+  // free memory and remove dead passes from the CurrentAnalyses list...
+  removeDeadPasses(P, M, LastUserOf);
 }
 
 return MadeChanges;
@@ -707,7 +664,15 @@
 }
   }
   
-  inline void removeDeadPasses(std::vectorPass* DeadPass) { 
+  inline void removeDeadPasses(Pass* P, UnitType *M, 
+  std::mapPass *, std::vectorPass*  LastUserOf) { 
+std::vectorPass* DeadPass = LastUserOf[P];
+for (std::vectorPass*::iterator I = DeadPass.begin(),E = DeadPass.end();
+  I != E; ++I) {
+  PMDebug::PrintPassInformation(getDepth()+1, Freeing Pass, *I, M);
+  (*I)-releaseMemory();
+}
+
 for (std::mapAnalysisID, Pass*::iterator I = CurrentAnalyses.begin();
   I != CurrentAnalyses.end(); ) {
   std::vectorPass*::iterator DPI = std::find(DeadPass.begin(),
@@ -720,8 +685,23 @@
   }
 }
   }
+  
+  inline void makeCurrentlyAvailable(Pass* P) { 
+if (const PassInfo *PI = P-getPassInfo()) {
+  CurrentAnalyses[PI] = P;
+
+  // This pass is the current implementation of all of the interfaces it
+  // implements as well.
+  //
+  const std::vectorconst PassInfo* II = PI-getInterfacesImplemented();
+  for (unsigned i = 0, e = II.size(); i != e; ++i)
+CurrentAnalyses[II[i]] = P;
+}
+  }
 };
 
+
+
 
//===--===//
 // BasicBlockPassManager
 //
@@ -859,7 +839,7 @@
 };
 
 
//===--===//
-// PassManagerTraits Method Implementations
+// PassManager Method Implementations
 //
 
 // BasicBlockPassManager Implementations



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


[llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp SparcV8InstrInfo.td

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/Target/SparcV8:

SparcV8ISelDAGToDAG.cpp updated: 1.47 - 1.48
SparcV8InstrInfo.td updated: 1.101 - 1.102
---
Log message:

Fix branches on FP compares


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

 SparcV8ISelDAGToDAG.cpp |   33 +++--
 SparcV8InstrInfo.td |5 ++---
 2 files changed, 17 insertions(+), 21 deletions(-)


Index: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
diff -u llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.47 
llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.48
--- llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.47Thu Jan 12 
01:38:04 2006
+++ llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp Thu Jan 12 11:05:32 2006
@@ -665,13 +665,7 @@
   SDOperand Cond = DAG.getNode(V8ISD::CMPICC, VTs, Ops).getValue(1);
   return DAG.getNode(V8ISD::BRICC, MVT::Other, Chain, Dest, CC, Cond);
 } else {
-  std::vectorMVT::ValueType VTs;
-  VTs.push_back(MVT::i32);
-  VTs.push_back(MVT::Flag);
-  std::vectorSDOperand Ops;
-  Ops.push_back(LHS);
-  Ops.push_back(RHS);
-  SDOperand Cond = DAG.getNode(V8ISD::CMPFCC, VTs, Ops).getValue(1);
+  SDOperand Cond = DAG.getNode(V8ISD::CMPFCC, MVT::Flag, LHS, RHS);
   return DAG.getNode(V8ISD::BRFCC, MVT::Other, Chain, Dest, CC, Cond);
 }
   }
@@ -682,18 +676,21 @@
 SDOperand TrueVal = Op.getOperand(2);
 SDOperand FalseVal = Op.getOperand(3);
 
+SDOperand CompareFlag;
 unsigned Opc;
-Opc = LHS.getValueType() == MVT::i32 ? V8ISD::CMPICC : V8ISD::CMPFCC;
-std::vectorMVT::ValueType VTs;
-VTs.push_back(LHS.getValueType());
-VTs.push_back(MVT::Flag);
-std::vectorSDOperand Ops;
-Ops.push_back(LHS);
-Ops.push_back(RHS);
-SDOperand CompareFlag = DAG.getNode(Opc, VTs, Ops).getValue(1);
-
-Opc = LHS.getValueType() == MVT::i32 ? 
-  V8ISD::SELECT_ICC : V8ISD::SELECT_FCC;
+if (LHS.getValueType() == MVT::i32) {
+  std::vectorMVT::ValueType VTs;
+  VTs.push_back(LHS.getValueType());   // subcc returns a value
+  VTs.push_back(MVT::Flag);
+  std::vectorSDOperand Ops;
+  Ops.push_back(LHS);
+  Ops.push_back(RHS);
+  CompareFlag = DAG.getNode(V8ISD::CMPICC, VTs, Ops).getValue(1);
+  Opc = V8ISD::SELECT_ICC;
+} else {
+  CompareFlag = DAG.getNode(V8ISD::CMPFCC, MVT::Flag, LHS, RHS);
+  Opc = V8ISD::SELECT_FCC;
+}
 return DAG.getNode(Opc, TrueVal.getValueType(), TrueVal, FalseVal, 
DAG.getConstant(CC, MVT::i32), CompareFlag);
   }


Index: llvm/lib/Target/SparcV8/SparcV8InstrInfo.td
diff -u llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.101 
llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.102
--- llvm/lib/Target/SparcV8/SparcV8InstrInfo.td:1.101   Wed Jan 11 01:49:38 2006
+++ llvm/lib/Target/SparcV8/SparcV8InstrInfo.td Thu Jan 12 11:05:32 2006
@@ -72,9 +72,8 @@
 def SDTV8ITOF :
 SDTypeProfile1, 1, [SDTCisFP0, SDTCisVT1, f32];
 
-def V8cmpicc : SDNodeV8ISD::CMPICC, SDTIntBinOp,
-  [SDNPCommutative, SDNPOutFlag];
-def V8cmpfcc : SDNodeV8ISD::CMPFCC, SDTV8cmpfcc;
+def V8cmpicc : SDNodeV8ISD::CMPICC, SDTIntBinOp, [SDNPOutFlag];
+def V8cmpfcc : SDNodeV8ISD::CMPFCC, SDTV8cmpfcc, [SDNPOutFlag];
 def V8bricc : SDNodeV8ISD::BRICC, SDTV8brcc, [SDNPHasChain];
 def V8brfcc : SDNodeV8ISD::BRFCC, SDTV8brcc, [SDNPHasChain];
 



___
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/DAGCombiner.cpp

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

DAGCombiner.cpp updated: 1.80 - 1.81
---
Log message:

Don't create rotate instructions in unsupported types, because we don't have
promote/expand code yet.  This fixes the 177.mesa failure on PPC.


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

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


Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.80 
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.81
--- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.80  Wed Jan 11 15:21:00 2006
+++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp   Thu Jan 12 12:57:33 2006
@@ -1184,7 +1184,7 @@
   // check for rotl, rotr
   if (N0.getOpcode() == ISD::SHL  N1.getOpcode() == ISD::SRL 
   N0.getOperand(0) == N1.getOperand(0) 
-  TLI.isOperationLegal(ISD::ROTL, VT)) {
+  TLI.isOperationLegal(ISD::ROTL, VT)  TLI.isTypeLegal(VT)) {
 // fold (or (shl x, C1), (srl x, C2)) - (rotl x, C1)
 if (N0.getOperand(1).getOpcode() == ISD::Constant 
 N1.getOperand(1).getOpcode() == ISD::Constant) {
@@ -1206,7 +1206,7 @@
   if (ConstantSDNode *SUBC = 
   dyn_castConstantSDNode(N0.getOperand(1).getOperand(0)))
 if (SUBC-getValue() == OpSizeInBits) {
-  if (TLI.isOperationLegal(ISD::ROTR, VT))
+  if (TLI.isOperationLegal(ISD::ROTR, VT)  TLI.isTypeLegal(VT))
 return DAG.getNode(ISD::ROTR, VT, N0.getOperand(0), 
N1.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/X86/X86InstrInfo.td

2006-01-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrInfo.td updated: 1.200 - 1.201
---
Log message:

Specify transformation from GlobalAddress to TargetGlobalAddress and
ExternalSymbol to TargetExternalSymbol.


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

 X86InstrInfo.td |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrInfo.td
diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.200 
llvm/lib/Target/X86/X86InstrInfo.td:1.201
--- llvm/lib/Target/X86/X86InstrInfo.td:1.200   Thu Jan 12 02:27:59 2006
+++ llvm/lib/Target/X86/X86InstrInfo.td Thu Jan 12 13:36:31 2006
@@ -2959,8 +2959,8 @@
 
//===--===//
 
 // GlobalAddress and ExternalSymbol
-def : Pat(i32 globaladdr:$dst),  (MOV32ri globaladdr:$dst);
-def : Pat(i32 externalsym:$dst), (MOV32ri externalsym:$dst);
+def : Pat(i32 globaladdr:$dst),  (MOV32ri tglobaladdr:$dst);
+def : Pat(i32 externalsym:$dst), (MOV32ri texternalsym:$dst);
 
 // Calls
 def : Pat(X86call tglobaladdr:$dst),



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


[llvm-commits] CVS: llvm/utils/TableGen/DAGISelEmitter.cpp

2006-01-12 Thread Evan Cheng


Changes in directory llvm/utils/TableGen:

DAGISelEmitter.cpp updated: 1.132 - 1.133
---
Log message:

Allow transformation from GlobalAddress to TargetGlobalAddress and
ExternalSymbol to TargetExternalSymbol.


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

 DAGISelEmitter.cpp |   37 -
 1 files changed, 24 insertions(+), 13 deletions(-)


Index: llvm/utils/TableGen/DAGISelEmitter.cpp
diff -u llvm/utils/TableGen/DAGISelEmitter.cpp:1.132 
llvm/utils/TableGen/DAGISelEmitter.cpp:1.133
--- llvm/utils/TableGen/DAGISelEmitter.cpp:1.132Thu Jan 12 01:54:57 2006
+++ llvm/utils/TableGen/DAGISelEmitter.cpp  Thu Jan 12 13:35:54 2006
@@ -1826,7 +1826,9 @@
   unsigned PatternNo;
   std::ostream OS;
   // Node to name mapping
-  std::mapstd::string,std::string VariableMap;
+  std::mapstd::string, std::string VariableMap;
+  // Node to operator mapping
+  std::mapstd::string, Record* OperatorMap;
   // Names of all the folded nodes which produce chains.
   std::vectorstd::pairstd::string, unsigned  FoldedChains;
   unsigned TmpNo;
@@ -1892,6 +1894,9 @@
 ) goto P  PatternNo  Fail;\n;
 return;
   }
+
+  if (!N-isLeaf())
+OperatorMap[N-getName()] = N-getOperator();
 }
 
 
@@ -2023,20 +2028,26 @@
 OSSDOperand Tmp  utostr(ResNo)
  = CurDAG-getTargetConstant(Tmp
 ResNo  C, MVT::  getEnumName(N-getTypeNum(0))  );\n;
-  } else if (!N-isLeaf()  N-getOperator()-getName() == globaladdr) {
-OSSDOperand Tmp  ResNo
- = CurDAG-getTargetGlobalAddress(castGlobalAddressSDNode(
-Val  )-getGlobal(), MVT::  getEnumName(N-getTypeNum(0))
-);\n;
-  } else if (!N-isLeaf()  N-getOperator()-getName() == externalsym) 
{
-OSSDOperand Tmp  ResNo
- = CurDAG-getTargetExternalSymbol(castExternalSymbolSDNode(
-Val  )-getSymbol(), MVT::  getEnumName(N-getTypeNum(0))
-);\n;
   } else if (!N-isLeaf()  N-getOperator()-getName() == 
texternalsym){
-OSSDOperand Tmp  ResNo   =   Val  ;\n;
+Record *Op = OperatorMap[N-getName()];
+// Transform ExternalSymbol to TargetExternalSymbol
+if (Op  Op-getName() == externalsym) {
+  OSSDOperand Tmp  ResNo
+   = 
CurDAG-getTargetExternalSymbol(castExternalSymbolSDNode(
+  Val  )-getSymbol(), MVT::  getEnumName(N-getTypeNum(0))
+  );\n;
+} else
+  OSSDOperand Tmp  ResNo   =   Val  ;\n;
   } else if (!N-isLeaf()  N-getOperator()-getName() == tglobaladdr) 
{
-OSSDOperand Tmp  ResNo   =   Val  ;\n;
+Record *Op = OperatorMap[N-getName()];
+// Transform GlobalAddress to TargetGlobalAddress
+if (Op  Op-getName() == globaladdr) {
+  OSSDOperand Tmp  ResNo
+   = CurDAG-getTargetGlobalAddress(castGlobalAddressSDNode(
+  Val  )-getGlobal(), MVT::  getEnumName(N-getTypeNum(0))
+  );\n;
+} else
+  OSSDOperand Tmp  ResNo   =   Val  ;\n;
   } else if (!N-isLeaf()  N-getOperator()-getName() == 
texternalsym){
 OSSDOperand Tmp  ResNo   =   Val  ;\n;
   } else if (!N-isLeaf()  N-getOperator()-getName() == tconstpool) {



___
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/2005-05-11-Popcount-ffs-fls.c

2006-01-12 Thread Chris Lattner


Changes in directory llvm-test/SingleSource/UnitTests:

2005-05-11-Popcount-ffs-fls.c updated: 1.4 - 1.5
---
Log message:

enhance this test to pass on non-gcc 4 host compilers


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

 2005-05-11-Popcount-ffs-fls.c |   23 ++-
 1 files changed, 22 insertions(+), 1 deletion(-)


Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c
diff -u llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.4 
llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.5
--- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.4  Sun May 
15 16:18:45 2005
+++ llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c  Thu Jan 
12 13:42:26 2006
@@ -24,6 +24,12 @@
return table[x  26];
 }
 
+int nlzll(unsigned long long x) {
+  if ((x  32) == 0)
+return nlz10b(x)+32;
+  return nlz10b(x32);
+}
+
 int pop(unsigned x) {
x = x - ((x  1)  0x);
x = (x  0x) + ((x  2)  0x);
@@ -33,6 +39,10 @@
return x  24;
 }
 
+int popll(unsigned long long x) {
+  return pop(x) + pop(x  32);
+}
+
 int ntz8(unsigned x) {
 
static char table[64] =
@@ -45,6 +55,17 @@
return table[x  26];
 }
 
+/* Work with non-gcc compilers and GCC before 4.0 */
+#if !defined(__GNUC__) || __GNUC__  4
+#define __builtin_clz nlz10b
+#define __builtin_popcount pop
+#define __builtin_ctz ntz8
+#define __builtin_clzll nlzll
+#define __builtin_popcountll popll
+#define __builtin_ffsl __builtin_ffs
+#define ffsl ffs
+#endif
+
 int i;
 int main(void) {
   long long l;
@@ -66,7 +87,7 @@
 printf(LLVM: n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n,
l, __builtin_clzll(l), __builtin_popcountll(l), __builtin_ctz(l));
 printf(REF LO BITS : n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n,
-   l, nlz10b(l), pop(l), ntz8(l));
+   l, nlzll(l), popll(l), ntz8(l));
 printf(  ***  \n);
 l++;
   }



___
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/2005-05-11-Popcount-ffs-fls.c

2006-01-12 Thread Chris Lattner


Changes in directory llvm-test/SingleSource/UnitTests:

2005-05-11-Popcount-ffs-fls.c updated: 1.5 - 1.6
---
Log message:

Add another case to check, eliminate a warning


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

 2005-05-11-Popcount-ffs-fls.c |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c
diff -u llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.5 
llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.6
--- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.5  Thu Jan 
12 13:42:26 2006
+++ llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c  Thu Jan 
12 16:42:40 2006
@@ -2,6 +2,7 @@
  * http://www.hackersdelight.org/HDcode/nlz.cc and
  * http://www.hackersdelight.org/HDcode/ntz.cc
  */
+#include stdio.h
 
 #define u 99
 
@@ -93,11 +94,11 @@
   }
 
   // Check some boundary and other cases  for FFS call
-  printf(FFS: 0:%d, 1:%d, 2:%d, 7:%d, 1024:%d, i:%d, l:%d\n,
-  ffs(0), ffs(1), ffs(2), ffs(7), ffs(1024), ffs(i), ffsl(l));
-  printf(__builtin_ffs: 0:%d, 1:%d, 2:%d, 7:%d, 1024:%d, i:%d l:%d\n,
+  printf(FFS: 0:%d, 1:%d, 2:%d, 7:%d, 1024:%d, 1234:%d i:%d, l:%d\n,
+  ffs(0), ffs(1), ffs(2), ffs(7), ffs(1024), ffs(1234), ffs(i), ffsl(l));
+  printf(__builtin_ffs: 0:%d, 1:%d, 2:%d, 7:%d, 1024:%d, 1234:%d i:%d l:%d\n,
   __builtin_ffs(0), __builtin_ffs(1), __builtin_ffs(2), __builtin_ffs(7),
-  __builtin_ffs(1024), __builtin_ffs(i), __builtin_ffsl(l)); 
+  __builtin_ffs(1024), __builtin_ffs(1234), __builtin_ffs(i), 
__builtin_ffsl(l)); 
 
   return(0);
 }



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


[llvm-commits] CVS: llvm/test/Regression/CodeGen/Generic/2006-01-12-BadSetCCFold.ll

2006-01-12 Thread Evan Cheng


Changes in directory llvm/test/Regression/CodeGen/Generic:

2006-01-12-BadSetCCFold.ll added (r1.1)
---
Log message:

Test case for a SETCC / BRCOND folding bug.


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

 2006-01-12-BadSetCCFold.ll |   39 +++
 1 files changed, 39 insertions(+)


Index: llvm/test/Regression/CodeGen/Generic/2006-01-12-BadSetCCFold.ll
diff -c /dev/null 
llvm/test/Regression/CodeGen/Generic/2006-01-12-BadSetCCFold.ll:1.1
*** /dev/null   Thu Jan 12 19:02:32 2006
--- llvm/test/Regression/CodeGen/Generic/2006-01-12-BadSetCCFold.ll Thu Jan 
12 19:02:22 2006
***
*** 0 
--- 1,39 
+ ; RUN: llvm-as  %s | llc
+ 
+ target endian = little
+ target pointersize = 32
+   %struct.node_t = type { double*, %struct.node_t*, %struct.node_t**, 
double**, double*, int, int }
+ 
+ implementation   ; Functions:
+ 
+ void %main() {
+ entry:
+   br bool false, label %then.2.i, label %endif.2.i
+ 
+ then.2.i: ; preds = %entry
+   br label %dealwithargs.exit
+ 
+ endif.2.i:; preds = %entry
+   br bool false, label %then.3.i, label %dealwithargs.exit
+ 
+ then.3.i: ; preds = %endif.2.i
+   br label %dealwithargs.exit
+ 
+ dealwithargs.exit:; preds = %then.3.i, %endif.2.i, %then.2.i
+   %n_nodes.4 = phi int [ 64, %then.3.i ], [ 64, %then.2.i ], [ 64, 
%endif.2.i ]   ; int [#uses=1]
+   %tmp.14.i1134.i.i = setgt int %n_nodes.4, 1 ; bool 
[#uses=2]
+   br bool %tmp.14.i1134.i.i, label %no_exit.i12.i.i, label 
%fill_table.exit22.i.i
+ 
+ no_exit.i12.i.i:  ; preds = %no_exit.i12.i.i, %dealwithargs.exit
+   br bool false, label %fill_table.exit22.i.i, label %no_exit.i12.i.i
+ 
+ fill_table.exit22.i.i:; preds = %no_exit.i12.i.i, 
%dealwithargs.exit
+   %cur_node.0.i8.1.i.i = phi %struct.node_t* [ undef, %dealwithargs.exit 
], [ null, %no_exit.i12.i.i ]; %struct.node_t* [#uses=0]
+   br bool %tmp.14.i1134.i.i, label %no_exit.i.preheader.i.i, label 
%make_tables.exit.i
+ 
+ no_exit.i.preheader.i.i:  ; preds = %fill_table.exit22.i.i
+   ret void
+ 
+ make_tables.exit.i:   ; preds = %fill_table.exit22.i.i
+   ret void
+ }



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


[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

2006-01-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.34 - 1.35
---
Log message:

Fix a SETCC / BRCOND folding bug.


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

 X86ISelLowering.cpp |   49 +
 1 files changed, 37 insertions(+), 12 deletions(-)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.34 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.35
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.34Thu Jan 12 16:54:21 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Jan 12 19:03:02 2006
@@ -1572,14 +1572,24 @@
 bool isFP  = MVT::isFloatingPoint(VT);
 bool isFPStack = isFP  (X86Vector  SSE2);
 bool isFPSSE   = isFP  (X86Vector = SSE2);
-bool isValid   = false;
+bool addTest   = false;
 SDOperand Op0 = Op.getOperand(0);
 SDOperand Cond, CC;
 if (Op0.getOpcode() == X86ISD::SETCC) {
-  CC   = Op0.getOperand(0);
-  Cond = Op0.getOperand(1);
-  isValid =
-!(isFPStack  
!hasFPCMov(castConstantSDNode(CC)-getSignExtended()));
+  // If condition flag is set by a X86ISD::CMP, then make a copy of it
+  // (since flag operand cannot be shared). If the X86ISD::SETCC does not
+  // have another use it will be eliminated.
+  // If the X86ISD::SETCC has more than one use, then it's probably better
+  // to use a test instead of duplicating the X86ISD::CMP (for register
+  // pressure reason).
+  if (Cond.hasOneUse()  Cond.getOperand(1).getOpcode() == X86ISD::CMP) {
+CC   = Op0.getOperand(0);
+Cond = Op0.getOperand(1);
+addTest =
+  !(isFPStack 
+!hasFPCMov(castConstantSDNode(CC)-getSignExtended()));
+  } else
+addTest = true;
 } else if (Op0.getOpcode() == ISD::SETCC) {
   CC = Op0.getOperand(2);
   bool isFP = MVT::isFloatingPoint(Op0.getOperand(1).getValueType());
@@ -1587,10 +1597,11 @@
   CC = DAG.getConstant(X86CC, MVT::i8);
   Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
  Op0.getOperand(0), Op0.getOperand(1));
-  isValid = true;
-}
+  addTest = true;
+} else
+  addTest = true;
 
-if (!isValid) {
+if (!addTest) {
   CC = DAG.getConstant(X86ISD::COND_E, MVT::i8);
   Cond = DAG.getNode(X86ISD::TEST, MVT::Flag, Op0, Op0);
 }
@@ -1606,13 +1617,24 @@
 return DAG.getNode(X86ISD::CMOV, Tys, Ops);
   }
   case ISD::BRCOND: {
+bool addTest = false;
 SDOperand Cond  = Op.getOperand(1);
 SDOperand Dest  = Op.getOperand(2);
 SDOperand CC;
-// TODO: handle Cond == OR / AND / XOR
 if (Cond.getOpcode() == X86ISD::SETCC) {
-  CC = Cond.getOperand(0);
-  Cond = Cond.getOperand(1);
+  // If condition flag is set by a X86ISD::CMP, then make a copy of it
+  // (since flag operand cannot be shared). If the X86ISD::SETCC does not
+  // have another use it will be eliminated.
+  // If the X86ISD::SETCC has more than one use, then it's probably better
+  // to use a test instead of duplicating the X86ISD::CMP (for register
+  // pressure reason).
+  if (Cond.hasOneUse()  Cond.getOperand(1).getOpcode() == X86ISD::CMP) {
+CC   = Cond.getOperand(0);
+Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
+   Cond.getOperand(1).getOperand(0),
+   Cond.getOperand(1).getOperand(1));
+  } else
+addTest = true;
 } else if (Cond.getOpcode() == ISD::SETCC) {
   CC = Cond.getOperand(2);
   bool isFP = MVT::isFloatingPoint(Cond.getOperand(1).getValueType());
@@ -1620,7 +1642,10 @@
   CC = DAG.getConstant(X86CC, MVT::i8);
   Cond = DAG.getNode(X86ISD::CMP, MVT::Flag,
  Cond.getOperand(0), Cond.getOperand(1));
-} else {
+} else
+  addTest = true;
+
+if (addTest) {
   CC = DAG.getConstant(X86ISD::COND_NE, MVT::i8);
   Cond = DAG.getNode(X86ISD::TEST, MVT::Flag, Cond, Cond);
 }



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


[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

2006-01-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.35 - 1.36
---
Log message:

Oops. Typo.


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

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


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.35 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.36
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.35Thu Jan 12 19:03:02 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Jan 12 19:06:49 2006
@@ -1601,7 +1601,7 @@
 } else
   addTest = true;
 
-if (!addTest) {
+if (addTest) {
   CC = DAG.getConstant(X86ISD::COND_E, MVT::i8);
   Cond = DAG.getNode(X86ISD::TEST, MVT::Flag, Op0, Op0);
 }



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


[llvm-commits] CVS: llvm/lib/Target/X86/README.txt

2006-01-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

README.txt updated: 1.21 - 1.22
---
Log message:

Minor update.


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

 README.txt |9 +
 1 files changed, 9 insertions(+)


Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.21 llvm/lib/Target/X86/README.txt:1.22
--- llvm/lib/Target/X86/README.txt:1.21 Thu Jan 12 16:54:21 2006
+++ llvm/lib/Target/X86/README.txt  Thu Jan 12 19:20:42 2006
@@ -112,3 +112,12 @@
 //===-===//
 
 Check if load folding would add a cycle in the dag.
+
+//===-===//
+
+Model X86 EFLAGS as a real register to avoid redudant cmp / test. e.g.
+
+   cmpl $1, %eax
+   setg %al
+   testb %al, %al  # unnecessary
+   jne .BB7



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


[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

2006-01-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.36 - 1.37
---
Log message:

More typo's. I need new eye glasses...


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

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


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.36 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.37
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.36Thu Jan 12 19:06:49 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Jan 12 19:17:24 2006
@@ -1582,12 +1582,11 @@
   // If the X86ISD::SETCC has more than one use, then it's probably better
   // to use a test instead of duplicating the X86ISD::CMP (for register
   // pressure reason).
-  if (Cond.hasOneUse()  Cond.getOperand(1).getOpcode() == X86ISD::CMP) {
+  if (Op0.hasOneUse()  Op0.getOperand(1).getOpcode() == X86ISD::CMP) {
 CC   = Op0.getOperand(0);
 Cond = Op0.getOperand(1);
 addTest =
-  !(isFPStack 
-!hasFPCMov(castConstantSDNode(CC)-getSignExtended()));
+  isFPStack  !hasFPCMov(castConstantSDNode(CC)-getSignExtended());
   } else
 addTest = true;
 } else if (Op0.getOpcode() == ISD::SETCC) {



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


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

2006-01-12 Thread Chris Lattner


Changes in directory llvm/docs:

LangRef.html updated: 1.122 - 1.123
---
Log message:

Add llvm.stacksave and llvm.stackrestore.


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

 LangRef.html |   70 ++-
 1 files changed, 69 insertions(+), 1 deletion(-)


Index: llvm/docs/LangRef.html
diff -u llvm/docs/LangRef.html:1.122 llvm/docs/LangRef.html:1.123
--- llvm/docs/LangRef.html:1.122Thu Jan 12 19:20:27 2006
+++ llvm/docs/LangRef.html  Thu Jan 12 20:03:13 2006
@@ -127,6 +127,8 @@
 ol
   lia href=#i_returnaddress'ttllvm.returnaddress/tt' 
Intrinsic/a/li
   lia href=#i_frameaddress'ttllvm.frameaddress/tt'   
Intrinsic/a/li
+  lia href=#i_stacksave'ttllvm.stacksave/tt' 
Intrinsic/a/li
+  lia href=#i_stackrestore'ttllvm.stackrestore/tt' 
Intrinsic/a/li
   lia href=#i_prefetch'ttllvm.prefetch/tt' Intrinsic/a/li
   lia href=#i_pcmarker'ttllvm.pcmarker/tt' Intrinsic/a/li
   lia href=#i_readcyclecounterttllvm.readcyclecounter/tt' 
Intrinsic/a/li
@@ -2789,6 +2791,72 @@
 
 !-- ___ 
--
 div class=doc_subsubsection
+  a name=i_stacksave'ttllvm.stacksave/tt' Intrinsic/a
+/div
+
+div class=doc_text
+
+h5Syntax:/h5
+pre
+  declare sbyte *%llvm.stacksave()
+/pre
+
+h5Overview:/h5
+
+p
+The 'ttllvm.stacksave/tt' intrinsic is used to remember the current state 
of
+the function stack, for use with a href=#i_stackrestore
+ttllvm.stackrestore/tt/a.  This is useful for implementing language
+features like scoped automatic variable sized arrays in C99.
+/p
+
+h5Semantics:/h5
+
+p
+This intrinsic returns a opaque pointer value that can be passed to a
+href=#i_stackrestorettllvm.stackrestore/tt/a.  When an
+ttllvm.stackrestore/tt intrinsic is executed with a value saved from 
+ttllvm.stacksave/tt, it effectively restores the state of the stack to the
+state it was in when the ttllvm.stacksave/tt intrinsic executed.  In
+practice, this pops any a href=#i_allocaalloca/a blocks from the stack
+that were allocated after the ttllvm.stacksave/tt was executed.
+/p
+
+/div
+
+!-- ___ 
--
+div class=doc_subsubsection
+  a name=i_stackrestore'ttllvm.stackrestore/tt' Intrinsic/a
+/div
+
+div class=doc_text
+
+h5Syntax:/h5
+pre
+  declare void %llvm.stackrestore(sbyte* %ptr)
+/pre
+
+h5Overview:/h5
+
+p
+The 'ttllvm.stackrestore/tt' intrinsic is used to restore the state of
+the function stack to the state it was in when the corresponding a
+href=#llvm.stacksavettllvm.stacksave/tt/a intrinsic executed.  This is
+useful for implementing language features like scoped automatic variable sized
+arrays in C99.
+/p
+
+h5Semantics:/h5
+
+p
+See the description for a href=#i_stacksavettllvm.stacksave/tt/a.
+/p
+
+/div
+
+
+!-- ___ 
--
+div class=doc_subsubsection
   a name=i_prefetch'ttllvm.prefetch/tt' Intrinsic/a
 /div
 
@@ -3481,7 +3549,7 @@
 
   a href=mailto:[EMAIL PROTECTED]Chris Lattner/abr
   a href=http://llvm.cs.uiuc.edu;The LLVM Compiler Infrastructure/abr
-  Last modified: $Date: 2006/01/13 01:20:27 $
+  Last modified: $Date: 2006/01/13 02:03:13 $
 /address
 /body
 /html



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


[llvm-commits] CVS: llvm/include/llvm/Intrinsics.h

2006-01-12 Thread Chris Lattner


Changes in directory llvm/include/llvm:

Intrinsics.h updated: 1.33 - 1.34
---
Log message:

add new llvm.stacksave/llvm.stackrestore intrinsics


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

 Intrinsics.h |2 ++
 1 files changed, 2 insertions(+)


Index: llvm/include/llvm/Intrinsics.h
diff -u llvm/include/llvm/Intrinsics.h:1.33 llvm/include/llvm/Intrinsics.h:1.34
--- llvm/include/llvm/Intrinsics.h:1.33 Fri Nov 11 10:45:18 2005
+++ llvm/include/llvm/Intrinsics.h  Thu Jan 12 20:15:02 2006
@@ -34,6 +34,8 @@
 // Code generator intrinsics.
 returnaddress,// Yields the return address of a dynamic call frame
 frameaddress, // Yields the frame address of a dynamic call frame
+stacksave,// Save the stack pointer
+stackrestore, // Restore the stack pointer
 prefetch, // Prefetch a value into the cache
 pcmarker, // Export a PC from near the marker
 readcyclecounter, // Read cycle counter register



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


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

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

Function.cpp updated: 1.96 - 1.97
Verifier.cpp updated: 1.138 - 1.139
---
Log message:

Add recognition and verification of new llvm.stacksave/llvm.stackrestore 
intrinsics


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

 Function.cpp |   10 ++
 Verifier.cpp |   12 
 2 files changed, 18 insertions(+), 4 deletions(-)


Index: llvm/lib/VMCore/Function.cpp
diff -u llvm/lib/VMCore/Function.cpp:1.96 llvm/lib/VMCore/Function.cpp:1.97
--- llvm/lib/VMCore/Function.cpp:1.96   Fri Nov 11 10:46:18 2005
+++ llvm/lib/VMCore/Function.cppThu Jan 12 20:15:39 2006
@@ -249,10 +249,12 @@
 if (getName() == llvm.readcyclecounter) return 
Intrinsic::readcyclecounter;
 break;
   case 's':
-if (getName() == llvm.setjmp) return Intrinsic::setjmp;
-if (getName() == llvm.sigsetjmp)  return Intrinsic::sigsetjmp;
-if (getName() == llvm.siglongjmp) return Intrinsic::siglongjmp;
-if (getName() == llvm.sqrt)   return Intrinsic::sqrt;
+if (getName() == llvm.setjmp)   return Intrinsic::setjmp;
+if (getName() == llvm.sigsetjmp)return Intrinsic::sigsetjmp;
+if (getName() == llvm.siglongjmp)   return Intrinsic::siglongjmp;
+if (getName() == llvm.stackrestore) return Intrinsic::stackrestore;
+if (getName() == llvm.stacksave)return Intrinsic::stacksave;
+if (getName() == llvm.sqrt) return Intrinsic::sqrt;
 break;
   case 'v':
 if (getName() == llvm.va_copy)  return Intrinsic::vacopy;


Index: llvm/lib/VMCore/Verifier.cpp
diff -u llvm/lib/VMCore/Verifier.cpp:1.138 llvm/lib/VMCore/Verifier.cpp:1.139
--- llvm/lib/VMCore/Verifier.cpp:1.138  Thu Jan 12 00:17:59 2006
+++ llvm/lib/VMCore/Verifier.cppThu Jan 12 20:15:39 2006
@@ -796,6 +796,18 @@
   case Intrinsic::memmove: NumArgs = 4; break;
   case Intrinsic::memset:  NumArgs = 4; break;
 
+  case Intrinsic::stacksave:
+NumArgs = 0;
+Assert1(CI.getType() == PointerType::get(Type::SByteTy),
+llvm.stacksave must return an sbyte*, CI);
+break;
+  case Intrinsic::stackrestore:
+NumArgs = 1;
+Assert1(CI.getOperand(1)-getType() == PointerType::get(Type::SByteTy),
+llvm.stackrestore must take an sbyte*, CI);
+Assert1(CI.getType() == Type::VoidTy,
+llvm.stackrestore return void, CI);
+break;
   case Intrinsic::prefetch:NumArgs = 3; break;
   case Intrinsic::pcmarker:
 NumArgs = 1;



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


[llvm-commits] CVS: llvm/test/Regression/CodeGen/stacksave-restore.ll

2006-01-12 Thread Chris Lattner


Changes in directory llvm/test/Regression/CodeGen:

stacksave-restore.ll added (r1.1)
---
Log message:

testcase for the llvm.stacksave/llvm.stackrestore intrinsics.


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

 stacksave-restore.ll |   12 
 1 files changed, 12 insertions(+)


Index: llvm/test/Regression/CodeGen/stacksave-restore.ll
diff -c /dev/null llvm/test/Regression/CodeGen/stacksave-restore.ll:1.1
*** /dev/null   Thu Jan 12 20:25:18 2006
--- llvm/test/Regression/CodeGen/stacksave-restore.ll   Thu Jan 12 20:25:08 2006
***
*** 0 
--- 1,12 
+ ; RUN: llvm-as  %s | llc
+ 
+ declare sbyte* %llvm.stacksave()
+ declare void %llvm.stackrestore(sbyte*)
+ 
+ int *%test(uint %N) {
+   %tmp = call sbyte* %llvm.stacksave()
+   %P = alloca int, uint %N
+   call void %llvm.stackrestore(sbyte* %tmp)
+   %Q = alloca int, uint %N
+   ret int* %P
+ }



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


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

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen:

IntrinsicLowering.cpp updated: 1.36 - 1.37
---
Log message:

Add support for the llvm.stacksave/stackrestore intrinsics, this is
used by the C backend.


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

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


Index: llvm/lib/CodeGen/IntrinsicLowering.cpp
diff -u llvm/lib/CodeGen/IntrinsicLowering.cpp:1.36 
llvm/lib/CodeGen/IntrinsicLowering.cpp:1.37
--- llvm/lib/CodeGen/IntrinsicLowering.cpp:1.36 Fri Nov 11 10:46:18 2005
+++ llvm/lib/CodeGen/IntrinsicLowering.cpp  Thu Jan 12 20:22:08 2006
@@ -248,6 +248,19 @@
 break;
   }
 
+  case Intrinsic::stacksave:
+  case Intrinsic::stackrestore: {
+static bool Warned = false;
+if (!Warned)
+  std::cerr  WARNING: this target does not support the llvm.stack
+(Callee-getIntrinsicID() == Intrinsic::stacksave ?
+   save : restore)   intrinsic.\n;
+Warned = true;
+if (Callee-getIntrinsicID() == Intrinsic::stacksave)
+  CI-replaceAllUsesWith(Constant::getNullValue(CI-getType()));
+break;
+  }
+
   case Intrinsic::returnaddress:
   case Intrinsic::frameaddress:
 std::cerr  WARNING: this target does not support the llvm.
@@ -263,8 +276,8 @@
   case Intrinsic::pcmarker:
 break;// Simply strip out pcmarker on unsupported architectures
   case Intrinsic::readcyclecounter: {
-std::cerr  WARNING: this target does not support the 
llvm.readcyclecounter
-intrinsic.  It is being lowered to a constant 0\n;
+std::cerr  WARNING: this target does not support the llvm.readcyclecoun
+   ter intrinsic.  It is being lowered to a constant 0\n;
 CI-replaceAllUsesWith(ConstantUInt::get(Type::ULongTy, 0));
 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/IA64ISelLowering.cpp IA64ISelPattern.cpp

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/Target/IA64:

IA64ISelLowering.cpp updated: 1.18 - 1.19
IA64ISelPattern.cpp updated: 1.74 - 1.75
---
Log message:

new nodes


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

 IA64ISelLowering.cpp |4 
 IA64ISelPattern.cpp  |4 
 2 files changed, 8 insertions(+)


Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp
diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.18 
llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.19
--- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.18  Wed Jan 11 21:28:40 2006
+++ llvm/lib/Target/IA64/IA64ISelLowering.cpp   Thu Jan 12 20:40:58 2006
@@ -83,6 +83,10 @@
   setOperationAction(ISD::ROTL , MVT::i64  , Expand);
   setOperationAction(ISD::ROTR , MVT::i64  , Expand);
 
+  // Not implemented yet.
+  setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
+  setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
+
   computeRegisterProperties();
 
   addLegalFPImmediate(+0.0);


Index: llvm/lib/Target/IA64/IA64ISelPattern.cpp
diff -u llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.74 
llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.75
--- llvm/lib/Target/IA64/IA64ISelPattern.cpp:1.74   Wed Jan 11 17:20:28 2006
+++ llvm/lib/Target/IA64/IA64ISelPattern.cppThu Jan 12 20:40:58 2006
@@ -107,6 +107,10 @@
   setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
   setOperationAction(ISD::DEBUG_LABEL, MVT::Other, Expand);
 
+  // Not implemented yet.
+  setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); 
+  setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
+
   computeRegisterProperties();
 
   addLegalFPImmediate(+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/PowerPC/PPCISelLowering.cpp

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCISelLowering.cpp updated: 1.63 - 1.64
---
Log message:

expand unsupported stacksave/stackrestore nodes


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

 PPCISelLowering.cpp |4 
 1 files changed, 4 insertions(+)


Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.63 
llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.64
--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.63Wed Jan 11 15:21:00 2006
+++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp Thu Jan 12 20:42:53 2006
@@ -108,6 +108,10 @@
   // appropriate instructions to materialize the address.
   setOperationAction(ISD::GlobalAddress, MVT::i32, Custom);
   setOperationAction(ISD::ConstantPool,  MVT::i32, Custom);
+
+  // Not implemented yet.
+  setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); 
+  setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
   
   if (TM.getSubtargetPPCSubtarget().is64Bit()) {
 // They also have instructions for converting between i64 and fp.



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


[llvm-commits] CVS: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/Target/SparcV8:

SparcV8ISelDAGToDAG.cpp updated: 1.48 - 1.49
---
Log message:

expand unsupported stacksave/stackrestore nodes


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

 SparcV8ISelDAGToDAG.cpp |4 
 1 files changed, 4 insertions(+)


Index: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp
diff -u llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.48 
llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.49
--- llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.48Thu Jan 12 
11:05:32 2006
+++ llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp Thu Jan 12 20:42:53 2006
@@ -160,6 +160,10 @@
   setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
   setOperationAction(ISD::DEBUG_LABEL, MVT::Other, Expand);
 
+  // Not implemented yet.
+  setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); 
+  setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
+
   computeRegisterProperties();
 }
 



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


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

2006-01-12 Thread Chris Lattner


Changes in directory llvm/include/llvm/CodeGen:

SelectionDAGNodes.h updated: 1.89 - 1.90
---
Log message:

add stacksave/stackrestore nodes


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

 SelectionDAGNodes.h |9 +
 1 files changed, 9 insertions(+)


Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h
diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.89 
llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.90
--- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.89  Wed Jan 11 15:21:00 2006
+++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h   Thu Jan 12 20:39:03 2006
@@ -312,6 +312,15 @@
 CALL,
 TAILCALL,
 
+// STACKSAVE - STACKSAVE has one operand, an input chain.  It produces a
+// value, the same type as the pointer type for the system, and an output
+// chain.
+STACKSAVE,
+
+// STACKRESTORE has two operands, an input chain and a pointer to restore 
to
+// it returns an output chain.
+STACKRESTORE,
+
 // MEMSET/MEMCPY/MEMMOVE - The first operand is the chain, and the rest
 // correspond to the operands of the LLVM intrinsic functions.  The only
 // result is a token chain.  The alignment argument is guaranteed to be a



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


[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp

2006-01-12 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.37 - 1.38
---
Log message:

expand unsupported stacksave/stackrestore nodes


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

 X86ISelLowering.cpp |4 
 1 files changed, 4 insertions(+)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.37 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.38
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.37Thu Jan 12 19:17:24 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu Jan 12 20:42:53 2006
@@ -159,6 +159,10 @@
   setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand);
   setOperationAction(ISD::DEBUG_LABEL, MVT::Other, Expand);
 
+  // Not implemented yet.
+  setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); 
+  setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
+
   if (X86ScalarSSE) {
 // Set up the FP register classes.
 addRegisterClass(MVT::f32, X86::FR32RegisterClass);



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