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

2007-05-01 Thread Nate Begeman


Changes in directory llvm/utils/TableGen:

RegisterInfoEmitter.cpp updated: 1.53 - 1.54
---
Log message:

A bit of feedback from Chris that I missed; error rather than asserting.


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

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


Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.53 
llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.54
--- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.53Tue May  1 00:57:02 2007
+++ llvm/utils/TableGen/RegisterInfoEmitter.cpp Tue May  1 01:08:36 2007
@@ -450,8 +450,11 @@
 std::vectorRecord* From = SubRegs[i]-getValueAsListOfDefs(From);
 std::vectorRecord* To   = SubRegs[i]-getValueAsListOfDefs(To);
 
-assert((From.size() == To.size())  
-   SubRegSet has mismatched from/to size);
+if (From.size() != To.size()) {
+  cerr  Error: register list and sub-register list not of equal length
+ in SubRegSet\n;
+  exit(1);
+}
 
 // For each entry in from/to vectors, insert the to register at index 
 for (unsigned ii = 0, ee = From.size(); ii != ee; ++ii)



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


[llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Reader:

BitcodeReader.cpp updated: 1.20 - 1.21
BitcodeReader.h updated: 1.14 - 1.15
---
Log message:

handle function-level forward references, read binops.


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

 BitcodeReader.cpp |  150 ++
 BitcodeReader.h   |   19 ++
 2 files changed, 147 insertions(+), 22 deletions(-)


Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.20 
llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.21
--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.20  Tue May  1 00:52:21 2007
+++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp   Tue May  1 02:01:57 2007
@@ -15,6 +15,7 @@
 #include BitcodeReader.h
 #include llvm/Constants.h
 #include llvm/DerivedTypes.h
+#include llvm/Instructions.h
 #include llvm/Module.h
 #include llvm/ADT/SmallString.h
 #include llvm/Support/MathExtras.h
@@ -125,10 +126,9 @@
 NumOperands = Idx+1;
   }
 
-  if (Uses[Idx]) {
-assert(Ty == getOperand(Idx)-getType() 
-   Type mismatch in constant table!);
-return castConstant(getOperand(Idx));
+  if (Value *V = Uses[Idx]) {
+assert(Ty == V-getType()  Type mismatch in constant table!);
+return castConstant(V);
   }
 
   // Create and return a placeholder, which will later be RAUW'd.
@@ -137,6 +137,25 @@
   return C;
 }
 
+Value *BitcodeReaderValueList::getValueFwdRef(unsigned Idx, const Type *Ty) {
+  if (Idx = size()) {
+// Insert a bunch of null values.
+Uses.resize(Idx+1);
+OperandList = Uses[0];
+NumOperands = Idx+1;
+  }
+  
+  if (Value *V = Uses[Idx]) {
+assert((Ty == 0 || Ty == V-getType())  Type mismatch in value table!);
+return V;
+  }
+  
+  // Create and return a placeholder, which will later be RAUW'd.
+  Value *V = new Argument(Ty);
+  Uses[Idx].init(V, this);
+  return V;
+}
+
 
 const Type *BitcodeReader::getTypeByID(unsigned ID, bool isTypeTable) {
   // If the TypeID is in range, return it.
@@ -151,7 +170,6 @@
   return TypeList.back().get();
 }
 
-
 bool BitcodeReader::ParseTypeTable() {
   if (Stream.EnterSubBlock())
 return Error(Malformed block record);
@@ -643,18 +661,7 @@
 }
 }
 
-if (NextCstNo == ValueList.size())
-  ValueList.push_back(V);
-else if (ValueList[NextCstNo] == 0)
-  ValueList.initVal(NextCstNo, V);
-else {
-  // If there was a forward reference to this constant, 
-  Value *OldV = ValueList[NextCstNo];
-  ValueList.setOperand(NextCstNo, V);
-  OldV-replaceAllUsesWith(V);
-  delete OldV;
-}
-
+ValueList.AssignValue(V, NextCstNo);
 ++NextCstNo;
   }
 }
@@ -998,6 +1005,8 @@
   for(Function::arg_iterator I = F-arg_begin(), E = F-arg_end(); I != E; ++I)
 ValueList.push_back(I);
   
+  unsigned NextValueNo = ValueList.size();
+  
   // Read all the records.
   SmallVectoruint64_t, 64 Record;
   while (1) {
@@ -1016,6 +1025,7 @@
 break;
   case bitc::CONSTANTS_BLOCK_ID:
 if (ParseConstants()) return true;
+NextValueNo = ValueList.size();
 break;
   case bitc::VALUE_SYMTAB_BLOCK_ID:
 if (ParseValueSymbolTable()) return true;
@@ -1031,19 +1041,115 @@
 
 // Read a record.
 Record.clear();
+Instruction *I = 0;
+BasicBlock *CurBB = 0;
+unsigned CurBBNo = 0;
 switch (Stream.ReadRecord(Code, Record)) {
-default:  // Default behavior: unknown constant
+default: // Default behavior: reject
+  return Error(Unknown instruction);
 case bitc::FUNC_CODE_DECLAREBLOCKS: // DECLAREBLOCKS: [nblocks]
-  if (Record.size()  1)
-return Error(Invalid FUNC_CODE_DECLAREBLOCKS record);
+  if (Record.size()  1 || Record[0] == 0)
+return Error(Invalid DECLAREBLOCKS record);
   // Create all the basic blocks for the function.
   FunctionBBs.resize(Record.size());
   for (unsigned i = 0, e = FunctionBBs.size(); i != e; ++i)
 FunctionBBs[i] = new BasicBlock(, F);
-  break;
-}
+  CurBB = FunctionBBs[0];
+  continue;
+  
+case bitc::FUNC_CODE_INST_BINOP: {
+  // BINOP:  [opcode, ty, opval, opval]
+  if (Record.size()  4) return Error(Invalid BINOP record);
+  const Type *Ty = getTypeByID(Record[1]);
+  int Opc = GetDecodedBinaryOpcode(Record[0], Ty);
+  Value *LHS = getFnValueByID(Record[2], Ty);
+  Value *RHS = getFnValueByID(Record[3], Ty);
+  if (Opc == -1 || Ty == 0 || LHS == 0 || RHS == 0)
+ return Error(Invalid BINOP record);
+  I = BinaryOperator::create((Instruction::BinaryOps)Opc, LHS, RHS);
+  break;
+}
+#if 0
+case bitc::FUNC_CODE_INST_CAST:
+  // CAST:   [opcode, ty, opty, opval]
+case bitc::FUNC_CODE_INST_GEP:
+  // GEP:[n, n x operands]
+case bitc::FUNC_CODE_INST_SELECT:
+  // SELECT: [ty, opval, opval, opval]
+case bitc::FUNC_CODE_INST_EXTRACTELT:
+  // EXTRACTELT: [opty, opval, opval]
+

[llvm-commits] CVS: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Writer:

BitcodeWriter.cpp updated: 1.18 - 1.19
---
Log message:

fix build with non-buggy compilers


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

 BitcodeWriter.cpp |   21 +++--
 1 files changed, 11 insertions(+), 10 deletions(-)


Index: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff -u llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.18 
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.19
--- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.18  Mon Apr 30 21:14:57 2007
+++ llvm/lib/Bitcode/Writer/BitcodeWriter.cpp   Tue May  1 02:03:37 2007
@@ -571,7 +571,7 @@
 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
   Vals.push_back(VE.getValueID(I.getOperand(i)));
 break;
-  case Instruction::Invoke:
+  case Instruction::Invoke: {
 Code = bitc::FUNC_CODE_INST_INVOKE;
 // FIXME: param attrs
 Vals.push_back(VE.getTypeID(I.getOperand(0)-getType()));
@@ -596,6 +596,7 @@
   }
 }
 break;
+  }
   case Instruction::Unwind:
 Code = bitc::FUNC_CODE_INST_UNWIND;
 break;
@@ -658,18 +659,18 @@
 for (unsigned i = 0, e = FTy-getNumParams(); i != e; ++i)
   Vals.push_back(VE.getValueID(I.getOperand(i+1)));  // fixed param.
   
-  // Emit type/value pairs for varargs params.
-  if (FTy-isVarArg()) {
-unsigned NumVarargs = I.getNumOperands()-1-FTy-getNumParams();
-Vals.push_back(NumVarargs);
-for (unsigned i = I.getNumOperands()-NumVarargs, e = 
I.getNumOperands();
- i != e; ++i) {
-  Vals.push_back(VE.getTypeID(I.getOperand(i)-getType()));
-  Vals.push_back(VE.getValueID(I.getOperand(i)));
-}
+// Emit type/value pairs for varargs params.
+if (FTy-isVarArg()) {
+  unsigned NumVarargs = I.getNumOperands()-1-FTy-getNumParams();
+  Vals.push_back(NumVarargs);
+  for (unsigned i = I.getNumOperands()-NumVarargs, e = I.getNumOperands();
+   i != e; ++i) {
+Vals.push_back(VE.getTypeID(I.getOperand(i)-getType()));
+Vals.push_back(VE.getValueID(I.getOperand(i)));
   }
 }
 break;
+  }
 
   case Instruction::VAArg:
 Code = bitc::FUNC_CODE_INST_VAARG;



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


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

2007-05-01 Thread Evan Cheng
Doh. Brain cramp.

Evan
On Apr 30, 2007, at 9:39 PM, Chris Lattner wrote:

 +bool HasUses = false;
 +SmallVectorMVT::ValueType, 2 VTs;
 +for (unsigned i = 0, e = N-getNumValues(); i != e; ++i) {
 +  if (!N-hasNUsesOfValue(0, i)) {
 +HasUses = true;
 +break;
 +  }
 +  VTs.push_back(N-getValueType(i));
 +}
 +if (!HasUses) {
 +  SmallVectorSDOperand, 1 Ops;
 +  return CombineTo(N, DAG.getNode(ISD::UNDEF, VTs[0], VTs.size
 (), 0, 0),
 +   Chain);

 This can never trigger and isn't right if it did.

 #1: This should trigger if the chain has uses but the other values do
 not.  If the entire node is dead, it will already have been removed.

 #2. you can't create an undef with multiple results, you have to
 create multiple undefs :)

 I'd suggest just writing this as:

if (N-getValueType(1) == MVT::Other) {
  // single result case.
} else {
  assert(N-getValueType(2) == MVT::Other);
  // multi result case.
}

 This lets you drop the looping and smallvector.

 -Chris

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

___
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/RegisterScavenging.h

2007-05-01 Thread Evan Cheng


Changes in directory llvm/include/llvm/CodeGen:

RegisterScavenging.h updated: 1.12 - 1.13
---
Log message:

Pass call frame setup SP adjustment along to eliminateFrameIndex().

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

 RegisterScavenging.h |   11 ++-
 1 files changed, 6 insertions(+), 5 deletions(-)


Index: llvm/include/llvm/CodeGen/RegisterScavenging.h
diff -u llvm/include/llvm/CodeGen/RegisterScavenging.h:1.12 
llvm/include/llvm/CodeGen/RegisterScavenging.h:1.13
--- llvm/include/llvm/CodeGen/RegisterScavenging.h:1.12 Mon Mar 26 17:23:54 2007
+++ llvm/include/llvm/CodeGen/RegisterScavenging.h  Tue May  1 03:59:18 2007
@@ -117,12 +117,13 @@
   int getScavengingFrameIndex() const { return ScavengingFrameIndex; }
 
   /// scavengeRegister - Make a register of the specific register class
-  /// available and do the appropriate bookkeeping. Returns the scavenged
-  /// register.
+  /// available and do the appropriate bookkeeping. SPAdj is the stack
+  /// adjustment due to call frame, it's passed along to eliminateFrameIndex().
+  /// Returns the scavenged register.
   unsigned scavengeRegister(const TargetRegisterClass *RegClass,
-MachineBasicBlock::iterator I);
-  unsigned scavengeRegister(const TargetRegisterClass *RegClass) {
-return scavengeRegister(RegClass, MBBI);
+MachineBasicBlock::iterator I, int SPAdj);
+  unsigned scavengeRegister(const TargetRegisterClass *RegClass, int SPAdj) {
+return scavengeRegister(RegClass, MBBI, SPAdj);
   }
 
 private:



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


[llvm-commits] CVS: llvm/lib/Target/Sparc/SparcRegisterInfo.cpp SparcRegisterInfo.h

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/Sparc:

SparcRegisterInfo.cpp updated: 1.58 - 1.59
SparcRegisterInfo.h updated: 1.23 - 1.24
---
Log message:

eliminateFrameIndex() change.

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

 SparcRegisterInfo.cpp |4 +++-
 SparcRegisterInfo.h   |2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/Sparc/SparcRegisterInfo.cpp
diff -u llvm/lib/Target/Sparc/SparcRegisterInfo.cpp:1.58 
llvm/lib/Target/Sparc/SparcRegisterInfo.cpp:1.59
--- llvm/lib/Target/Sparc/SparcRegisterInfo.cpp:1.58Tue Mar 20 03:08:48 2007
+++ llvm/lib/Target/Sparc/SparcRegisterInfo.cpp Tue May  1 04:13:03 2007
@@ -165,7 +165,9 @@
 }
 
 void SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-RegScavenger *RS) const {
+int SPAdj, RegScavenger *RS) const 
{
+  assert(SPAdj == 0  Unexpected);
+
   unsigned i = 0;
   MachineInstr MI = *II;
   while (!MI.getOperand(i).isFrameIndex()) {


Index: llvm/lib/Target/Sparc/SparcRegisterInfo.h
diff -u llvm/lib/Target/Sparc/SparcRegisterInfo.h:1.23 
llvm/lib/Target/Sparc/SparcRegisterInfo.h:1.24
--- llvm/lib/Target/Sparc/SparcRegisterInfo.h:1.23  Tue Mar 20 03:08:48 2007
+++ llvm/lib/Target/Sparc/SparcRegisterInfo.h   Tue May  1 04:13:03 2007
@@ -64,7 +64,7 @@
  MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-   RegScavenger *RS = NULL) const;
+   int SPAdj, RegScavenger *RS = NULL) const;
 
   void processFunctionBeforeFrameFinalized(MachineFunction MF) const;
 



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


[llvm-commits] CVS: llvm/lib/Target/ARM/ARMRegisterInfo.cpp ARMRegisterInfo.h

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/ARM:

ARMRegisterInfo.cpp updated: 1.91 - 1.92
ARMRegisterInfo.h updated: 1.18 - 1.19
---
Log message:

eliminateFrameIndex() change.

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

 ARMRegisterInfo.cpp |7 ---
 ARMRegisterInfo.h   |2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/ARM/ARMRegisterInfo.cpp
diff -u llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.91 
llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.92
--- llvm/lib/Target/ARM/ARMRegisterInfo.cpp:1.91Mon Apr 30 19:52:08 2007
+++ llvm/lib/Target/ARM/ARMRegisterInfo.cpp Tue May  1 04:13:03 2007
@@ -689,7 +689,7 @@
 }
 
 void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-  RegScavenger *RS) const{
+  int SPAdj, RegScavenger *RS) const{
   unsigned i = 0;
   MachineInstr MI = *II;
   MachineBasicBlock MBB = *MI.getParent();
@@ -705,7 +705,7 @@
   unsigned FrameReg = ARM::SP;
   int FrameIndex = MI.getOperand(i).getFrameIndex();
   int Offset = MF.getFrameInfo()-getObjectOffset(FrameIndex) + 
-   MF.getFrameInfo()-getStackSize();
+   MF.getFrameInfo()-getStackSize() + SPAdj;
 
   if (AFI-isGPRCalleeSavedArea1Frame(FrameIndex))
 Offset -= AFI-getGPRCalleeSavedArea1Offset();
@@ -714,6 +714,7 @@
   else if (AFI-isDPRCalleeSavedAreaFrame(FrameIndex))
 Offset -= AFI-getDPRCalleeSavedAreaOffset();
   else if (hasFP(MF)) {
+assert(SPAdj == 0  Unexpected);
 // There is alloca()'s in this function, must reference off the frame
 // pointer instead.
 FrameReg = getFrameRegister(MF);
@@ -988,7 +989,7 @@
 unsigned ScratchReg = findScratchRegister(RS, ARM::GPRRegClass, AFI);
 if (ScratchReg == 0)
   // No register is free. Scavenge a register.
-  ScratchReg = RS-scavengeRegister(ARM::GPRRegClass, II);
+  ScratchReg = RS-scavengeRegister(ARM::GPRRegClass, II, SPAdj);
 emitARMRegPlusImmediate(MBB, II, ScratchReg, FrameReg,
 isSub ? -Offset : Offset, TII);
 MI.getOperand(i).ChangeToRegister(ScratchReg, false, false, true);


Index: llvm/lib/Target/ARM/ARMRegisterInfo.h
diff -u llvm/lib/Target/ARM/ARMRegisterInfo.h:1.18 
llvm/lib/Target/ARM/ARMRegisterInfo.h:1.19
--- llvm/lib/Target/ARM/ARMRegisterInfo.h:1.18  Mon Apr 30 19:52:08 2007
+++ llvm/lib/Target/ARM/ARMRegisterInfo.h   Tue May  1 04:13:03 2007
@@ -85,7 +85,7 @@
  MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-   RegScavenger *RS = NULL) const;
+   int SPAdj, RegScavenger *RS = NULL) const;
 
   void processFunctionBeforeCalleeSavedScan(MachineFunction MF,
 RegScavenger *RS = NULL) const;



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

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/Alpha:

AlphaRegisterInfo.cpp updated: 1.65 - 1.66
AlphaRegisterInfo.h updated: 1.23 - 1.24
---
Log message:

eliminateFrameIndex() change.

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

 AlphaRegisterInfo.cpp |4 +++-
 AlphaRegisterInfo.h   |2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp
diff -u llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp:1.65 
llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp:1.66
--- llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp:1.65Mon Apr 16 13:10:22 2007
+++ llvm/lib/Target/Alpha/AlphaRegisterInfo.cpp Tue May  1 04:13:03 2007
@@ -255,7 +255,9 @@
 //- SP
 
 void AlphaRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-RegScavenger *RS) const {
+int SPAdj, RegScavenger *RS) const 
{
+  assert(SPAdj == 0  Unexpected);
+
   unsigned i = 0;
   MachineInstr MI = *II;
   MachineBasicBlock MBB = *MI.getParent();


Index: llvm/lib/Target/Alpha/AlphaRegisterInfo.h
diff -u llvm/lib/Target/Alpha/AlphaRegisterInfo.h:1.23 
llvm/lib/Target/Alpha/AlphaRegisterInfo.h:1.24
--- llvm/lib/Target/Alpha/AlphaRegisterInfo.h:1.23  Tue Mar 20 03:07:46 2007
+++ llvm/lib/Target/Alpha/AlphaRegisterInfo.h   Tue May  1 04:13:03 2007
@@ -61,7 +61,7 @@
  MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-   RegScavenger *RS = NULL) const;
+   int SPAdj, RegScavenger *RS = NULL) const;
 
   //void processFunctionBeforeFrameFinalized(MachineFunction MF) const;
 



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

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/PowerPC:

PPCRegisterInfo.cpp updated: 1.122 - 1.123
PPCRegisterInfo.h updated: 1.34 - 1.35
---
Log message:

eliminateFrameIndex() change.

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

 PPCRegisterInfo.cpp |4 +++-
 PPCRegisterInfo.h   |2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
diff -u llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.122 
llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.123
--- llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp:1.122   Wed Apr 25 17:13:27 2007
+++ llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp Tue May  1 04:13:03 2007
@@ -589,7 +589,9 @@
 }
 
 void PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-  RegScavenger *RS) const {
+  int SPAdj, RegScavenger *RS) const {
+  assert(SPAdj == 0  Unexpected);
+
   // Get the instruction.
   MachineInstr MI = *II;
   // Get the instruction's basic block.


Index: llvm/lib/Target/PowerPC/PPCRegisterInfo.h
diff -u llvm/lib/Target/PowerPC/PPCRegisterInfo.h:1.34 
llvm/lib/Target/PowerPC/PPCRegisterInfo.h:1.35
--- llvm/lib/Target/PowerPC/PPCRegisterInfo.h:1.34  Tue Mar 20 03:08:30 2007
+++ llvm/lib/Target/PowerPC/PPCRegisterInfo.h   Tue May  1 04:13:03 2007
@@ -80,7 +80,7 @@
   
   void lowerDynamicAlloc(MachineBasicBlock::iterator II) const;
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-   RegScavenger *RS = NULL) const;
+   int SPAdj, RegScavenger *RS = NULL) const;
 
   /// determineFrameLayout - Determine the size of the frame and maximum call
   /// frame size.



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

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/IA64:

IA64RegisterInfo.cpp updated: 1.35 - 1.36
IA64RegisterInfo.h updated: 1.17 - 1.18
---
Log message:

eliminateFrameIndex() change.

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

 IA64RegisterInfo.cpp |4 +++-
 IA64RegisterInfo.h   |2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/IA64/IA64RegisterInfo.cpp
diff -u llvm/lib/Target/IA64/IA64RegisterInfo.cpp:1.35 
llvm/lib/Target/IA64/IA64RegisterInfo.cpp:1.36
--- llvm/lib/Target/IA64/IA64RegisterInfo.cpp:1.35  Tue Mar 20 03:08:04 2007
+++ llvm/lib/Target/IA64/IA64RegisterInfo.cpp   Tue May  1 04:13:03 2007
@@ -177,7 +177,9 @@
 }
 
 void IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-   RegScavenger *RS)const{
+   int SPAdj, RegScavenger *RS)const{
+  assert(SPAdj == 0  Unexpected);
+
   unsigned i = 0;
   MachineInstr MI = *II;
   MachineBasicBlock MBB = *MI.getParent();


Index: llvm/lib/Target/IA64/IA64RegisterInfo.h
diff -u llvm/lib/Target/IA64/IA64RegisterInfo.h:1.17 
llvm/lib/Target/IA64/IA64RegisterInfo.h:1.18
--- llvm/lib/Target/IA64/IA64RegisterInfo.h:1.17Tue Mar 20 03:08:04 2007
+++ llvm/lib/Target/IA64/IA64RegisterInfo.h Tue May  1 04:13:03 2007
@@ -60,7 +60,7 @@
  MachineBasicBlock::iterator MI) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator MI,
-   RegScavenger *RS = NULL) const;
+   int SPAdj, RegScavenger *RS = NULL) const;
 
   void emitPrologue(MachineFunction MF) const;
   void emitEpilogue(MachineFunction MF, MachineBasicBlock MBB) const;



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

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/Target/X86:

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

Adjust correct EH-related sections


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

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


Index: llvm/lib/Target/X86/X86TargetAsmInfo.cpp
diff -u llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.36 
llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.37
--- llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.36   Wed Apr 25 09:27:10 2007
+++ llvm/lib/Target/X86/X86TargetAsmInfo.cppTue May  1 05:16:06 2007
@@ -121,6 +121,10 @@
 DwarfARangesSection = \t.section\t.debug_aranges,\\,@progbits;
 DwarfRangesSection =  \t.section\t.debug_ranges,\\,@progbits;
 DwarfMacInfoSection = \t.section\t.debug_macinfo,\\,@progbits;
+
+SupportsExceptionHandling = true;
+DwarfEHFrameSection = \t.section\t.eh_frame,\aw\,@progbits;
+DwarfExceptionSection = \t.section\t.gcc_except_table,\a\,@progbits;
 break;
 
   case X86Subtarget::isCygwin:



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

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/Target/X86:

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

Use correct PC symbol


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

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


Index: llvm/lib/Target/X86/X86TargetAsmInfo.cpp
diff -u llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.37 
llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.38
--- llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.37   Tue May  1 05:16:06 2007
+++ llvm/lib/Target/X86/X86TargetAsmInfo.cppTue May  1 05:19:31 2007
@@ -109,6 +109,8 @@
 PrivateGlobalPrefix = .L;
 WeakRefDirective = \t.weak\t;
 SetDirective = \t.set\t;
+PCSymbol = .;
+
 DwarfRequiresFrameSection = false;
 DwarfAbbrevSection =  \t.section\t.debug_abbrev,\\,@progbits;
 DwarfInfoSection =\t.section\t.debug_info,\\,@progbits;



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


[llvm-commits] ELF sections in X86AsmTargetAsm.cpp

2007-05-01 Thread Dan Gohman
The attached patch sets the section names for fixed-size constants for
ELF on x86 to match what GCC uses, and it uses the mergeable flag so
that duplicate constants can be merged.

This works for me with GAS; are there other assemblers (or linkers?)
being used with LLVM on x86 ELF targets that don't support this?
It looks like nasm/yasm wouldn't accept some of the other things
that LLVM currently emits anyway..

Dan

-- 
Dan Gohman, Cray Inc.
Index: lib/Target/X86/X86TargetAsmInfo.cpp
===
RCS file: /var/cvs/llvm/llvm/lib/Target/X86/X86TargetAsmInfo.cpp,v
retrieving revision 1.38
diff -u -r1.38 X86TargetAsmInfo.cpp
--- lib/Target/X86/X86TargetAsmInfo.cpp
+++ lib/Target/X86/X86TargetAsmInfo.cpp
@@ -106,6 +106,11 @@
 // HasDotFile - True if target asm supports .file directives.
 // bool HasDotFile; // Defaults to false.
 ReadOnlySection = \t.section\t.rodata\n;
+FourByteConstantSection = \t.section\t.rodata.cst4,\aM\,@progbits,4;
+EightByteConstantSection = \t.section\t.rodata.cst8,\aM\,@progbits,8;
+SixteenByteConstantSection =
+ \t.section\t.rodata.cst16,\aM\,@progbits,16;
+CStringSection = \t.section\t.rodata.str1.1,\aMS\,@progbits,1;
 PrivateGlobalPrefix = .L;
 WeakRefDirective = \t.weak\t;
 SetDirective = \t.set\t;
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


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

2007-05-01 Thread Chris Lattner
 Forgot about chain result; also UNDEF cannot have multiple values.

Nice! Thanks Evan,

-Chris

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

  DAGCombiner.cpp |   24 
  1 files changed, 12 insertions(+), 12 deletions(-)


 Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
 diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.297 llvm/ 
 lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.298
 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.297   Mon Apr 30  
 19:38:21 2007
 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue May  1  
 03:53:39 2007
 @@ -3331,19 +3331,19 @@
// the updated indexed value in case of indexed loads), change  
 uses of the
// chain value into uses of the chain input (i.e. delete the  
 dead load).
if (!LD-isVolatile()) {
 -bool HasUses = false;
 -SmallVectorMVT::ValueType, 2 VTs;
 -for (unsigned i = 0, e = N-getNumValues(); i != e; ++i) {
 -  if (!N-hasNUsesOfValue(0, i)) {
 -HasUses = true;
 -break;
 +if (N-getValueType(1) == MVT::Other) {
 +  // Unindexed loads.
 +  if (N-hasNUsesOfValue(0, 0))
 +return CombineTo(N, DAG.getNode(ISD::UNDEF, N-getValueType 
 (0)), Chain);
 +} else {
 +  // Indexed loads.
 +  assert(N-getValueType(2) == MVT::Other  Malformed  
 indexed loads?);
 +  if (N-hasNUsesOfValue(0, 0)  N-hasNUsesOfValue(0, 1)) {
 +SDOperand Undef0 = DAG.getNode(ISD::UNDEF, N-getValueType 
 (0));
 +SDOperand Undef1 = DAG.getNode(ISD::UNDEF, N-getValueType 
 (1));
 +SDOperand To[] = { Undef0, Undef1, Chain };
 +return CombineTo(N, To, 3);
}
 -  VTs.push_back(N-getValueType(i));
 -}
 -if (!HasUses) {
 -  SmallVectorSDOperand, 1 Ops;
 -  return CombineTo(N, DAG.getNode(ISD::UNDEF, VTs[0], VTs.size 
 (), 0, 0),
 -   Chain);
  }
}




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

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


[llvm-commits] llvm-gcc: handle TRY_CATCH_EXPR with compound-stmt for handler

2007-05-01 Thread Duncan Sands
According to the documentation, the handler for a TRY_CATCH_EXPR can be:

- A sequence of statements to execute.  When an exception occurs,
these statements are executed, and then the exception is rethrown.

- A sequence of CATCH_EXPR expressions.  Each CATCH_EXPR
has a list of applicable exception types and handler code.  If the
thrown exception matches one of the caught types, the associated
handler code is executed.  If the handler code falls off the bottom,
execution continues after the original TRY_CATCH_EXPR.

- An EH_FILTER_EXPR expression.  This has a list of
permitted exception types, and code to handle a match failure.  If the
thrown exception does not match one of the allowed types, the
associated match failure code is executed.  If the thrown exception
does match, it continues unwinding the stack looking for the next
handler.

However GatherTypeInfo wasn't expecting the first case, causing a crash
when building the C++ runtime.  Fix and testcase attached.

Ciao,

Duncan.
Index: gcc.llvm/gcc/llvm-convert.cpp
===
--- gcc.llvm.orig/gcc/llvm-convert.cpp	2007-05-01 16:13:22.0 +0200
+++ gcc.llvm/gcc/llvm-convert.cpp	2007-05-01 18:51:29.0 +0200
@@ -1868,11 +1868,12 @@
 TypeInfos.push_back(TypeInfo);
   }
 }
-  } else {
-assert(TREE_CODE(exp) == STATEMENT_LIST  Need an exp with typeinfo);
-// Each statement in the statement list will be a catch.
+  } else if (TREE_CODE(exp) == STATEMENT_LIST) {
+// Each statement in the statement list will be a catch, or none will.
 for (tree_stmt_iterator I = tsi_start(exp); !tsi_end_p(I); tsi_next(I))
   GatherTypeInfo(tsi_stmt(I), TypeInfos);
+  } else {
+assert(TypeInfos.empty()  Need an exp with typeinfo);
   }
 }
 
// RUN: %llvmgxx -S %s -o /dev/null

#include locale

namespace std 
{
  codecvtchar, char, mbstate_t::
  codecvt(size_t __refs)
  : __codecvt_abstract_basechar, char, mbstate_t(__refs),
  _M_c_locale_codecvt(_S_get_c_locale())
  { }
}
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [126768] improve support for __builtin_extract_return_address and

2007-05-01 Thread clattner
Revision: 126768
Author:   clattner
Date: 2007-05-01 10:59:57 -0700 (Tue, 01 May 2007)

Log Message:
---
improve support for __builtin_extract_return_address and
__builtin_frob_return_address (?) for most targets.

This is one step towards solving PR1375, though it is not
correct for ARM, SPARC, MIPS etc.

Patch by Anton K!

Modified Paths:
--
apple-local/branches/llvm/gcc/llvm-convert.cpp
apple-local/branches/llvm/gcc/llvm-internal.h

Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp
===
--- apple-local/branches/llvm/gcc/llvm-convert.cpp  2007-05-01 17:49:23 UTC 
(rev 126767)
+++ apple-local/branches/llvm/gcc/llvm-convert.cpp  2007-05-01 17:59:57 UTC 
(rev 126768)
@@ -4071,6 +4071,10 @@
   case BUILT_IN_RETURN_ADDRESS: return EmitBuiltinReturnAddr(exp, 
Result,false);
   case BUILT_IN_STACK_SAVE: return EmitBuiltinStackSave(exp, Result);
   case BUILT_IN_STACK_RESTORE:  return EmitBuiltinStackRestore(exp);
+  case BUILT_IN_EXTRACT_RETURN_ADDR:
+   return EmitBuiltinExtractReturnAddr(exp, Result);
+  case BUILT_IN_FROB_RETURN_ADDR:
+   return EmitBuiltinFrobReturnAddr(exp, Result);
 
 #define HANDLE_UNARY_FP(F32, F64, V) \
 Result = EmitBuiltinUnaryFPOp(V, Intrinsic::F32, Intrinsic::F64)
@@ -4162,8 +4166,6 @@
 case BUILT_IN_DWARF_SP_COLUMN:
 case BUILT_IN_INIT_DWARF_REG_SIZES:
 #endif
-case BUILT_IN_FROB_RETURN_ADDR:
-case BUILT_IN_EXTRACT_RETURN_ADDR:
 case BUILT_IN_EH_RETURN:
 #ifdef EH_RETURN_DATA_REGNO
 case BUILT_IN_EH_RETURN_DATA_REGNO:
@@ -4404,6 +4406,39 @@
   return true;
 }
 
+bool TreeToLLVM::EmitBuiltinExtractReturnAddr(tree exp, Value *Result) {
+  tree arglist = TREE_OPERAND(exp, 1);
+
+  Value *Ptr = Emit(TREE_VALUE(arglist), 0);
+
+  // FIXME: Actually we should do something like this:
+  //
+  // Result = (Ptr  MASK_RETURN_ADDR) + RETURN_ADDR_OFFSET, if mask and
+  // offset are defined. This seems to be needed for: ARM, MIPS, Sparc.
+  // Unfortunately, these constants are defined as RTL expressions and
+  // should be handled separately.
+  
+  Result = CastToType(Instruction::BitCast, Ptr, 
PointerType::get(Type::Int8Ty));
+
+  return true;
+}
+
+bool TreeToLLVM::EmitBuiltinFrobReturnAddr(tree exp, Value *Result) {
+  tree arglist = TREE_OPERAND(exp, 1);
+
+  Value *Ptr = Emit(TREE_VALUE(arglist), 0);
+
+  // FIXME: Actually we should do something like this:
+  //
+  // Result = Ptr - RETURN_ADDR_OFFSET, if offset is defined. This seems to be
+  // needed for: MIPS, Sparc.  Unfortunately, these constants are defined
+  // as RTL expressions and should be handled separately.
+  
+  Result = CastToType(Instruction::BitCast, Ptr, 
PointerType::get(Type::Int8Ty));
+
+  return true;
+}
+
 bool TreeToLLVM::EmitBuiltinStackSave(tree exp, Value *Result) {
   tree arglist = TREE_OPERAND(exp, 1);
   if (!validate_arglist(arglist, VOID_TYPE))

Modified: apple-local/branches/llvm/gcc/llvm-internal.h
===
--- apple-local/branches/llvm/gcc/llvm-internal.h   2007-05-01 17:49:23 UTC 
(rev 126767)
+++ apple-local/branches/llvm/gcc/llvm-internal.h   2007-05-01 17:59:57 UTC 
(rev 126768)
@@ -524,6 +524,8 @@
   bool EmitBuiltinBZero(tree_node *exp, Value *Result);
   bool EmitBuiltinPrefetch(tree_node *exp);
   bool EmitBuiltinReturnAddr(tree_node *exp, Value *Result, bool isFrame);
+  bool EmitBuiltinExtractReturnAddr(tree_node *exp, Value *Result);
+  bool EmitBuiltinFrobReturnAddr(tree_node *exp, Value *Result);
   bool EmitBuiltinStackSave(tree_node *exp, Value *Result);
   bool EmitBuiltinStackRestore(tree_node *exp);
 


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


[llvm-commits] [126769] From Duncan Sands:

2007-05-01 Thread clattner
Revision: 126769
Author:   clattner
Date: 2007-05-01 11:46:41 -0700 (Tue, 01 May 2007)

Log Message:
---
From Duncan Sands:

According to the documentation, the handler for a TRY_CATCH_EXPR can be:

- A sequence of statements to execute.  When an exception occurs,
these statements are executed, and then the exception is rethrown.

- A sequence of CATCH_EXPR expressions.  Each CATCH_EXPR
has a list of applicable exception types and handler code.  If the
thrown exception matches one of the caught types, the associated
handler code is executed.  If the handler code falls off the bottom,
execution continues after the original TRY_CATCH_EXPR.

- An EH_FILTER_EXPR expression.  This has a list of
permitted exception types, and code to handle a match failure.  If the
thrown exception does not match one of the allowed types, the
associated match failure code is executed.  If the thrown exception
does match, it continues unwinding the stack looking for the next
handler.

However GatherTypeInfo wasn't expecting the first case, causing a crash
when building the C++ runtime.  Fix and testcase attached.

Testcase here: C++Frontend/2007-04-31-TryCatch.cpp

Modified Paths:
--
apple-local/branches/llvm/gcc/llvm-convert.cpp

Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp
===
--- apple-local/branches/llvm/gcc/llvm-convert.cpp  2007-05-01 17:59:57 UTC 
(rev 126768)
+++ apple-local/branches/llvm/gcc/llvm-convert.cpp  2007-05-01 18:46:41 UTC 
(rev 126769)
@@ -1868,11 +1868,12 @@
 TypeInfos.push_back(TypeInfo);
   }
 }
-  } else {
-assert(TREE_CODE(exp) == STATEMENT_LIST  Need an exp with typeinfo);
-// Each statement in the statement list will be a catch.
+  } else if (TREE_CODE(exp) == STATEMENT_LIST) {
+// Each statement in the statement list will be a catch, or none will.
 for (tree_stmt_iterator I = tsi_start(exp); !tsi_end_p(I); tsi_next(I))
   GatherTypeInfo(tsi_stmt(I), TypeInfos);
+  } else {
+assert(TypeInfos.empty()  Need an exp with typeinfo);
   }
 }
 


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


[llvm-commits] CVS: llvm/test/C++Frontend/2007-04-31-TryCatch.cpp

2007-05-01 Thread Duncan Sands


Changes in directory llvm/test/C++Frontend:

2007-04-31-TryCatch.cpp added (r1.1)
---
Log message:

Test handling of TRY_CATCH_EXPRs for which the handler is a sequence of
ordinary statements, rather than a list of CATCH_EXPRs or an EH_FILTER_EXPR.


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

 2007-04-31-TryCatch.cpp |   12 
 1 files changed, 12 insertions(+)


Index: llvm/test/C++Frontend/2007-04-31-TryCatch.cpp
diff -c /dev/null llvm/test/C++Frontend/2007-04-31-TryCatch.cpp:1.1
*** /dev/null   Tue May  1 13:49:40 2007
--- llvm/test/C++Frontend/2007-04-31-TryCatch.cpp   Tue May  1 13:49:30 2007
***
*** 0 
--- 1,12 
+ // RUN: %llvmgxx -S %s -o /dev/null
+ 
+ #include locale
+ 
+ namespace std 
+ {
+   codecvtchar, char, mbstate_t::
+   codecvt(size_t __refs)
+   : __codecvt_abstract_basechar, char, mbstate_t(__refs),
+   _M_c_locale_codecvt(_S_get_c_locale())
+   { }
+ }



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


Re: [llvm-commits] Patch for bug in llvm-ld

2007-05-01 Thread Chris Lattner
On Apr 30, 2007, at 6:45 AM, jlh wrote:
 Hello!

 I've been told to send this here.  In tools/llvm-ld/llvm-ld.cpp,
 line 360, a const char* to a temporary std::string is being
 stored, with the string going out of scope right after, making
 that pointer invalid.

 std::string lib_name = -l + LinkItems[index].first;
 args.push_back(lib_name.c_str());
 end of scope

Thanks, but this doesn't seem safe.  If the args_temp vector is  
reallocated, it will move all the std::string objects, invalidating  
the pointers.

-Chris

 The attached patch fixes this in a simple way.

 jlh
 Index: llvm-ld.cpp
 ===
 RCS file: /var/cvs/llvm/llvm/tools/llvm-ld/llvm-ld.cpp,v
 retrieving revision 1.51
 diff -u -r1.51 llvm-ld.cpp
 --- llvm-ld.cpp   29 Apr 2007 23:59:47 -  1.51
 +++ llvm-ld.cpp   30 Apr 2007 13:34:21 -
 @@ -330,6 +330,9 @@
//  We can't just assemble and link the file with the system  
 assembler
//  and linker because we don't know where to put the _start  
 symbol.
//  GCC mysteriously knows how to do it.
 +
 +  // args_temp is for storing temporary strings while we have a  
 const char * to them
 +  std::vectorstd::string args_temp;
std::vectorconst char* args;
args.push_back(gcc.c_str());
args.push_back(-fno-strict-aliasing);
 @@ -354,8 +357,8 @@
for (unsigned index = 0; index  LinkItems.size(); index++)
  if (LinkItems[index].first != crtend) {
if (LinkItems[index].second) {
 -std::string lib_name = -l + LinkItems[index].first;
 -args.push_back(lib_name.c_str());
 +args_temp.push_back(-l + LinkItems[index].first);
 +args.push_back(args_temp.back().c_str());
} else
  args.push_back(LinkItems[index].first.c_str());
  }
 ___
 llvm-commits mailing list
 llvm-commits@cs.uiuc.edu
 http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

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


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

2007-05-01 Thread Christopher Lamb

Hi Nate,

Could you look into the possibility of re-using the sub/super  
register support that Evan recently added? This may prevent much  
duplication of information in the RegisterInfo.td, especially for  
targets with vector registers that have many subregisters.


I believe that sub/super register generator unions the set of sub/ 
super registers in a deterministic fashion and produces the necessary  
tables in the RegisterInfo.inc already. The only thing is that this  
would make the sub register index implicit in the ordering of the sub  
register list in the RegisterInfo.td.


Also, would it be possible to emit the information gathered as table  
lookups rather than a massive two level switch statement? I believe  
all the information to get the necessary mappings should be available.


--
Christopher Lamb


On May 1, 2007, at 12:57 AM, Nate Begeman wrote:




Changes in directory llvm/utils/TableGen:

RegisterInfoEmitter.cpp updated: 1.52 - 1.53
---
Log message:

llvm bug #1350, parts 1, 2, and 3.


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

 RegisterInfoEmitter.cpp |   36 
 1 files changed, 36 insertions(+)


Index: llvm/utils/TableGen/RegisterInfoEmitter.cpp
diff -u llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.52 llvm/utils/ 
TableGen/RegisterInfoEmitter.cpp:1.53
--- llvm/utils/TableGen/RegisterInfoEmitter.cpp:1.52	Fri Apr 20  
19:55:29 2007
+++ llvm/utils/TableGen/RegisterInfoEmitter.cpp	Tue May  1 00:57:02  
2007

@@ -61,6 +61,7 @@
   ClassName
   (int CallFrameSetupOpcode = -1, int  
CallFrameDestroyOpcode = -1);\n

 int getDwarfRegNum(unsigned RegNum) const;\n
+unsigned getSubReg(unsigned RegNo, unsigned Index)  
const;\n

   };\n\n;

   const std::vectorCodeGenRegisterClass RegisterClasses =
@@ -322,6 +323,7 @@
   std::mapRecord*, std::setRecord*  RegisterSubRegs;
   std::mapRecord*, std::setRecord*  RegisterSuperRegs;
   std::mapRecord*, std::setRecord*  RegisterAliases;
+  std::mapRecord*, std::vectorstd::pairint, Record*
SubRegVectors;

   const std::vectorCodeGenRegister Regs = Target.getRegisters();

   for (unsigned i = 0, e = Regs.size(); i != e; ++i) {
@@ -441,6 +443,40 @@

   std::string ClassName = Target.getName() + GenRegisterInfo;

+  // Calculate the mapping of subregister+index pairs to physical  
registers.
+  std::vectorRecord* SubRegs = Records.getAllDerivedDefinitions 
(SubRegSet);

+  for (unsigned i = 0, e = SubRegs.size(); i != e; ++i) {
+int subRegIndex = SubRegs[i]-getValueAsInt(index);
+std::vectorRecord* From = SubRegs[i]-getValueAsListOfDefs 
(From);
+std::vectorRecord* To   = SubRegs[i]-getValueAsListOfDefs 
(To);

+
+assert((From.size() == To.size()) 
+   SubRegSet has mismatched from/to size);
+
+// For each entry in from/to vectors, insert the to register  
at index

+for (unsigned ii = 0, ee = From.size(); ii != ee; ++ii)
+  SubRegVectors[From[ii]].push_back(std::make_pair 
(subRegIndex, To[ii]));

+  }
+
+  // Emit the subregister + index mapping function based on the  
information

+  // calculated above.
+  OS  unsigned   ClassName
+  ::getSubReg(unsigned RegNo, unsigned Index) const {\n
+switch (RegNo) {\n
+default: abort(); break;\n;
+  for (std::mapRecord*, std::vectorstd::pairint, Record*   
::iterator
+I = SubRegVectors.begin(), E = SubRegVectors.end(); I !=  
E; ++I) {

+OScase   getQualifiedName(I-first)  :\n;
+OS  switch (Index) {\n;
+OS  default: abort(); break;\n;
+for (unsigned i = 0, e = I-second.size(); i != e; ++i)
+  OS  case   (I-second)[i].first  : return 
+  getQualifiedName((I-second)[i].second)  ;\n;
+OS  }; break;\n;
+  }
+  OS};\n;
+  OS  }\n\n;
+
   // Emit the constructor of the class...
   OS  ClassName  ::  ClassName
   (int CallFrameSetupOpcode, int CallFrameDestroyOpcode)\n



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






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


[llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrThumb.td

2007-05-01 Thread Evan Cheng


Changes in directory llvm/lib/Target/ARM:

ARMInstrThumb.td updated: 1.24 - 1.25
---
Log message:

Doh. PC displacement is between the constantpool and the add instruction.

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

 ARMInstrThumb.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/ARM/ARMInstrThumb.td
diff -u llvm/lib/Target/ARM/ARMInstrThumb.td:1.24 
llvm/lib/Target/ARM/ARMInstrThumb.td:1.25
--- llvm/lib/Target/ARM/ARMInstrThumb.td:1.24   Fri Apr 27 08:54:47 2007
+++ llvm/lib/Target/ARM/ARMInstrThumb.tdTue May  1 15:27:19 2007
@@ -511,7 +511,7 @@
 // assembler.
 def tLEApcrel : TIx2(ops GPR:$dst, i32imm:$label),
 !strconcat(!strconcat(.set PCRELV${:uid}, ($label-(,
-  ${:private}PCRELL${:uid}+6))\n),
+  ${:private}PCRELL${:uid}+4))\n),
!strconcat(\tmov $dst, #PCRELV${:uid}\n,
   ${:private}PCRELL${:uid}:\n\tadd $dst, 
pc)),
 [];



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


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

2007-05-01 Thread Nate Begeman
On May 1, 2007, at 12:24 PM, Christopher Lamb wrote:

 Hi Nate,

 Could you look into the possibility of re-using the sub/super  
 register support that Evan recently added? This may prevent much  
 duplication of information in the RegisterInfo.td, especially for  
 targets with vector registers that have many subregisters.

It certainly would, I agree.

 I believe that sub/super register generator unions the set of sub/ 
 super registers in a deterministic fashion and produces the  
 necessary tables in the RegisterInfo.inc already. The only thing is  
 that this would make the sub register index implicit in the  
 ordering of the sub register list in the RegisterInfo.td.

I'm not sure things are sufficiently well ordered internally for  
that, or sorted in any particular fashion.  I'll look into it, but it  
seems like it would be less flexible and make the td files far less  
intuitive as to what is actually going on.  If tablegen picked the  
numbering, I would have to go read the generated file to know what to  
write in the ISel for that backend, which seems backwards to me.

 Also, would it be possible to emit the information gathered as  
 table lookups rather than a massive two level switch statement? I  
 believe all the information to get the necessary mappings should be  
 available.

It would be possible, but seems like significantly more work.  I'm  
sure it will be possible to improve upon the initial implementation,  
which should be good enough to address most of the issues blocked by  
the lack of subregs exposed to the selection dag.

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


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

2007-05-01 Thread Devang Patel


Changes in directory llvm/docs:

WritingAnLLVMPass.html updated: 1.56 - 1.57
---
Log message:

Update doc to reflect changes I am about to install to fix PR 888: 
http://llvm.org/PR888 .


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

 WritingAnLLVMPass.html |   21 -
 1 files changed, 20 insertions(+), 1 deletion(-)


Index: llvm/docs/WritingAnLLVMPass.html
diff -u llvm/docs/WritingAnLLVMPass.html:1.56 
llvm/docs/WritingAnLLVMPass.html:1.57
--- llvm/docs/WritingAnLLVMPass.html:1.56   Mon Apr 16 19:17:11 2007
+++ llvm/docs/WritingAnLLVMPass.htmlTue May  1 15:55:38 2007
@@ -263,6 +263,14 @@
 time./p
 
 div class=doc_codepre
+ static const int ID;
+ Hello() : FunctionPass((intptr_t)ID) {}
+/pre/divp
+
+p This declares pass identifier used by LLVM to identify pass. This allows 
LLVM to
+avoid using expensive C++ runtime information./p
+
+div class=doc_codepre
 bvirtual bool/b a href=#runOnFunctionrunOnFunction/a(Function 
amp;F) {
   llvm::cerr lt;lt; iHello: /i lt;lt; F.getName() lt;lt; \n;
   breturn false/b;
@@ -277,6 +285,13 @@
 function./p
 
 div class=doc_codepre
+  const int Hello::ID = 0;
+/pre/div
+
+p We initialize pass ID here. LLVM uses ID's address to identify pass so 
+initialization value is not important./p
+
+div class=doc_codepre
   RegisterPasslt;Hellogt; X(ihello/i, iHello World Pass/i);
 }  i// end of anonymous namespace/i
 /pre/div
@@ -295,6 +310,10 @@
 
 bnamespace/b {
   bstruct Hello/b : bpublic/b a href=#FunctionPassFunctionPass/a 
{
+
+static const int ID;
+Hello() : FunctionPass((intptr_t)ID) {}
+
 bvirtual bool/b a href=#runOnFunctionrunOnFunction/a(Function 
amp;F) {
   llvm::cerr lt;lt; iHello: /i lt;lt; F.getName() lt;lt; \n;
   breturn false/b;
@@ -1788,7 +1807,7 @@
 
   a href=mailto:[EMAIL PROTECTED]Chris Lattner/abr
   a href=http://llvm.org;The LLVM Compiler Infrastructure/abr
-  Last modified: $Date: 2007/04/17 00:17:11 $
+  Last modified: $Date: 2007/05/01 20:55:38 $
 /address
 
 /body



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


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

2007-05-01 Thread Christopher Lamb


On May 1, 2007, at 3:28 PM, Nate Begeman wrote:


On May 1, 2007, at 12:24 PM, Christopher Lamb wrote:


Hi Nate,

Could you look into the possibility of re-using the sub/super
register support that Evan recently added? This may prevent much
duplication of information in the RegisterInfo.td, especially for
targets with vector registers that have many subregisters.


It certainly would, I agree.


I believe that sub/super register generator unions the set of sub/
super registers in a deterministic fashion and produces the
necessary tables in the RegisterInfo.inc already. The only thing is
that this would make the sub register index implicit in the
ordering of the sub register list in the RegisterInfo.td.


I'm not sure things are sufficiently well ordered internally for
that, or sorted in any particular fashion.  I'll look into it, but it
seems like it would be less flexible and make the td files far less
intuitive as to what is actually going on.  If tablegen picked the
numbering, I would have to go read the generated file to know what to
write in the ISel for that backend, which seems backwards to me.


I see the problem in generating the ISel. Perhaps it would be be best  
to go the other way and have the sub/super reg sets be determined by  
the the explicit sets defined. My goal was simply to eliminate  
redundant, and possibly erroneously conflicting information from the  
file. Right now there are two different ways to specify sub  
registers, and if they don't match there could be problems.





Also, would it be possible to emit the information gathered as
table lookups rather than a massive two level switch statement? I
believe all the information to get the necessary mappings should be
available.


It would be possible, but seems like significantly more work.  I'm
sure it will be possible to improve upon the initial implementation,
which should be good enough to address most of the issues blocked by
the lack of subregs exposed to the selection dag.


Thanks for working on this. I didn't expect to get it addressed for  
quite a while!


--
Christopher Lamb



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


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

2007-05-01 Thread Nate Begeman
On May 1, 2007, at 2:03 PM, Christopher Lamb wrote:

 I see the problem in generating the ISel. Perhaps it would be be  
 best to go the other way and have the sub/super reg sets be  
 determined by the the explicit sets defined. My goal was simply to  
 eliminate redundant, and possibly erroneously conflicting  
 information from the file. Right now there are two different ways  
 to specify sub registers, and if they don't match there could be  
 problems.


 Also, would it be possible to emit the information gathered as
 table lookups rather than a massive two level switch statement? I
 believe all the information to get the necessary mappings should be
 available.

 It would be possible, but seems like significantly more work.  I'm
 sure it will be possible to improve upon the initial implementation,
 which should be good enough to address most of the issues blocked by
 the lack of subregs exposed to the selection dag.

 Thanks for working on this. I didn't expect to get it addressed for  
 quite a while!

No prob.  I appreciate the feedback; I'll definitely be keeping it in  
mind while I finish the rest of the bug.  Hopefully for 2.1 we can  
have everything done with no duplication of subreg info.

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


[llvm-commits] CVS: llvm/lib/Target/ARM/ARMConstantIslandPass.cpp ARMLoadStoreOptimizer.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/ARM:

ARMConstantIslandPass.cpp updated: 1.39 - 1.40
ARMLoadStoreOptimizer.cpp updated: 1.8 - 1.9
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 ARMConstantIslandPass.cpp |4 
 ARMLoadStoreOptimizer.cpp |4 
 2 files changed, 8 insertions(+)


Index: llvm/lib/Target/ARM/ARMConstantIslandPass.cpp
diff -u llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.39 
llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.40
--- llvm/lib/Target/ARM/ARMConstantIslandPass.cpp:1.39  Sun Apr 29 14:19:30 2007
+++ llvm/lib/Target/ARM/ARMConstantIslandPass.cpp   Tue May  1 16:15:46 2007
@@ -128,6 +128,9 @@
 ARMFunctionInfo *AFI;
 bool isThumb;
   public:
+static const int ID;
+ARMConstantIslands() : MachineFunctionPass((intptr_t)ID) {}
+
 virtual bool runOnMachineFunction(MachineFunction Fn);
 
 virtual const char *getPassName() const {
@@ -171,6 +174,7 @@
 void dumpBBs();
 void verify(MachineFunction Fn);
   };
+  const int ARMConstantIslands::ID = 0;
 }
 
 /// verify - check BBOffsets, BBSizes, alignment of islands


Index: llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
diff -u llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.8 
llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.9
--- llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.8   Thu Apr 26 14:00:32 2007
+++ llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp   Tue May  1 16:15:46 2007
@@ -38,6 +38,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN ARMLoadStoreOpt : public MachineFunctionPass {
+static const int ID;
+ARMLoadStoreOpt() : MachineFunctionPass((intptr_t)ID) {}
+
 const TargetInstrInfo *TII;
 const MRegisterInfo *MRI;
 ARMFunctionInfo *AFI;
@@ -70,6 +73,7 @@
 bool LoadStoreMultipleOpti(MachineBasicBlock MBB);
 bool MergeReturnIntoLDM(MachineBasicBlock MBB);
   };
+  const int ARMLoadStoreOpt::ID = 0;
 }
 
 /// createARMLoadStoreOptimizationPass - returns an instance of the load / 
store



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


[llvm-commits] CVS: llvm/lib/Target/Sparc/DelaySlotFiller.cpp FPMover.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/Sparc:

DelaySlotFiller.cpp updated: 1.13 - 1.14
FPMover.cpp updated: 1.18 - 1.19
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 DelaySlotFiller.cpp |5 -
 FPMover.cpp |7 +--
 2 files changed, 9 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/Sparc/DelaySlotFiller.cpp
diff -u llvm/lib/Target/Sparc/DelaySlotFiller.cpp:1.13 
llvm/lib/Target/Sparc/DelaySlotFiller.cpp:1.14
--- llvm/lib/Target/Sparc/DelaySlotFiller.cpp:1.13  Tue Dec 19 16:59:26 2006
+++ llvm/lib/Target/Sparc/DelaySlotFiller.cpp   Tue May  1 16:15:46 2007
@@ -30,7 +30,9 @@
 TargetMachine TM;
 const TargetInstrInfo *TII;
 
-Filler(TargetMachine tm) : TM(tm), TII(tm.getInstrInfo()) { }
+static const int ID;
+Filler(TargetMachine tm) 
+  : MachineFunctionPass((intptr_t)ID), TM(tm), TII(tm.getInstrInfo()) { }
 
 virtual const char *getPassName() const {
   return SPARC Delay Slot Filler;
@@ -46,6 +48,7 @@
 }
 
   };
+  const int Filler::ID = 0;
 } // end of anonymous namespace
 
 /// createSparcDelaySlotFillerPass - Returns a pass that fills in delay


Index: llvm/lib/Target/Sparc/FPMover.cpp
diff -u llvm/lib/Target/Sparc/FPMover.cpp:1.18 
llvm/lib/Target/Sparc/FPMover.cpp:1.19
--- llvm/lib/Target/Sparc/FPMover.cpp:1.18  Tue Dec 19 16:59:26 2006
+++ llvm/lib/Target/Sparc/FPMover.cpp   Tue May  1 16:15:46 2007
@@ -31,8 +31,10 @@
 /// layout, etc.
 ///
 TargetMachine TM;
-
-FPMover(TargetMachine tm) : TM(tm) { }
+
+static const int ID;
+FPMover(TargetMachine tm) 
+  : MachineFunctionPass((intptr_t)ID), TM(tm) { }
 
 virtual const char *getPassName() const {
   return Sparc Double-FP Move Fixer;
@@ -41,6 +43,7 @@
 bool runOnMachineBasicBlock(MachineBasicBlock MBB);
 bool runOnMachineFunction(MachineFunction F);
   };
+  const int FPMover::ID = 0;
 } // end of anonymous namespace
 
 /// createSparcFPMoverPass - Returns a pass that turns FpMOVD



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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/PowerPC:

PPCBranchSelector.cpp updated: 1.42 - 1.43
PPCCodeEmitter.cpp updated: 1.75 - 1.76
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 PPCBranchSelector.cpp |4 
 PPCCodeEmitter.cpp|4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/PowerPC/PPCBranchSelector.cpp
diff -u llvm/lib/Target/PowerPC/PPCBranchSelector.cpp:1.42 
llvm/lib/Target/PowerPC/PPCBranchSelector.cpp:1.43
--- llvm/lib/Target/PowerPC/PPCBranchSelector.cpp:1.42  Fri Jan 26 08:34:51 2007
+++ llvm/lib/Target/PowerPC/PPCBranchSelector.cpp   Tue May  1 16:15:46 2007
@@ -32,6 +32,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN PPCBSel : public MachineFunctionPass {
+static const int ID;
+PPCBSel() : MachineFunctionPass((intptr_t)ID) {}
+
 /// BlockSizes - The sizes of the basic blocks in the function.
 std::vectorunsigned BlockSizes;
 
@@ -41,6 +44,7 @@
   return PowerPC Branch Selector;
 }
   };
+  const int PPCBSel::ID = 0;
 }
 
 /// createPPCBranchSelectionPass - returns an instance of the Branch Selection


Index: llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp
diff -u llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.75 
llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.76
--- llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp:1.75 Sat Feb 24 23:34:32 2007
+++ llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp  Tue May  1 16:15:46 2007
@@ -40,8 +40,9 @@
 int getMachineOpValue(MachineInstr MI, MachineOperand MO);
 
   public:
+static const int ID;
 PPCCodeEmitter(TargetMachine T, MachineCodeEmitter M)
-  : TM(T), MCE(M) {}
+  : MachineFunctionPass((intptr_t)ID), TM(T), MCE(M) {}
 
 const char *getPassName() const { return PowerPC Machine Code Emitter; }
 
@@ -63,6 +64,7 @@
 ///
 unsigned getBinaryCodeForInstr(MachineInstr MI);
   };
+  const int PPCCodeEmitter::ID = 0;
 }
 
 /// createPPCCodeEmitterPass - Return a pass that emits the collected PPC code



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


[llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Bytecode/Writer:

Writer.cpp updated: 1.179 - 1.180
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

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


Index: llvm/lib/Bytecode/Writer/Writer.cpp
diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.179 
llvm/lib/Bytecode/Writer/Writer.cpp:1.180
--- llvm/lib/Bytecode/Writer/Writer.cpp:1.179   Sun Apr 29 13:35:00 2007
+++ llvm/lib/Bytecode/Writer/Writer.cpp Tue May  1 16:15:46 2007
@@ -47,6 +47,7 @@
 /// @brief The bytecode version number
 const unsigned BCVersionNum = 7;
 
+const int WriteBytecodePass::ID = 0;
 static RegisterPassWriteBytecodePass X(emitbytecode, Bytecode Writer);
 
 STATISTIC(BytesWritten, Number of bytecode bytes written);



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


[llvm-commits] CVS: llvm/lib/Target/MSIL/MSILWriter.cpp MSILWriter.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/MSIL:

MSILWriter.cpp updated: 1.4 - 1.5
MSILWriter.h updated: 1.2 - 1.3
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 MSILWriter.cpp |2 ++
 MSILWriter.h   |7 ---
 2 files changed, 6 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/MSIL/MSILWriter.cpp
diff -u llvm/lib/Target/MSIL/MSILWriter.cpp:1.4 
llvm/lib/Target/MSIL/MSILWriter.cpp:1.5
--- llvm/lib/Target/MSIL/MSILWriter.cpp:1.4 Mon Apr 16 13:10:23 2007
+++ llvm/lib/Target/MSIL/MSILWriter.cpp Tue May  1 16:15:46 2007
@@ -80,6 +80,8 @@
   return Changed;
 }
 
+const int MSILModule::ID = 0;
+const int MSILWriter::ID = 0;
 
 bool MSILWriter::runOnFunction(Function F) {
   if (F.isDeclaration()) return false;


Index: llvm/lib/Target/MSIL/MSILWriter.h
diff -u llvm/lib/Target/MSIL/MSILWriter.h:1.2 
llvm/lib/Target/MSIL/MSILWriter.h:1.3
--- llvm/lib/Target/MSIL/MSILWriter.h:1.2   Mon Apr 16 13:10:23 2007
+++ llvm/lib/Target/MSIL/MSILWriter.h   Tue May  1 16:15:46 2007
@@ -37,9 +37,10 @@
 const TargetData* TD;
 
   public:
+static const int ID;
 MSILModule(const std::setconst Type ** _UsedTypes,
const TargetData* _TD)
-  : UsedTypes(_UsedTypes), TD(_TD) {}
+  : ModulePass((intptr_t)ID), UsedTypes(_UsedTypes), TD(_TD) {}
 
 void getAnalysisUsage(AnalysisUsage AU) const {
   AU.addRequiredFindUsedTypes();
@@ -82,8 +83,8 @@
 std::mapconst GlobalVariable*,std::vectorStaticInitializer 
   StaticInitList;
 const std::setconst Type ** UsedTypes;
-
-MSILWriter(std::ostream o) : Out(o) {
+static const int ID;
+MSILWriter(std::ostream o) : FunctionPass((intptr_t)ID), Out(o) {
   UniqID = 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/TargetData.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target:

TargetData.cpp updated: 1.107 - 1.108
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 TargetData.cpp |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/TargetData.cpp
diff -u llvm/lib/Target/TargetData.cpp:1.107 
llvm/lib/Target/TargetData.cpp:1.108
--- llvm/lib/Target/TargetData.cpp:1.107Sun Apr 22 16:54:13 2007
+++ llvm/lib/Target/TargetData.cpp  Tue May  1 16:15:46 2007
@@ -33,6 +33,7 @@
 // Handle the Pass registration stuff necessary to use TargetData's.
 namespace {
   // Register the default SparcV9 implementation...
+  const int TargetData::ID = 0;
   RegisterPassTargetData X(targetdata, Target Data Layout);
 }
 
@@ -221,7 +222,8 @@
   }
 }
 
-TargetData::TargetData(const Module *M) {
+TargetData::TargetData(const Module *M) 
+  : ImmutablePass((intptr_t)ID) {
   init(M-getDataLayout());
 }
 



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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/CodeGen/SelectionDAG:

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

Do not use typeinfo to identify pass in pass manager.


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

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


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.442 
llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.443
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.442Mon Apr 30 
16:11:17 2007
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp  Tue May  1 16:15:46 2007
@@ -5011,3 +5011,5 @@
   if (e != InOps.size())
 Ops.push_back(InOps.back());
 }
+
+const int SelectionDAGISel::ID = 0;



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


[llvm-commits] CVS: llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp LCSSA.cpp LoopSimplify.cpp LowerAllocations.cpp LowerInvoke.cpp LowerSelect.cpp LowerSwitch.cpp Mem2Reg.cpp UnifyFunctionExitNodes.

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Transforms/Utils:

BreakCriticalEdges.cpp updated: 1.44 - 1.45
LCSSA.cpp updated: 1.38 - 1.39
LoopSimplify.cpp updated: 1.92 - 1.93
LowerAllocations.cpp updated: 1.73 - 1.74
LowerInvoke.cpp updated: 1.59 - 1.60
LowerSelect.cpp updated: 1.12 - 1.13
LowerSwitch.cpp updated: 1.38 - 1.39
Mem2Reg.cpp updated: 1.26 - 1.27
UnifyFunctionExitNodes.cpp updated: 1.36 - 1.37
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 BreakCriticalEdges.cpp |4 
 LCSSA.cpp  |4 
 LoopSimplify.cpp   |4 
 LowerAllocations.cpp   |5 -
 LowerInvoke.cpp|5 -
 LowerSelect.cpp|5 -
 LowerSwitch.cpp|4 
 Mem2Reg.cpp|4 
 UnifyFunctionExitNodes.cpp |1 +
 9 files changed, 33 insertions(+), 3 deletions(-)


Index: llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
diff -u llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp:1.44 
llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp:1.45
--- llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp:1.44   Tue Apr 17 
13:09:47 2007
+++ llvm/lib/Transforms/Utils/BreakCriticalEdges.cppTue May  1 16:15:47 2007
@@ -34,6 +34,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN BreakCriticalEdges : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+BreakCriticalEdges() : FunctionPass((intptr_t)ID) {}
+
 virtual bool runOnFunction(Function F);
 
 virtual void getAnalysisUsage(AnalysisUsage AU) const {
@@ -47,6 +50,7 @@
 }
   };
 
+  const int BreakCriticalEdges::ID = 0;
   RegisterPassBreakCriticalEdges X(break-crit-edges,
 Break critical edges in CFG);
 }


Index: llvm/lib/Transforms/Utils/LCSSA.cpp
diff -u llvm/lib/Transforms/Utils/LCSSA.cpp:1.38 
llvm/lib/Transforms/Utils/LCSSA.cpp:1.39
--- llvm/lib/Transforms/Utils/LCSSA.cpp:1.38Wed Apr 18 17:39:00 2007
+++ llvm/lib/Transforms/Utils/LCSSA.cpp Tue May  1 16:15:47 2007
@@ -47,6 +47,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN LCSSA : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+LCSSA() : FunctionPass((intptr_t)ID) {}
+
 // Cached analysis information for the current function.
 LoopInfo *LI;
 DominatorTree *DT;
@@ -81,6 +84,7 @@
 }
   };
   
+  const int LCSSA::ID = 0;
   RegisterPassLCSSA X(lcssa, Loop-Closed SSA Form Pass);
 }
 


Index: llvm/lib/Transforms/Utils/LoopSimplify.cpp
diff -u llvm/lib/Transforms/Utils/LoopSimplify.cpp:1.92 
llvm/lib/Transforms/Utils/LoopSimplify.cpp:1.93
--- llvm/lib/Transforms/Utils/LoopSimplify.cpp:1.92 Fri Apr 20 15:04:37 2007
+++ llvm/lib/Transforms/Utils/LoopSimplify.cpp  Tue May  1 16:15:47 2007
@@ -54,6 +54,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN LoopSimplify : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+LoopSimplify() : FunctionPass((intptr_t)ID) {}
+
 // AA - If we have an alias analysis object to update, this is it, 
otherwise
 // this is null.
 AliasAnalysis *AA;
@@ -89,6 +92,7 @@
  std::vectorBasicBlock* PredBlocks);
   };
 
+  const int LoopSimplify::ID = 0;
   RegisterPassLoopSimplify
   X(loopsimplify, Canonicalize natural loops, true);
 }


Index: llvm/lib/Transforms/Utils/LowerAllocations.cpp
diff -u llvm/lib/Transforms/Utils/LowerAllocations.cpp:1.73 
llvm/lib/Transforms/Utils/LowerAllocations.cpp:1.74
--- llvm/lib/Transforms/Utils/LowerAllocations.cpp:1.73 Mon Apr 16 13:10:23 2007
+++ llvm/lib/Transforms/Utils/LowerAllocations.cpp  Tue May  1 16:15:47 2007
@@ -36,8 +36,10 @@
 Constant *FreeFunc; // Initialized by doInitialization
 bool LowerMallocArgToInteger;
   public:
+static const int ID; // Pass ID, replacement for typeid
 LowerAllocations(bool LowerToInt = false)
-  : MallocFunc(0), FreeFunc(0), LowerMallocArgToInteger(LowerToInt) {}
+  : BasicBlockPass((intptr_t)ID), MallocFunc(0), FreeFunc(0), 
+LowerMallocArgToInteger(LowerToInt) {}
 
 virtual void getAnalysisUsage(AnalysisUsage AU) const {
   AU.addRequiredTargetData();
@@ -66,6 +68,7 @@
 bool runOnBasicBlock(BasicBlock BB);
   };
 
+  const int LowerAllocations::ID = 0;
   RegisterPassLowerAllocations
   X(lowerallocs, Lower allocations from instructions to calls);
 }


Index: llvm/lib/Transforms/Utils/LowerInvoke.cpp
diff -u llvm/lib/Transforms/Utils/LowerInvoke.cpp:1.59 
llvm/lib/Transforms/Utils/LowerInvoke.cpp:1.60
--- llvm/lib/Transforms/Utils/LowerInvoke.cpp:1.59  Fri Apr 20 17:40:10 2007
+++ llvm/lib/Transforms/Utils/LowerInvoke.cpp   Tue May  1 16:15:47 2007
@@ -75,7 +75,9 @@
 const TargetLowering *TLI;
 
   public:
-LowerInvoke(const TargetLowering *tli = NULL) : TLI(tli) { }
+static const int ID; // Pass identifcation, replacement for typeid
+

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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/X86:

X86CodeEmitter.cpp updated: 1.133 - 1.134
X86FloatingPoint.cpp updated: 1.68 - 1.69
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 X86CodeEmitter.cpp   |8 ++--
 X86FloatingPoint.cpp |4 
 2 files changed, 10 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86CodeEmitter.cpp
diff -u llvm/lib/Target/X86/X86CodeEmitter.cpp:1.133 
llvm/lib/Target/X86/X86CodeEmitter.cpp:1.134
--- llvm/lib/Target/X86/X86CodeEmitter.cpp:1.133Mon Apr 16 13:10:23 2007
+++ llvm/lib/Target/X86/X86CodeEmitter.cpp  Tue May  1 16:15:46 2007
@@ -39,11 +39,14 @@
 MachineCodeEmitter  MCE;
 bool Is64BitMode;
   public:
+static const int ID;
 explicit Emitter(TargetMachine tm, MachineCodeEmitter mce)
-  : II(0), TD(0), TM(tm), MCE(mce), Is64BitMode(false) {}
+  : MachineFunctionPass((intptr_t)ID), II(0), TD(0), TM(tm), 
+  MCE(mce), Is64BitMode(false) {}
 Emitter(TargetMachine tm, MachineCodeEmitter mce,
 const X86InstrInfo ii, const TargetData td, bool is64)
-  : II(ii), TD(td), TM(tm), MCE(mce), Is64BitMode(is64) {}
+  : MachineFunctionPass((intptr_t)ID), II(ii), TD(td), TM(tm), 
+  MCE(mce), Is64BitMode(is64) {}
 
 bool runOnMachineFunction(MachineFunction MF);
 
@@ -79,6 +82,7 @@
 bool isX86_64ExtendedReg(const MachineOperand MO);
 unsigned determineREX(const MachineInstr MI);
   };
+  const int Emitter::ID = 0;
 }
 
 /// createX86CodeEmitterPass - Return a pass that emits the collected X86 code


Index: llvm/lib/Target/X86/X86FloatingPoint.cpp
diff -u llvm/lib/Target/X86/X86FloatingPoint.cpp:1.68 
llvm/lib/Target/X86/X86FloatingPoint.cpp:1.69
--- llvm/lib/Target/X86/X86FloatingPoint.cpp:1.68   Wed Apr 25 17:13:27 2007
+++ llvm/lib/Target/X86/X86FloatingPoint.cppTue May  1 16:15:46 2007
@@ -52,6 +52,9 @@
 
 namespace {
   struct VISIBILITY_HIDDEN FPS : public MachineFunctionPass {
+static const int ID;
+FPS() : MachineFunctionPass((intptr_t)ID) {}
+
 virtual bool runOnMachineFunction(MachineFunction MF);
 
 virtual const char *getPassName() const { return X86 FP Stackifier; }
@@ -151,6 +154,7 @@
 void handleCondMovFP(MachineBasicBlock::iterator I);
 void handleSpecialFP(MachineBasicBlock::iterator I);
   };
+  const int FPS::ID = 0;
 }
 
 FunctionPass *llvm::createX86FloatingPointStackifierPass() { return new FPS(); 
}



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


[llvm-commits] CVS: llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp EdgeProfiling.cpp RSProfiling.cpp RSProfiling.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Transforms/Instrumentation:

BlockProfiling.cpp updated: 1.22 - 1.23
EdgeProfiling.cpp updated: 1.12 - 1.13
RSProfiling.cpp updated: 1.23 - 1.24
RSProfiling.h updated: 1.4 - 1.5
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 BlockProfiling.cpp |7 +++
 EdgeProfiling.cpp  |4 
 RSProfiling.cpp|7 +++
 RSProfiling.h  |1 +
 4 files changed, 19 insertions(+)


Index: llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp
diff -u llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp:1.22 
llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp:1.23
--- llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp:1.22 Mon Feb  5 
17:32:05 2007
+++ llvm/lib/Transforms/Instrumentation/BlockProfiling.cpp  Tue May  1 
16:15:47 2007
@@ -32,9 +32,13 @@
 
 namespace {
   class VISIBILITY_HIDDEN FunctionProfiler : public RSProfilers_std {
+  public:
+static const int ID;
 bool runOnModule(Module M);
   };
 
+  const int FunctionProfiler::ID = 0;
+
   RegisterPassFunctionProfiler X(insert-function-profiling,
Insert instrumentation for function 
profiling);
   RegisterAnalysisGroupRSProfilers XG(X);
@@ -79,8 +83,11 @@
 namespace {
   class BlockProfiler : public RSProfilers_std {
 bool runOnModule(Module M);
+  public:
+static const int ID;
   };
 
+  const int BlockProfiler::ID = 0;
   RegisterPassBlockProfiler Y(insert-block-profiling,
 Insert instrumentation for block profiling);
   RegisterAnalysisGroupRSProfilers YG(Y);


Index: llvm/lib/Transforms/Instrumentation/EdgeProfiling.cpp
diff -u llvm/lib/Transforms/Instrumentation/EdgeProfiling.cpp:1.12 
llvm/lib/Transforms/Instrumentation/EdgeProfiling.cpp:1.13
--- llvm/lib/Transforms/Instrumentation/EdgeProfiling.cpp:1.12  Mon Feb  5 
17:32:05 2007
+++ llvm/lib/Transforms/Instrumentation/EdgeProfiling.cpp   Tue May  1 
16:15:47 2007
@@ -32,8 +32,12 @@
 namespace {
   class VISIBILITY_HIDDEN EdgeProfiler : public ModulePass {
 bool runOnModule(Module M);
+  public:
+static const int ID; // Pass identifcation, replacement for typeid
+EdgeProfiler() : ModulePass((intptr_t)ID) {}
   };
 
+  const int EdgeProfiler::ID = 0;
   RegisterPassEdgeProfiler X(insert-edge-profiling,
Insert instrumentation for edge profiling);
 }


Index: llvm/lib/Transforms/Instrumentation/RSProfiling.cpp
diff -u llvm/lib/Transforms/Instrumentation/RSProfiling.cpp:1.23 
llvm/lib/Transforms/Instrumentation/RSProfiling.cpp:1.24
--- llvm/lib/Transforms/Instrumentation/RSProfiling.cpp:1.23Tue Apr 17 
12:54:12 2007
+++ llvm/lib/Transforms/Instrumentation/RSProfiling.cpp Tue May  1 16:15:47 2007
@@ -69,6 +69,7 @@
   /// measuring framework overhead
   class VISIBILITY_HIDDEN NullProfilerRS : public RSProfilers {
   public:
+static const int ID; // Pass identifcation, replacement for typeid
 bool isProfiling(Value* v) {
   return false;
 }
@@ -80,7 +81,9 @@
 }
   };
 
+  const int RSProfilers::ID = 0;
   static RegisterAnalysisGroupRSProfilers A(Profiling passes);
+  const int NullProfilerRS::ID = 0;
   static RegisterPassNullProfilerRS NP(insert-null-profiling-rs,
  Measure profiling framework 
overhead);
   static RegisterAnalysisGroupRSProfilers, true NPT(NP);
@@ -138,6 +141,9 @@
 
   /// ProfilerRS - Insert the random sampling framework
   struct VISIBILITY_HIDDEN ProfilerRS : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+ProfilerRS() : FunctionPass((intptr_t)ID) {}
+
 std::mapValue*, Value* TransCache;
 std::setBasicBlock* ChoicePoints;
 Chooser* c;
@@ -154,6 +160,7 @@
 virtual void getAnalysisUsage(AnalysisUsage AU) const;
   };
 
+  const int ProfilerRS::ID = 0;
   RegisterPassProfilerRS X(insert-rs-profiling-framework,
  Insert random sampling instrumentation 
framework);
 }


Index: llvm/lib/Transforms/Instrumentation/RSProfiling.h
diff -u llvm/lib/Transforms/Instrumentation/RSProfiling.h:1.4 
llvm/lib/Transforms/Instrumentation/RSProfiling.h:1.5
--- llvm/lib/Transforms/Instrumentation/RSProfiling.h:1.4   Sat Feb  3 
18:40:41 2007
+++ llvm/lib/Transforms/Instrumentation/RSProfiling.h   Tue May  1 16:15:47 2007
@@ -17,6 +17,7 @@
   /// RSProfilers_std - a simple support class for profilers that handles most
   /// of the work of chaining and tracking inserted code.
   struct RSProfilers_std : public RSProfilers {
+static const int ID;
 std::setValue* profcode;
 // Lookup up values in profcode
 virtual bool isProfiling(Value* v);



___
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/AlphaBranchSelector.cpp AlphaCodeEmitter.cpp AlphaLLRP.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/Alpha:

AlphaBranchSelector.cpp updated: 1.2 - 1.3
AlphaCodeEmitter.cpp updated: 1.21 - 1.22
AlphaLLRP.cpp updated: 1.8 - 1.9
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AlphaBranchSelector.cpp |3 +++
 AlphaCodeEmitter.cpp|6 --
 AlphaLLRP.cpp   |5 -
 3 files changed, 11 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/Alpha/AlphaBranchSelector.cpp
diff -u llvm/lib/Target/Alpha/AlphaBranchSelector.cpp:1.2 
llvm/lib/Target/Alpha/AlphaBranchSelector.cpp:1.3
--- llvm/lib/Target/Alpha/AlphaBranchSelector.cpp:1.2   Thu Nov 30 01:12:03 2006
+++ llvm/lib/Target/Alpha/AlphaBranchSelector.cpp   Tue May  1 16:15:46 2007
@@ -22,6 +22,8 @@
 
 namespace {
   struct VISIBILITY_HIDDEN AlphaBSel : public MachineFunctionPass {
+static const int ID;
+AlphaBSel() : MachineFunctionPass((intptr_t)ID) {}
 
 virtual bool runOnMachineFunction(MachineFunction Fn);
 
@@ -29,6 +31,7 @@
   return Alpha Branch Selection;
 }
   };
+  const int AlphaBSel::ID = 0;
 }
 
 /// createAlphaBranchSelectionPass - returns an instance of the Branch 
Selection


Index: llvm/lib/Target/Alpha/AlphaCodeEmitter.cpp
diff -u llvm/lib/Target/Alpha/AlphaCodeEmitter.cpp:1.21 
llvm/lib/Target/Alpha/AlphaCodeEmitter.cpp:1.22
--- llvm/lib/Target/Alpha/AlphaCodeEmitter.cpp:1.21 Tue Dec 19 16:59:25 2006
+++ llvm/lib/Target/Alpha/AlphaCodeEmitter.cpp  Tue May  1 16:15:46 2007
@@ -36,11 +36,12 @@
 int getMachineOpValue(MachineInstr MI, MachineOperand MO);
 
   public:
+static const int ID;
 explicit AlphaCodeEmitter(TargetMachine tm, MachineCodeEmitter mce)
-  : II(0), TM(tm), MCE(mce) {}
+  : MachineFunctionPass((intptr_t)ID), II(0), TM(tm), MCE(mce) {}
 AlphaCodeEmitter(TargetMachine tm, MachineCodeEmitter mce,
  const AlphaInstrInfo ii)
-  : II(ii), TM(tm), MCE(mce) {}
+  : MachineFunctionPass((intptr_t)ID), II(ii), TM(tm), MCE(mce) {}
 
 bool runOnMachineFunction(MachineFunction MF);
 
@@ -60,6 +61,7 @@
 void emitBasicBlock(MachineBasicBlock MBB);
 
   };
+  const int AlphaCodeEmitter::ID = 0;
 }
 
 /// createAlphaCodeEmitterPass - Return a pass that emits the collected Alpha 
code


Index: llvm/lib/Target/Alpha/AlphaLLRP.cpp
diff -u llvm/lib/Target/Alpha/AlphaLLRP.cpp:1.8 
llvm/lib/Target/Alpha/AlphaLLRP.cpp:1.9
--- llvm/lib/Target/Alpha/AlphaLLRP.cpp:1.8 Mon Apr 16 13:10:22 2007
+++ llvm/lib/Target/Alpha/AlphaLLRP.cpp Tue May  1 16:15:46 2007
@@ -37,7 +37,9 @@
 ///
 AlphaTargetMachine TM;
 
-AlphaLLRPPass(AlphaTargetMachine tm) : TM(tm) { }
+static const int ID;
+AlphaLLRPPass(AlphaTargetMachine tm) 
+  : MachineFunctionPass((intptr_t)ID), TM(tm) { }
 
 virtual const char *getPassName() const {
   return Alpha NOP inserter;
@@ -152,6 +154,7 @@
   return Changed;
 }
   };
+  const int AlphaLLRPPass::ID = 0;
 } // end of anonymous namespace
 
 FunctionPass *llvm::createAlphaLLRPPass(AlphaTargetMachine tm) {



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


[llvm-commits] CVS: llvm/include/llvm/Analysis/AliasAnalysis.h CallGraph.h Dominators.h FindUsedTypes.h IntervalPartition.h LoopInfo.h LoopPass.h PostDominators.h ProfileInfo.h ScalarEvolution.h Value

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Analysis:

AliasAnalysis.h updated: 1.28 - 1.29
CallGraph.h updated: 1.53 - 1.54
Dominators.h updated: 1.76 - 1.77
FindUsedTypes.h updated: 1.29 - 1.30
IntervalPartition.h updated: 1.23 - 1.24
LoopInfo.h updated: 1.63 - 1.64
LoopPass.h updated: 1.15 - 1.16
PostDominators.h updated: 1.17 - 1.18
ProfileInfo.h updated: 1.5 - 1.6
ScalarEvolution.h updated: 1.16 - 1.17
ValueNumbering.h updated: 1.10 - 1.11
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AliasAnalysis.h |1 +
 CallGraph.h |1 +
 Dominators.h|   27 ++-
 FindUsedTypes.h |3 +++
 IntervalPartition.h |4 +++-
 LoopInfo.h  |3 +++
 LoopPass.h  |3 +++
 PostDominators.h|   12 +---
 ProfileInfo.h   |1 +
 ScalarEvolution.h   |3 ++-
 ValueNumbering.h|1 +
 11 files changed, 45 insertions(+), 14 deletions(-)


Index: llvm/include/llvm/Analysis/AliasAnalysis.h
diff -u llvm/include/llvm/Analysis/AliasAnalysis.h:1.28 
llvm/include/llvm/Analysis/AliasAnalysis.h:1.29
--- llvm/include/llvm/Analysis/AliasAnalysis.h:1.28 Sun Feb 11 22:59:57 2007
+++ llvm/include/llvm/Analysis/AliasAnalysis.h  Tue May  1 16:15:46 2007
@@ -61,6 +61,7 @@
   virtual void getAnalysisUsage(AnalysisUsage AU) const;
 
 public:
+  static const int ID; // Class identification, replacement for typeinfo
   AliasAnalysis() : TD(0), AA(0) {}
   virtual ~AliasAnalysis();  // We want to be subclassed
 


Index: llvm/include/llvm/Analysis/CallGraph.h
diff -u llvm/include/llvm/Analysis/CallGraph.h:1.53 
llvm/include/llvm/Analysis/CallGraph.h:1.54
--- llvm/include/llvm/Analysis/CallGraph.h:1.53 Sat Dec 16 23:15:12 2006
+++ llvm/include/llvm/Analysis/CallGraph.h  Tue May  1 16:15:46 2007
@@ -73,6 +73,7 @@
   FunctionMapTy FunctionMap;// Map from a function to its node
 
 public:
+  static const int ID; // Class identification, replacement for typeinfo
   //===-
   // Accessors...
   //


Index: llvm/include/llvm/Analysis/Dominators.h
diff -u llvm/include/llvm/Analysis/Dominators.h:1.76 
llvm/include/llvm/Analysis/Dominators.h:1.77
--- llvm/include/llvm/Analysis/Dominators.h:1.76Sat Apr 21 02:04:45 2007
+++ llvm/include/llvm/Analysis/Dominators.h Tue May  1 16:15:46 2007
@@ -42,9 +42,10 @@
 protected:
   std::vectorBasicBlock* Roots;
   const bool IsPostDominators;
-
-  inline DominatorBase(bool isPostDom) : Roots(), IsPostDominators(isPostDom) 
{}
+  inline DominatorBase(intptr_t ID, bool isPostDom) : 
+FunctionPass(ID), Roots(), IsPostDominators(isPostDom) {}
 public:
+
   /// getRoots -  Return the root blocks of the current CFG.  This may include
   /// multiple blocks if we are computing post dominators.  For forward
   /// dominators, this will always be a single block (the entry node).
@@ -135,7 +136,8 @@
   };
 
 public:
-  DominatorTreeBase(bool isPostDom) : DominatorBase(isPostDom) {}
+  DominatorTreeBase(intptr_t ID, bool isPostDom) 
+: DominatorBase(ID, isPostDom) {}
   ~DominatorTreeBase() { reset(); }
 
   virtual void releaseMemory() { reset(); }
@@ -206,7 +208,8 @@
 ///
 class DominatorTree : public DominatorTreeBase {
 public:
-  DominatorTree() : DominatorTreeBase(false) {}
+  static const int ID; // Pass ID, replacement for typeid
+  DominatorTree() : DominatorTreeBase((intptr_t)ID, false) {}
   
   BasicBlock *getRoot() const {
 assert(Roots.size() == 1  Should always have entry node!);
@@ -264,8 +267,9 @@
 ///
 class ETForestBase : public DominatorBase {
 public:
-  ETForestBase(bool isPostDom) : DominatorBase(isPostDom), Nodes(), 
- DFSInfoValid(false), SlowQueries(0) {}
+  ETForestBase(intptr_t ID, bool isPostDom) 
+: DominatorBase(ID, isPostDom), Nodes(), 
+  DFSInfoValid(false), SlowQueries(0) {}
   
   virtual void releaseMemory() { reset(); }
 
@@ -395,7 +399,9 @@
 
 class ETForest : public ETForestBase {
 public:
-  ETForest() : ETForestBase(false) {}
+  static const int ID; // Pass identifcation, replacement for typeid
+
+  ETForest() : ETForestBase((intptr_t)ID, false) {}
 
   BasicBlock *getRoot() const {
 assert(Roots.size() == 1  Should always have entry node!);
@@ -425,7 +431,8 @@
 protected:
   DomSetMapType Frontiers;
 public:
-  DominanceFrontierBase(bool isPostDom) : DominatorBase(isPostDom) {}
+  DominanceFrontierBase(intptr_t ID, bool isPostDom) 
+: DominatorBase(ID, isPostDom) {}
 
   virtual void releaseMemory() { Frontiers.clear(); }
 
@@ -470,7 +477,9 @@
 ///
 class DominanceFrontier : public DominanceFrontierBase {
 public:
-  DominanceFrontier() : DominanceFrontierBase(false) {}
+  static const int ID; // Pass ID, replacement for typeid
+  DominanceFrontier() : 
+DominanceFrontierBase((intptr_t) ID, false) {}
 
   BasicBlock *getRoot() const {
 assert(Roots.size() == 1  Should 

[llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Dominators.cpp Pass.cpp PassManager.cpp Verifier.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/VMCore:

AsmWriter.cpp updated: 1.279 - 1.280
Dominators.cpp updated: 1.97 - 1.98
Pass.cpp updated: 1.87 - 1.88
PassManager.cpp updated: 1.153 - 1.154
Verifier.cpp updated: 1.209 - 1.210
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AsmWriter.cpp   |2 ++
 Dominators.cpp  |3 +++
 Pass.cpp|   29 ++---
 PassManager.cpp |   25 +
 Verifier.cpp|   24 +++-
 5 files changed, 51 insertions(+), 32 deletions(-)


Index: llvm/lib/VMCore/AsmWriter.cpp
diff -u llvm/lib/VMCore/AsmWriter.cpp:1.279 llvm/lib/VMCore/AsmWriter.cpp:1.280
--- llvm/lib/VMCore/AsmWriter.cpp:1.279 Sun Apr 29 13:35:00 2007
+++ llvm/lib/VMCore/AsmWriter.cpp   Tue May  1 16:15:47 2007
@@ -135,8 +135,10 @@
 
 }  // end namespace llvm
 
+const int PrintModulePass::ID = 0;
 static RegisterPassPrintModulePass
 X(printm, Print module to stderr);
+const int PrintFunctionPass::ID = 0;
 static RegisterPassPrintFunctionPass
 Y(print,Print function to stderr);
 


Index: llvm/lib/VMCore/Dominators.cpp
diff -u llvm/lib/VMCore/Dominators.cpp:1.97 llvm/lib/VMCore/Dominators.cpp:1.98
--- llvm/lib/VMCore/Dominators.cpp:1.97 Fri Apr 20 19:36:45 2007
+++ llvm/lib/VMCore/Dominators.cpp  Tue May  1 16:15:47 2007
@@ -58,6 +58,7 @@
 //
 
//===--===//
 
+const int DominatorTree::ID = 0;
 static RegisterPassDominatorTree
 E(domtree, Dominator Tree Construction, true);
 
@@ -353,6 +354,7 @@
 //  DominanceFrontier Implementation
 
//===--===//
 
+const int DominanceFrontier::ID = 0;
 static RegisterPassDominanceFrontier
 G(domfrontier, Dominance Frontier Construction, true);
 
@@ -833,6 +835,7 @@
 // ETForest implementation
 
//===--===//
 
+const int ETForest::ID = 0;
 static RegisterPassETForest
 D(etforest, ET Forest Construction, true);
 


Index: llvm/lib/VMCore/Pass.cpp
diff -u llvm/lib/VMCore/Pass.cpp:1.87 llvm/lib/VMCore/Pass.cpp:1.88
--- llvm/lib/VMCore/Pass.cpp:1.87   Thu Apr 26 16:33:42 2007
+++ llvm/lib/VMCore/Pass.cppTue May  1 16:15:47 2007
@@ -133,7 +133,7 @@
 class PassRegistrar {
   /// PassInfoMap - Keep track of the passinfo object for each registered llvm
   /// pass.
-  std::mapTypeInfo, PassInfo* PassInfoMap;
+  std::mapintptr_t, PassInfo* PassInfoMap;
   
   /// AnalysisGroupInfo - Keep track of information for each analysis group.
   struct AnalysisGroupInfo {
@@ -147,19 +147,19 @@
 
 public:
   
-  const PassInfo *GetPassInfo(const std::type_info TI) const {
-std::mapTypeInfo, PassInfo*::const_iterator I = PassInfoMap.find(TI);
+  const PassInfo *GetPassInfo(intptr_t TI) const {
+std::mapintptr_t, PassInfo*::const_iterator I = PassInfoMap.find(TI);
 return I != PassInfoMap.end() ? I-second : 0;
   }
   
   void RegisterPass(PassInfo PI) {
 bool Inserted =
-  
PassInfoMap.insert(std::make_pair(TypeInfo(PI.getTypeInfo()),PI)).second;
+  PassInfoMap.insert(std::make_pair(PI.getTypeInfo(),PI)).second;
 assert(Inserted  Pass registered multiple times!);
   }
   
   void UnregisterPass(PassInfo PI) {
-std::mapTypeInfo, PassInfo*::iterator I =
+std::mapintptr_t, PassInfo*::iterator I =
   PassInfoMap.find(PI.getTypeInfo());
 assert(I != PassInfoMap.end()  Pass registered but not in map!);
 
@@ -168,7 +168,7 @@
   }
   
   void EnumerateWith(PassRegistrationListener *L) {
-for (std::mapTypeInfo, PassInfo*::const_iterator I = PassInfoMap.begin(),
+for (std::mapintptr_t, PassInfo*::const_iterator I = PassInfoMap.begin(),
  E = PassInfoMap.end(); I != E; ++I)
   L-passEnumerate(I-second);
   }
@@ -210,11 +210,10 @@
 // getPassInfo - Return the PassInfo data structure that corresponds to this
 // pass...
 const PassInfo *Pass::getPassInfo() const {
-  if (PassInfoCache) return PassInfoCache;
-  return lookupPassInfo(typeid(*this));
+  return lookupPassInfo(PassID);
 }
 
-const PassInfo *Pass::lookupPassInfo(const std::type_info TI) {
+const PassInfo *Pass::lookupPassInfo(intptr_t TI) {
   return getPassRegistrar()-GetPassInfo(TI);
 }
 
@@ -238,12 +237,12 @@
 
 // RegisterAGBase implementation
 //
-RegisterAGBase::RegisterAGBase(const std::type_info Interface,
-   const std::type_info *Pass, bool isDefault)
-  : RegisterPassBase(Interface),
+RegisterAGBase::RegisterAGBase(intptr_t InterfaceID,
+   intptr_t PassID, bool isDefault)
+  : RegisterPassBase(InterfaceID),
 ImplementationInfo(0), isDefaultImplementation(isDefault) {
 
-  InterfaceInfo = const_castPassInfo*(Pass::lookupPassInfo(Interface));
+  InterfaceInfo = const_castPassInfo*(Pass::lookupPassInfo(InterfaceID));
   if (InterfaceInfo == 0) {
 // First reference to Interface, 

[llvm-commits] CVS: llvm/lib/Transforms/IPO/ArgumentPromotion.cpp ConstantMerge.cpp DeadArgumentElimination.cpp DeadTypeElimination.cpp ExtractFunction.cpp GlobalDCE.cpp GlobalOpt.cpp IPConstantPropag

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Transforms/IPO:

ArgumentPromotion.cpp updated: 1.39 - 1.40
ConstantMerge.cpp updated: 1.39 - 1.40
DeadArgumentElimination.cpp updated: 1.40 - 1.41
DeadTypeElimination.cpp updated: 1.62 - 1.63
ExtractFunction.cpp updated: 1.20 - 1.21
GlobalDCE.cpp updated: 1.45 - 1.46
GlobalOpt.cpp updated: 1.101 - 1.102
IPConstantPropagation.cpp updated: 1.23 - 1.24
IndMemRemoval.cpp updated: 1.15 - 1.16
InlineSimple.cpp updated: 1.78 - 1.79
Inliner.cpp updated: 1.37 - 1.38
Inliner.h updated: 1.9 - 1.10
Internalize.cpp updated: 1.45 - 1.46
LoopExtractor.cpp updated: 1.24 - 1.25
LowerSetJmp.cpp updated: 1.40 - 1.41
PruneEH.cpp updated: 1.31 - 1.32
RaiseAllocations.cpp updated: 1.40 - 1.41
SimplifyLibCalls.cpp updated: 1.112 - 1.113
StripDeadPrototypes.cpp updated: 1.5 - 1.6
StripSymbols.cpp updated: 1.15 - 1.16
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 ArgumentPromotion.cpp   |4 
 ConstantMerge.cpp   |4 
 DeadArgumentElimination.cpp |5 +
 DeadTypeElimination.cpp |4 
 ExtractFunction.cpp |6 +-
 GlobalDCE.cpp   |4 
 GlobalOpt.cpp   |3 +++
 IPConstantPropagation.cpp   |4 
 IndMemRemoval.cpp   |4 
 InlineSimple.cpp|2 ++
 Inliner.cpp |4 +++-
 Inliner.h   |1 +
 Internalize.cpp |6 --
 LoopExtractor.cpp   |   15 ---
 LowerSetJmp.cpp |4 
 PruneEH.cpp |5 +
 RaiseAllocations.cpp|5 -
 SimplifyLibCalls.cpp|4 
 StripDeadPrototypes.cpp |5 -
 StripSymbols.cpp|6 +-
 20 files changed, 85 insertions(+), 10 deletions(-)


Index: llvm/lib/Transforms/IPO/ArgumentPromotion.cpp
diff -u llvm/lib/Transforms/IPO/ArgumentPromotion.cpp:1.39 
llvm/lib/Transforms/IPO/ArgumentPromotion.cpp:1.40
--- llvm/lib/Transforms/IPO/ArgumentPromotion.cpp:1.39  Thu Mar  1 15:00:32 2007
+++ llvm/lib/Transforms/IPO/ArgumentPromotion.cpp   Tue May  1 16:15:46 2007
@@ -63,12 +63,16 @@
 }
 
 virtual bool runOnSCC(const std::vectorCallGraphNode * SCC);
+static const int ID; // Pass identifcation, replacement for typeid
+ArgPromotion() : CallGraphSCCPass((intptr_t)ID) {}
+
   private:
 bool PromoteArguments(CallGraphNode *CGN);
 bool isSafeToPromoteArgument(Argument *Arg) const;
 Function *DoPromotion(Function *F, std::vectorArgument* ArgsToPromote);
   };
 
+  const int ArgPromotion::ID = 0;
   RegisterPassArgPromotion X(argpromotion,
Promote 'by reference' arguments to scalars);
 }


Index: llvm/lib/Transforms/IPO/ConstantMerge.cpp
diff -u llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.39 
llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.40
--- llvm/lib/Transforms/IPO/ConstantMerge.cpp:1.39  Sat Apr 14 13:06:52 2007
+++ llvm/lib/Transforms/IPO/ConstantMerge.cpp   Tue May  1 16:15:46 2007
@@ -29,12 +29,16 @@
 
 namespace {
   struct VISIBILITY_HIDDEN ConstantMerge : public ModulePass {
+static const int ID; // Pass identifcation, replacement for typeid
+ConstantMerge() : ModulePass((intptr_t)ID) {}
+
 // run - For this pass, process all of the globals in the module,
 // eliminating duplicate constants.
 //
 bool runOnModule(Module M);
   };
 
+  const int ConstantMerge::ID = 0;
   RegisterPassConstantMergeX(constmerge,Merge Duplicate Global 
Constants);
 }
 


Index: llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp
diff -u llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp:1.40 
llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp:1.41
--- llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp:1.40Mon Feb 12 
20:10:56 2007
+++ llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue May  1 16:15:46 2007
@@ -76,6 +76,8 @@
 std::multimapFunction*, CallSite CallSites;
 
   public:
+static const int ID; // Pass identifcation, replacement for typeid
+DAE() : ModulePass((intptr_t)ID) {}
 bool runOnModule(Module M);
 
 virtual bool ShouldHackArguments() const { return false; }
@@ -93,14 +95,17 @@
 
 void RemoveDeadArgumentsFromFunction(Function *F);
   };
+  const int DAE::ID = 0;
   RegisterPassDAE X(deadargelim, Dead Argument Elimination);
 
   /// DAH - DeadArgumentHacking pass - Same as dead argument elimination, but
   /// deletes arguments to functions which are external.  This is only for use
   /// by bugpoint.
   struct DAH : public DAE {
+static const int ID;
 virtual bool ShouldHackArguments() const { return true; }
   };
+  const int DAH::ID = 0;
   RegisterPassDAH Y(deadarghaX0r,
   Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE));
 }


Index: llvm/lib/Transforms/IPO/DeadTypeElimination.cpp
diff -u llvm/lib/Transforms/IPO/DeadTypeElimination.cpp:1.62 

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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/IA64:

IA64Bundling.cpp updated: 1.8 - 1.9
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 IA64Bundling.cpp |5 -
 1 files changed, 4 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/IA64/IA64Bundling.cpp
diff -u llvm/lib/Target/IA64/IA64Bundling.cpp:1.8 
llvm/lib/Target/IA64/IA64Bundling.cpp:1.9
--- llvm/lib/Target/IA64/IA64Bundling.cpp:1.8   Mon Apr 16 13:10:23 2007
+++ llvm/lib/Target/IA64/IA64Bundling.cpp   Tue May  1 16:15:46 2007
@@ -36,12 +36,14 @@
 
 namespace {
   struct IA64BundlingPass : public MachineFunctionPass {
+static const int ID;
 /// Target machine description which we query for reg. names, data
 /// layout, etc.
 ///
 IA64TargetMachine TM;
 
-IA64BundlingPass(IA64TargetMachine tm) : TM(tm) { }
+IA64BundlingPass(IA64TargetMachine tm) 
+  : MachineFunctionPass((intptr_t)ID), TM(tm) { }
 
 virtual const char *getPassName() const {
   return IA64 (Itanium) Bundling Pass;
@@ -61,6 +63,7 @@
 // 'fallthrough' code
 std::setunsigned PendingRegWrites;
   };
+  const int IA64BundlingPass::ID = 0;
 } // end of anonymous namespace
 
 /// createIA64BundlingPass - Returns a pass that adds STOP (;;) instructions



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


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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Target/CBackend:

CBackend.cpp updated: 1.338 - 1.339
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 CBackend.cpp |   14 --
 1 files changed, 12 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/CBackend/CBackend.cpp
diff -u llvm/lib/Target/CBackend/CBackend.cpp:1.338 
llvm/lib/Target/CBackend/CBackend.cpp:1.339
--- llvm/lib/Target/CBackend/CBackend.cpp:1.338 Tue Apr 17 04:20:00 2007
+++ llvm/lib/Target/CBackend/CBackend.cpp   Tue May  1 16:15:46 2007
@@ -56,6 +56,10 @@
   /// external functions with the same name.
   ///
   class CBackendNameAllUsedStructsAndMergeFunctions : public ModulePass {
+  public:
+static const int ID;
+CBackendNameAllUsedStructsAndMergeFunctions() 
+  : ModulePass((intptr_t)ID) {}
 void getAnalysisUsage(AnalysisUsage AU) const {
   AU.addRequiredFindUsedTypes();
 }
@@ -67,6 +71,8 @@
 virtual bool runOnModule(Module M);
   };
 
+  const int CBackendNameAllUsedStructsAndMergeFunctions::ID = 0;
+
   /// CWriter - This class is the main chunk of code that converts an LLVM
   /// module to a C translation unit.
   class CWriter : public FunctionPass, public InstVisitorCWriter {
@@ -82,8 +88,10 @@
 std::setFunction* intrinsicPrototypesAlreadyGenerated;
 
   public:
-CWriter(std::ostream o) : Out(o), IL(0), Mang(0), LI(0), TheModule(0), 
-   TAsm(0), TD(0) {}
+static const int ID;
+CWriter(std::ostream o) 
+  : FunctionPass((intptr_t)ID), Out(o), IL(0), Mang(0), LI(0), 
+TheModule(0), TAsm(0), TD(0) {}
 
 virtual const char *getPassName() const { return C backend; }
 
@@ -256,6 +264,8 @@
   };
 }
 
+const int CWriter::ID = 0;
+
 /// This method inserts names for any unnamed structure types that are used by
 /// the program, and removes names from structure types that are not used by 
the
 /// program.



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


[llvm-commits] CVS: llvm/include/llvm/Bytecode/WriteBytecodePass.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Bytecode:

WriteBytecodePass.h updated: 1.19 - 1.20
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 WriteBytecodePass.h |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/include/llvm/Bytecode/WriteBytecodePass.h
diff -u llvm/include/llvm/Bytecode/WriteBytecodePass.h:1.19 
llvm/include/llvm/Bytecode/WriteBytecodePass.h:1.20
--- llvm/include/llvm/Bytecode/WriteBytecodePass.h:1.19 Sun Jan 21 00:31:34 2007
+++ llvm/include/llvm/Bytecode/WriteBytecodePass.h  Tue May  1 16:15:46 2007
@@ -26,10 +26,12 @@
   bool DeleteStream;
   bool CompressFile;
 public:
+  static const int ID; // Pass identifcation, replacement for typeid
   WriteBytecodePass()
-: Out(cout), DeleteStream(false), CompressFile(false) {}
+: ModulePass((intptr_t) ID), Out(cout), DeleteStream(false), 
+  CompressFile(false) {}
   WriteBytecodePass(OStream *o, bool DS = false, bool CF = false)
-: Out(o), DeleteStream(DS), CompressFile(CF) {}
+: ModulePass((intptr_t) ID), Out(o), DeleteStream(DS), CompressFile(CF) {}
 
   inline ~WriteBytecodePass() {
 if (DeleteStream) delete Out;



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


[llvm-commits] CVS: llvm/tools/opt/AnalysisWrappers.cpp GraphPrinters.cpp PrintSCC.cpp opt.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/tools/opt:

AnalysisWrappers.cpp updated: 1.21 - 1.22
GraphPrinters.cpp updated: 1.14 - 1.15
PrintSCC.cpp updated: 1.15 - 1.16
opt.cpp updated: 1.134 - 1.135
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AnalysisWrappers.cpp |7 +++
 GraphPrinters.cpp|4 
 PrintSCC.cpp |7 +++
 opt.cpp  |   17 +
 4 files changed, 31 insertions(+), 4 deletions(-)


Index: llvm/tools/opt/AnalysisWrappers.cpp
diff -u llvm/tools/opt/AnalysisWrappers.cpp:1.21 
llvm/tools/opt/AnalysisWrappers.cpp:1.22
--- llvm/tools/opt/AnalysisWrappers.cpp:1.21Tue Jan 30 14:08:39 2007
+++ llvm/tools/opt/AnalysisWrappers.cpp Tue May  1 16:15:47 2007
@@ -30,6 +30,8 @@
   /// useful when looking for standard library functions we should constant 
fold
   /// or handle in alias analyses.
   struct ExternalFunctionsPassedConstants : public ModulePass {
+static const int ID; // Pass ID, replacement for typeid
+ExternalFunctionsPassedConstants() : ModulePass((intptr_t)ID) {}
 virtual bool runOnModule(Module M) {
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
 if (I-isDeclaration()) {
@@ -61,10 +63,14 @@
 }
   };
 
+  const int ExternalFunctionsPassedConstants::ID = 0;
   RegisterPassExternalFunctionsPassedConstants
   P1(externalfnconstants, Print external fn callsites passed constants);
   
   struct CallGraphPrinter : public ModulePass {
+static const int ID; // Pass ID, replacement for typeid
+CallGraphPrinter() : ModulePass((intptr_t)ID) {}
+
 virtual void getAnalysisUsage(AnalysisUsage AU) const {
   AU.setPreservesAll();
   AU.addRequiredTransitiveCallGraph();
@@ -76,6 +82,7 @@
 }
   };
   
+  const int CallGraphPrinter::ID = 0;
   RegisterPassCallGraphPrinter
 P2(callgraph, Print a call graph);
 }


Index: llvm/tools/opt/GraphPrinters.cpp
diff -u llvm/tools/opt/GraphPrinters.cpp:1.14 
llvm/tools/opt/GraphPrinters.cpp:1.15
--- llvm/tools/opt/GraphPrinters.cpp:1.14   Fri Nov 17 04:05:07 2006
+++ llvm/tools/opt/GraphPrinters.cppTue May  1 16:15:47 2007
@@ -60,6 +60,9 @@
 
 namespace {
   struct CallGraphPrinter : public ModulePass {
+static const int ID; // Pass ID, replacement for typeid
+CallGraphPrinter() : ModulePass((intptr_t)ID) {}
+
 virtual bool runOnModule(Module M) {
   WriteGraphToFile(std::cerr, callgraph, getAnalysisCallGraph());
   return false;
@@ -74,6 +77,7 @@
 }
   };
 
+  const int CallGraphPrinter::ID = 0;
   RegisterPassCallGraphPrinter P2(print-callgraph,
 Print Call Graph to 'dot' file);
 }


Index: llvm/tools/opt/PrintSCC.cpp
diff -u llvm/tools/opt/PrintSCC.cpp:1.15 llvm/tools/opt/PrintSCC.cpp:1.16
--- llvm/tools/opt/PrintSCC.cpp:1.15Sun Aug 27 17:30:17 2006
+++ llvm/tools/opt/PrintSCC.cpp Tue May  1 16:15:47 2007
@@ -35,6 +35,8 @@
 
 namespace {
   struct CFGSCC : public FunctionPass {
+static const int ID;  // Pass identification, replacement for typeid
+CFGSCC() : FunctionPass((intptr_t)ID) {}
 bool runOnFunction(Function func);
 
 void print(std::ostream O, const Module* = 0) const { }
@@ -45,6 +47,9 @@
   };
 
   struct CallGraphSCC : public ModulePass {
+static const int ID;  // Pass identification, replacement for typeid
+CallGraphSCC() : ModulePass((intptr_t)ID) {}
+
 // run - Print out SCCs in the call graph for the specified module.
 bool runOnModule(Module M);
 
@@ -57,9 +62,11 @@
 }
   };
 
+  const int CFGSCC::ID = 0;
   RegisterPassCFGSCC
   Y(cfgscc, Print SCCs of each function CFG);
 
+  const int CallGraphSCC::ID = 0;
   RegisterPassCallGraphSCC
   Z(callscc, Print SCCs of the Call Graph);
 }


Index: llvm/tools/opt/opt.cpp
diff -u llvm/tools/opt/opt.cpp:1.134 llvm/tools/opt/opt.cpp:1.135
--- llvm/tools/opt/opt.cpp:1.134Thu Apr 19 23:45:58 2007
+++ llvm/tools/opt/opt.cpp  Tue May  1 16:15:47 2007
@@ -98,8 +98,10 @@
 namespace {
 
 struct ModulePassPrinter : public ModulePass {
+  static const int ID;
   const PassInfo *PassToPrint;
-  ModulePassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
+  ModulePassPrinter(const PassInfo *PI) : ModulePass((intptr_t)ID),
+  PassToPrint(PI) {}
 
   virtual bool runOnModule(Module M) {
 if (!Quiet) {
@@ -119,12 +121,15 @@
   }
 };
 
+const int ModulePassPrinter::ID = 0;
 struct FunctionPassPrinter : public FunctionPass {
   const PassInfo *PassToPrint;
-  FunctionPassPrinter(const PassInfo *PI) : PassToPrint(PI) {}
+  static const int ID;
+  FunctionPassPrinter(const PassInfo *PI) : FunctionPass((intptr_t)ID),
+PassToPrint(PI) {}
 
   virtual bool runOnFunction(Function F) {
-if (!Quiet) {
+if (!Quiet) { 
   cout  Printing analysis '  PassToPrint-getPassName()
 ' for function '  F.getName()  ':\n;
 }
@@ 

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

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Transforms/Hello:

Hello.cpp updated: 1.14 - 1.15
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

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


Index: llvm/lib/Transforms/Hello/Hello.cpp
diff -u llvm/lib/Transforms/Hello/Hello.cpp:1.14 
llvm/lib/Transforms/Hello/Hello.cpp:1.15
--- llvm/lib/Transforms/Hello/Hello.cpp:1.14Fri Apr 13 13:58:18 2007
+++ llvm/lib/Transforms/Hello/Hello.cpp Tue May  1 16:15:46 2007
@@ -25,6 +25,9 @@
 namespace {
   // Hello - The first implementation, without getAnalysisUsage.
   struct Hello : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+Hello() : FunctionPass((intptr_t)ID) {}
+
 virtual bool runOnFunction(Function F) {
   HelloCounter++;
   std::string fname = F.getName();
@@ -33,10 +36,15 @@
   return false;
 }
   };
+
+  const int Hello::ID = 0;
   RegisterPassHello X(hello, Hello World Pass);
 
   // Hello2 - The second implementation with getAnalysisUsage implemented.
   struct Hello2 : public FunctionPass {
+static const int ID; // Pass identifcation, replacement for typeid
+Hello2() : FunctionPass((intptr_t)ID) {}
+
 virtual bool runOnFunction(Function F) {
   HelloCounter++;
   std::string fname = F.getName();
@@ -50,6 +58,7 @@
   AU.setPreservesAll();
 };
   };
+  const int Hello2::ID = 0;
   RegisterPassHello2 Y(hello2,
 Hello World Pass (with getAnalysisUsage 
implemented));
 }



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


[llvm-commits] CVS: llvm/include/llvm/Assembly/PrintModulePass.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Assembly:

PrintModulePass.h updated: 1.21 - 1.22
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 PrintModulePass.h |   11 +++
 1 files changed, 7 insertions(+), 4 deletions(-)


Index: llvm/include/llvm/Assembly/PrintModulePass.h
diff -u llvm/include/llvm/Assembly/PrintModulePass.h:1.21 
llvm/include/llvm/Assembly/PrintModulePass.h:1.22
--- llvm/include/llvm/Assembly/PrintModulePass.h:1.21   Wed Dec  6 19:30:30 2006
+++ llvm/include/llvm/Assembly/PrintModulePass.hTue May  1 16:15:46 2007
@@ -28,9 +28,10 @@
   OStream *Out;   // ostream to print on
   bool DeleteStream;  // Delete the ostream in our dtor?
 public:
-  PrintModulePass() : Out(cerr), DeleteStream(false) {}
+  static const int ID;
+  PrintModulePass() : ModulePass((intptr_t)ID), Out(cerr), 
DeleteStream(false) {}
   PrintModulePass(OStream *o, bool DS = false)
-: Out(o), DeleteStream(DS) {}
+: ModulePass((intptr_t)ID), Out(o), DeleteStream(DS) {}
 
   ~PrintModulePass() {
 if (DeleteStream) delete Out;
@@ -51,10 +52,12 @@
   OStream *Out;   // ostream to print on
   bool DeleteStream;  // Delete the ostream in our dtor?
 public:
-  PrintFunctionPass() : Banner(), Out(cerr), DeleteStream(false) {}
+  static const int ID;
+  PrintFunctionPass() : FunctionPass((intptr_t)ID), Banner(), Out(cerr), 
+DeleteStream(false) {}
   PrintFunctionPass(const std::string B, OStream *o = cout,
 bool DS = false)
-: Banner(B), Out(o), DeleteStream(DS) {}
+: FunctionPass((intptr_t)ID), Banner(B), Out(o), DeleteStream(DS) {}
 
   inline ~PrintFunctionPass() {
 if (DeleteStream) delete Out;



___
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/Utils/UnifyFunctionExitNodes.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Transforms/Utils:

UnifyFunctionExitNodes.h updated: 1.20 - 1.21
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 UnifyFunctionExitNodes.h |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
diff -u llvm/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h:1.20 
llvm/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h:1.21
--- llvm/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h:1.20Fri Jun 
 2 13:40:06 2006
+++ llvm/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h Tue May  1 
16:15:46 2007
@@ -25,7 +25,9 @@
 struct UnifyFunctionExitNodes : public FunctionPass {
   BasicBlock *ReturnBlock, *UnwindBlock, *UnreachableBlock;
 public:
-  UnifyFunctionExitNodes() : ReturnBlock(0), UnwindBlock(0) {}
+  static const int ID; // Pass identifcation, replacement for typeid
+  UnifyFunctionExitNodes() : FunctionPass((intptr_t)ID),
+ ReturnBlock(0), UnwindBlock(0) {}
 
   // We can preserve non-critical-edgeness when we unify function exit nodes
   virtual void getAnalysisUsage(AnalysisUsage AU) const;



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


[llvm-commits] CVS: llvm/lib/CodeGen/AsmPrinter.cpp BranchFolding.cpp ELFWriter.cpp ELFWriter.h LiveIntervalAnalysis.cpp LiveVariables.cpp MachOWriter.cpp MachOWriter.h MachineFunction.cpp MachineModu

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/CodeGen:

AsmPrinter.cpp updated: 1.160 - 1.161
BranchFolding.cpp updated: 1.46 - 1.47
ELFWriter.cpp updated: 1.38 - 1.39
ELFWriter.h updated: 1.1 - 1.2
LiveIntervalAnalysis.cpp updated: 1.239 - 1.240
LiveVariables.cpp updated: 1.79 - 1.80
MachOWriter.cpp updated: 1.32 - 1.33
MachOWriter.h updated: 1.3 - 1.4
MachineFunction.cpp updated: 1.111 - 1.112
MachineModuleInfo.cpp updated: 1.5 - 1.6
PHIElimination.cpp updated: 1.57 - 1.58
PrologEpilogInserter.cpp updated: 1.84 - 1.85
RegAllocLinearScan.cpp updated: 1.145 - 1.146
RegAllocLocal.cpp updated: 1.102 - 1.103
RegAllocSimple.cpp updated: 1.83 - 1.84
TwoAddressInstructionPass.cpp updated: 1.47 - 1.48
UnreachableBlockElim.cpp updated: 1.9 - 1.10
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AsmPrinter.cpp|3 ++-
 BranchFolding.cpp |4 
 ELFWriter.cpp |4 +++-
 ELFWriter.h   |2 ++
 LiveIntervalAnalysis.cpp  |1 +
 LiveVariables.cpp |1 +
 MachOWriter.cpp   |4 +++-
 MachOWriter.h |1 +
 MachineFunction.cpp   |   11 +--
 MachineModuleInfo.cpp |9 -
 PHIElimination.cpp|4 
 PrologEpilogInserter.cpp  |4 
 RegAllocLinearScan.cpp|4 
 RegAllocLocal.cpp |5 +
 RegAllocSimple.cpp|6 +-
 TwoAddressInstructionPass.cpp |4 
 UnreachableBlockElim.cpp  |4 
 17 files changed, 64 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/AsmPrinter.cpp
diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.160 
llvm/lib/CodeGen/AsmPrinter.cpp:1.161
--- llvm/lib/CodeGen/AsmPrinter.cpp:1.160   Mon Apr 30 12:00:18 2007
+++ llvm/lib/CodeGen/AsmPrinter.cpp Tue May  1 16:15:46 2007
@@ -32,9 +32,10 @@
 static cl::optbool
 AsmVerbose(asm-verbose, cl::Hidden, cl::desc(Add comments to directives.));
 
+const int AsmPrinter::ID = 0;
 AsmPrinter::AsmPrinter(std::ostream o, TargetMachine tm,
const TargetAsmInfo *T)
-: FunctionNumber(0), O(o), TM(tm), TAI(T)
+  : MachineFunctionPass((intptr_t)ID), FunctionNumber(0), O(o), TM(tm), TAI(T)
 {}
 
 std::string AsmPrinter::getSectionForFunction(const Function F) const {


Index: llvm/lib/CodeGen/BranchFolding.cpp
diff -u llvm/lib/CodeGen/BranchFolding.cpp:1.46 
llvm/lib/CodeGen/BranchFolding.cpp:1.47
--- llvm/lib/CodeGen/BranchFolding.cpp:1.46 Mon Apr 30 18:35:00 2007
+++ llvm/lib/CodeGen/BranchFolding.cpp  Tue May  1 16:15:46 2007
@@ -39,6 +39,9 @@
 
 namespace {
   struct BranchFolder : public MachineFunctionPass {
+static const int ID;
+BranchFolder() : MachineFunctionPass((intptr_t)ID) {}
+
 virtual bool runOnMachineFunction(MachineFunction MF);
 virtual const char *getPassName() const { return Control Flow Optimizer; 
}
 const TargetInstrInfo *TII;
@@ -64,6 +67,7 @@
 MachineBasicBlock *TBB, MachineBasicBlock *FBB,
 const std::vectorMachineOperand Cond);
   };
+  const int BranchFolder::ID = 0;
 }
 
 FunctionPass *llvm::createBranchFoldingPass() { return new BranchFolder(); }


Index: llvm/lib/CodeGen/ELFWriter.cpp
diff -u llvm/lib/CodeGen/ELFWriter.cpp:1.38 llvm/lib/CodeGen/ELFWriter.cpp:1.39
--- llvm/lib/CodeGen/ELFWriter.cpp:1.38 Tue Feb 13 23:52:17 2007
+++ llvm/lib/CodeGen/ELFWriter.cpp  Tue May  1 16:15:46 2007
@@ -47,6 +47,7 @@
 #include list
 using namespace llvm;
 
+const int ELFWriter::ID = 0;
 /// AddELFWriter - Concrete function to add the ELF writer to the function pass
 /// manager.
 MachineCodeEmitter *llvm::AddELFWriter(FunctionPassManager FPM,
@@ -176,7 +177,8 @@
 //  ELFWriter Implementation
 
//===--===//
 
-ELFWriter::ELFWriter(std::ostream o, TargetMachine tm) : O(o), TM(tm) {
+ELFWriter::ELFWriter(std::ostream o, TargetMachine tm) 
+  : MachineFunctionPass((intptr_t)ID), O(o), TM(tm) {
   e_flags = 0;// e_flags defaults to 0, no flags.
 
   is64Bit = TM.getTargetData()-getPointerSizeInBits() == 64;


Index: llvm/lib/CodeGen/ELFWriter.h
diff -u llvm/lib/CodeGen/ELFWriter.h:1.1 llvm/lib/CodeGen/ELFWriter.h:1.2
--- llvm/lib/CodeGen/ELFWriter.h:1.1Wed Feb  7 19:30:50 2007
+++ llvm/lib/CodeGen/ELFWriter.hTue May  1 16:15:46 2007
@@ -30,6 +30,8 @@
   class ELFWriter : public MachineFunctionPass {
 friend class ELFCodeEmitter;
   public:
+static const int ID;
+
 MachineCodeEmitter getMachineCodeEmitter() const {
   return *(MachineCodeEmitter*)MCE;
 }


Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.239 
llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.240
--- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.239 Thu Apr 26 13:59:33 2007
+++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp   Tue May  1 

[llvm-commits] CVS: llvm/include/llvm/CodeGen/AsmPrinter.h LiveIntervalAnalysis.h LiveVariables.h MachineFunctionPass.h MachineModuleInfo.h SelectionDAGISel.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/CodeGen:

AsmPrinter.h updated: 1.63 - 1.64
LiveIntervalAnalysis.h updated: 1.80 - 1.81
LiveVariables.h updated: 1.41 - 1.42
MachineFunctionPass.h updated: 1.5 - 1.6
MachineModuleInfo.h updated: 1.7 - 1.8
SelectionDAGISel.h updated: 1.37 - 1.38
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 AsmPrinter.h   |2 ++
 LiveIntervalAnalysis.h |3 +++
 LiveVariables.h|3 +++
 MachineFunctionPass.h  |2 ++
 MachineModuleInfo.h|2 ++
 SelectionDAGISel.h |4 +++-
 6 files changed, 15 insertions(+), 1 deletion(-)


Index: llvm/include/llvm/CodeGen/AsmPrinter.h
diff -u llvm/include/llvm/CodeGen/AsmPrinter.h:1.63 
llvm/include/llvm/CodeGen/AsmPrinter.h:1.64
--- llvm/include/llvm/CodeGen/AsmPrinter.h:1.63 Wed Apr 25 09:27:10 2007
+++ llvm/include/llvm/CodeGen/AsmPrinter.h  Tue May  1 16:15:46 2007
@@ -34,6 +34,8 @@
   /// AsmPrinter - This class is intended to be used as a driving class for all
   /// asm writers.
   class AsmPrinter : public MachineFunctionPass {
+static const int ID;
+
 /// FunctionNumber - This provides a unique ID for each function emitted in
 /// this translation unit.  It is autoincremented by SetupMachineFunction,
 /// and can be accessed with getFunctionNumber() and 


Index: llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h
diff -u llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.80 
llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.81
--- llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:1.80   Wed Apr 25 
02:30:23 2007
+++ llvm/include/llvm/CodeGen/LiveIntervalAnalysis.hTue May  1 16:15:46 2007
@@ -65,6 +65,9 @@
 BitVector JoinedLIs;
 
   public:
+static const int ID; // Pass identifcation, replacement for typeid
+LiveIntervals() : MachineFunctionPass((intptr_t)ID) {}
+
 struct CopyRec {
   MachineInstr *MI;
   unsigned SrcReg, DstReg;


Index: llvm/include/llvm/CodeGen/LiveVariables.h
diff -u llvm/include/llvm/CodeGen/LiveVariables.h:1.41 
llvm/include/llvm/CodeGen/LiveVariables.h:1.42
--- llvm/include/llvm/CodeGen/LiveVariables.h:1.41  Wed Apr 25 20:40:09 2007
+++ llvm/include/llvm/CodeGen/LiveVariables.h   Tue May  1 16:15:46 2007
@@ -40,6 +40,9 @@
 
 class LiveVariables : public MachineFunctionPass {
 public:
+  static const int ID; // Pass identifcation, replacement for typeid
+  LiveVariables() : MachineFunctionPass((intptr_t)ID) {}
+
   /// VarInfo - This represents the regions where a virtual register is live in
   /// the program.  We represent this with three different pieces of
   /// information: the instruction that uniquely defines the value, the set of


Index: llvm/include/llvm/CodeGen/MachineFunctionPass.h
diff -u llvm/include/llvm/CodeGen/MachineFunctionPass.h:1.5 
llvm/include/llvm/CodeGen/MachineFunctionPass.h:1.6
--- llvm/include/llvm/CodeGen/MachineFunctionPass.h:1.5 Fri Jul 14 18:08:47 2006
+++ llvm/include/llvm/CodeGen/MachineFunctionPass.h Tue May  1 16:15:46 2007
@@ -26,6 +26,8 @@
 
 struct MachineFunctionPass : public FunctionPass {
 
+  MachineFunctionPass(intptr_t ID) : FunctionPass(ID) {}
+
   /// runOnMachineFunction - This method must be overloaded to perform the
   /// desired machine code transformation or analysis.
   ///


Index: llvm/include/llvm/CodeGen/MachineModuleInfo.h
diff -u llvm/include/llvm/CodeGen/MachineModuleInfo.h:1.7 
llvm/include/llvm/CodeGen/MachineModuleInfo.h:1.8
--- llvm/include/llvm/CodeGen/MachineModuleInfo.h:1.7   Thu Mar  1 14:25:32 2007
+++ llvm/include/llvm/CodeGen/MachineModuleInfo.h   Tue May  1 16:15:46 2007
@@ -1022,6 +1022,8 @@
   std::vectorGlobalVariable * TypeInfos;
 
 public:
+  static const int ID; // Pass identifcation, replacement for typeid
+
   MachineModuleInfo();
   ~MachineModuleInfo();
   


Index: llvm/include/llvm/CodeGen/SelectionDAGISel.h
diff -u llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.37 
llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.38
--- llvm/include/llvm/CodeGen/SelectionDAGISel.h:1.37   Mon Apr  9 07:31:58 2007
+++ llvm/include/llvm/CodeGen/SelectionDAGISel.hTue May  1 16:15:46 2007
@@ -41,8 +41,10 @@
   MachineBasicBlock *BB;
   std::vectorSDNode* TopOrder;
   unsigned DAGSize;
+  static const int ID;
 
-  explicit SelectionDAGISel(TargetLowering tli) : TLI(tli), DAGSize(0) {}
+  explicit SelectionDAGISel(TargetLowering tli) : 
+FunctionPass((intptr_t)ID), TLI(tli), DAGSize(0) {}
   
   TargetLowering getTargetLowering() { return TLI; }
 



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


[llvm-commits] CVS: llvm/tools/bugpoint/ExtractFunction.cpp TestPasses.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/tools/bugpoint:

ExtractFunction.cpp updated: 1.58 - 1.59
TestPasses.cpp updated: 1.10 - 1.11
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 ExtractFunction.cpp |4 
 TestPasses.cpp  |   12 +++-
 2 files changed, 15 insertions(+), 1 deletion(-)


Index: llvm/tools/bugpoint/ExtractFunction.cpp
diff -u llvm/tools/bugpoint/ExtractFunction.cpp:1.58 
llvm/tools/bugpoint/ExtractFunction.cpp:1.59
--- llvm/tools/bugpoint/ExtractFunction.cpp:1.58Mon Feb  5 14:47:21 2007
+++ llvm/tools/bugpoint/ExtractFunction.cpp Tue May  1 16:15:47 2007
@@ -305,7 +305,11 @@
   /// BlocksToNotExtract list.
   class BlockExtractorPass : public ModulePass {
 bool runOnModule(Module M);
+  public:
+static const int ID; // Pass ID, replacement for typeid
+BlockExtractorPass() : ModulePass((intptr_t)ID) {}
   };
+  const int BlockExtractorPass::ID = 0;
   RegisterPassBlockExtractorPass
   XX(extract-bbs, Extract Basic Blocks From Module (for bugpoint use));
 }


Index: llvm/tools/bugpoint/TestPasses.cpp
diff -u llvm/tools/bugpoint/TestPasses.cpp:1.10 
llvm/tools/bugpoint/TestPasses.cpp:1.11
--- llvm/tools/bugpoint/TestPasses.cpp:1.10 Thu Apr 21 18:59:23 2005
+++ llvm/tools/bugpoint/TestPasses.cpp  Tue May  1 16:15:47 2007
@@ -25,6 +25,10 @@
   /// CrashOnCalls - This pass is used to test bugpoint.  It intentionally
   /// crashes on any call instructions.
   class CrashOnCalls : public BasicBlockPass {
+  public:
+static const int ID; // Pass ID, replacement for typeid
+CrashOnCalls() : BasicBlockPass((intptr_t)ID) {}
+  private:
 virtual void getAnalysisUsage(AnalysisUsage AU) const {
   AU.setPreservesAll();
 }
@@ -38,6 +42,7 @@
 }
   };
 
+  const int CrashOnCalls::ID = 0;
   RegisterPassCrashOnCalls
   X(bugpoint-crashcalls,
 BugPoint Test Pass - Intentionally crash on CallInsts);
@@ -47,6 +52,10 @@
   /// DeleteCalls - This pass is used to test bugpoint.  It intentionally
   /// deletes some call instructions, misoptimizing the program.
   class DeleteCalls : public BasicBlockPass {
+  public:
+static const int ID; // Pass ID, replacement for typeid
+DeleteCalls() : BasicBlockPass((intptr_t)ID) {}
+  private:
 bool runOnBasicBlock(BasicBlock BB) {
   for (BasicBlock::iterator I = BB.begin(), E = BB.end(); I != E; ++I)
 if (CallInst *CI = dyn_castCallInst(I)) {
@@ -58,7 +67,8 @@
   return false;
 }
   };
-
+ 
+  const int DeleteCalls::ID = 0;
   RegisterPassDeleteCalls
   Y(bugpoint-deletecalls,
 BugPoint Test Pass - Intentionally 'misoptimize' CallInsts);



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


[llvm-commits] CVS: llvm/include/llvm/CallGraphSCCPass.h Pass.h PassManagers.h PassSupport.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm:

CallGraphSCCPass.h updated: 1.12 - 1.13
Pass.h updated: 1.86 - 1.87
PassManagers.h updated: 1.16 - 1.17
PassSupport.h updated: 1.38 - 1.39
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 CallGraphSCCPass.h |2 ++
 Pass.h |   16 +++-
 PassManagers.h |4 +++-
 PassSupport.h  |   26 +-
 4 files changed, 29 insertions(+), 19 deletions(-)


Index: llvm/include/llvm/CallGraphSCCPass.h
diff -u llvm/include/llvm/CallGraphSCCPass.h:1.12 
llvm/include/llvm/CallGraphSCCPass.h:1.13
--- llvm/include/llvm/CallGraphSCCPass.h:1.12   Mon Apr 16 13:51:25 2007
+++ llvm/include/llvm/CallGraphSCCPass.hTue May  1 16:15:46 2007
@@ -31,6 +31,8 @@
 
 struct CallGraphSCCPass : public Pass {
 
+  CallGraphSCCPass(intptr_t pid) : Pass(pid) {}
+
   /// doInitialization - This method is called before the SCC's of the program
   /// has been processed, allowing the pass to do initialization as necessary.
   virtual bool doInitialization(CallGraph CG) {


Index: llvm/include/llvm/Pass.h
diff -u llvm/include/llvm/Pass.h:1.86 llvm/include/llvm/Pass.h:1.87
--- llvm/include/llvm/Pass.h:1.86   Thu Apr 26 16:33:41 2007
+++ llvm/include/llvm/Pass.hTue May  1 16:15:46 2007
@@ -34,8 +34,8 @@
 #include deque
 #include map
 #include iosfwd
-#include typeinfo
 #include cassert
+#include stdint.h
 
 namespace llvm {
 
@@ -77,7 +77,7 @@
 ///
 class Pass {
   AnalysisResolver *Resolver;  // Used to resolve analysis
-  const PassInfo *PassInfoCache;
+  intptr_t PassID;
 
   // AnalysisImpls - This keeps track of which passes implement the interfaces
   // that are required by the current pass (to implement getAnalysis()).
@@ -87,7 +87,7 @@
   void operator=(const Pass);  // DO NOT IMPLEMENT
   Pass(const Pass );   // DO NOT IMPLEMENT
 public:
-  Pass() : Resolver(0), PassInfoCache(0) {}
+  Pass(intptr_t pid) : Resolver(0), PassID(pid) {}
   virtual ~Pass();
 
   /// getPassName - Return a nice clean name for a pass.  This usually
@@ -163,12 +163,12 @@
 
   templatetypename AnalysisClass
   static const PassInfo *getClassPassInfo() {
-return lookupPassInfo(typeid(AnalysisClass));
+return lookupPassInfo((intptr_t)AnalysisClass::ID);
   }
 
   // lookupPassInfo - Return the pass info object for the specified pass class,
   // or null if it is not known.
-  static const PassInfo *lookupPassInfo(const std::type_info TI);
+  static const PassInfo *lookupPassInfo(intptr_t TI);
 
   /// getAnalysisToUpdateAnalysisType() - This function is used by subclasses
   /// to get to the analysis information that might be around that needs to be
@@ -232,6 +232,7 @@
 return PMT_ModulePassManager;
   }
 
+  ModulePass(intptr_t pid) : Pass(pid) {}
   // Force out-of-line virtual method.
   virtual ~ModulePass();
 };
@@ -256,6 +257,7 @@
   ///
   virtual bool runOnModule(Module M) { return false; }
 
+  ImmutablePass(intptr_t pid) : ModulePass(pid) {}
   // Force out-of-line virtual method.
   virtual ~ImmutablePass();
 };
@@ -271,6 +273,8 @@
 ///
 class FunctionPass : public Pass {
 public:
+  FunctionPass(intptr_t pid) : Pass(pid) {}
+
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///
@@ -320,6 +324,8 @@
 ///
 class BasicBlockPass : public Pass {
 public:
+  BasicBlockPass(intptr_t pid) : Pass(pid) {}
+
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///


Index: llvm/include/llvm/PassManagers.h
diff -u llvm/include/llvm/PassManagers.h:1.16 
llvm/include/llvm/PassManagers.h:1.17
--- llvm/include/llvm/PassManagers.h:1.16   Mon Apr 16 15:12:57 2007
+++ llvm/include/llvm/PassManagers.hTue May  1 16:15:46 2007
@@ -336,7 +336,9 @@
 class FPPassManager : public ModulePass, public PMDataManager {
  
 public:
-  explicit FPPassManager(int Depth) : PMDataManager(Depth) { }
+  static const int ID;
+  explicit FPPassManager(int Depth) 
+  : ModulePass((intptr_t)ID), PMDataManager(Depth) { }
   
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.


Index: llvm/include/llvm/PassSupport.h
diff -u llvm/include/llvm/PassSupport.h:1.38 
llvm/include/llvm/PassSupport.h:1.39
--- llvm/include/llvm/PassSupport.h:1.38Mon Apr 16 13:10:22 2007
+++ llvm/include/llvm/PassSupport.h Tue May  1 16:15:46 2007
@@ -37,19 +37,19 @@
 class PassInfo {
   const char   *PassName;  // Nice name for Pass
   const char   *PassArgument;  // Command Line argument to run this 
pass
-  const std::type_info TypeInfo;  // type_info object for this Pass class
+  intptr_t PassID;  
   bool IsCFGOnlyPass;  // Pass only looks at the CFG.
   bool IsAnalysisGroup;// True if an 

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

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Transforms:

RSProfiling.h updated: 1.2 - 1.3
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 RSProfiling.h |3 +++
 1 files changed, 3 insertions(+)


Index: llvm/include/llvm/Transforms/RSProfiling.h
diff -u llvm/include/llvm/Transforms/RSProfiling.h:1.2 
llvm/include/llvm/Transforms/RSProfiling.h:1.3
--- llvm/include/llvm/Transforms/RSProfiling.h:1.2  Wed Feb 22 10:23:43 2006
+++ llvm/include/llvm/Transforms/RSProfiling.h  Tue May  1 16:15:46 2007
@@ -23,6 +23,9 @@
   /// this interface are expected to chain to other implementations, such that
   /// multiple profilers can be support simultaniously.
   struct RSProfilers : public ModulePass {
+static const int ID; // Pass identification, replacement for typeinfo
+RSProfilers() : ModulePass((intptr_t)ID) {}
+
 /// isProfiling - This method returns true if the value passed it was 
 /// inserted by the profiler.
 virtual bool isProfiling(Value* v) = 0;



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


[llvm-commits] CVS: llvm/include/llvm/Target/TargetData.h

2007-05-01 Thread Devang Patel


Changes in directory llvm/include/llvm/Target:

TargetData.h updated: 1.60 - 1.61
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 TargetData.h |9 ++---
 1 files changed, 6 insertions(+), 3 deletions(-)


Index: llvm/include/llvm/Target/TargetData.h
diff -u llvm/include/llvm/Target/TargetData.h:1.60 
llvm/include/llvm/Target/TargetData.h:1.61
--- llvm/include/llvm/Target/TargetData.h:1.60  Thu Apr 26 14:39:32 2007
+++ llvm/include/llvm/Target/TargetData.h   Tue May  1 16:15:46 2007
@@ -108,14 +108,15 @@
   ///
   /// @note This has to exist, because this is a pass, but it should never be
   /// used.
-  TargetData() {
+  TargetData() : ImmutablePass((intptr_t)ID) {
 assert(0  ERROR: Bad TargetData ctor used.  
Tool did not specify a TargetData to use?);
 abort();
   }
 
   /// Constructs a TargetData from a specification string. See init().
-  TargetData(const std::string TargetDescription) {
+  TargetData(const std::string TargetDescription) 
+: ImmutablePass((intptr_t)ID) {
 init(TargetDescription);
   }
 
@@ -123,7 +124,7 @@
   TargetData(const Module *M);
 
   TargetData(const TargetData TD) : 
-ImmutablePass(),
+ImmutablePass((intptr_t)ID),
 LittleEndian(TD.isLittleEndian()),
 PointerMemSize(TD.PointerMemSize),
 PointerABIAlign(TD.PointerABIAlign),
@@ -200,6 +201,8 @@
   /// specified global, returned in log form.  This includes an explicitly
   /// requested alignment (if the global has one).
   unsigned getPreferredAlignmentLog(const GlobalVariable *GV) const;
+
+  static const int ID; // Pass identifcation, replacement for typeid
 };
 
 /// StructLayout - used to lazily calculate structure layout information for a



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


[llvm-commits] CVS: llvm/lib/Analysis/IPA/Andersens.cpp CallGraph.cpp CallGraphSCCPass.cpp FindUsedTypes.cpp GlobalsModRef.cpp

2007-05-01 Thread Devang Patel


Changes in directory llvm/lib/Analysis/IPA:

Andersens.cpp updated: 1.46 - 1.47
CallGraph.cpp updated: 1.65 - 1.66
CallGraphSCCPass.cpp updated: 1.21 - 1.22
FindUsedTypes.cpp updated: 1.38 - 1.39
GlobalsModRef.cpp updated: 1.29 - 1.30
---
Log message:

Do not use typeinfo to identify pass in pass manager.


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

 Andersens.cpp|6 ++
 CallGraph.cpp|6 +-
 CallGraphSCCPass.cpp |5 -
 FindUsedTypes.cpp|1 +
 GlobalsModRef.cpp|4 
 5 files changed, 20 insertions(+), 2 deletions(-)


Index: llvm/lib/Analysis/IPA/Andersens.cpp
diff -u llvm/lib/Analysis/IPA/Andersens.cpp:1.46 
llvm/lib/Analysis/IPA/Andersens.cpp:1.47
--- llvm/lib/Analysis/IPA/Andersens.cpp:1.46Sun Mar  4 18:00:42 2007
+++ llvm/lib/Analysis/IPA/Andersens.cpp Tue May  1 16:15:46 2007
@@ -75,12 +75,17 @@
 namespace {
   class VISIBILITY_HIDDEN Andersens : public ModulePass, public AliasAnalysis,
   private InstVisitorAndersens {
+  public:
+static const int ID; // Class identification, replacement for typeinfo
+Andersens() : ModulePass((intptr_t)ID) {}
+  private:
 /// Node class - This class is used to represent a memory object in the
 /// program, and is the primitive used to build the points-to graph.
 class Node {
   std::vectorNode* Pointees;
   Value *Val;
 public:
+  static const unsigned ID; // Pass identifcation, replacement for typeid
   Node() : Val(0) {}
   Node *setValue(Value *V) {
 assert(Val == 0  Value already set for this node!);
@@ -334,6 +339,7 @@
 void visitInstruction(Instruction I);
   };
 
+  const int Andersens::ID = 0;
   RegisterPassAndersens X(anders-aa,
 Andersen's Interprocedural Alias Analysis);
   RegisterAnalysisGroupAliasAnalysis Y(X);


Index: llvm/lib/Analysis/IPA/CallGraph.cpp
diff -u llvm/lib/Analysis/IPA/CallGraph.cpp:1.65 
llvm/lib/Analysis/IPA/CallGraph.cpp:1.66
--- llvm/lib/Analysis/IPA/CallGraph.cpp:1.65Mon Feb  5 17:42:17 2007
+++ llvm/lib/Analysis/IPA/CallGraph.cpp Tue May  1 16:15:46 2007
@@ -51,7 +51,9 @@
   CallGraphNode *CallsExternalNode;
 
 public:
-  BasicCallGraph() : Root(0), ExternalCallingNode(0), CallsExternalNode(0) {}
+  static const int ID; // Class identification, replacement for typeinfo
+  BasicCallGraph() : ModulePass((intptr_t)ID), Root(0), 
+ExternalCallingNode(0), CallsExternalNode(0) {}
 
   // runOnModule - Compute the call graph for the specified module.
   virtual bool runOnModule(Module M) {
@@ -188,7 +190,9 @@
   }
 };
 
+const int CallGraph::ID = 0;
 RegisterAnalysisGroupCallGraph X(Call Graph);
+const int BasicCallGraph::ID = 0;
 RegisterPassBasicCallGraph Y(basiccg, Basic CallGraph Construction);
 RegisterAnalysisGroupCallGraph, true Z(Y);
 


Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.21 
llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.22
--- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.21 Mon Apr 16 13:10:22 2007
+++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp  Tue May  1 16:15:46 2007
@@ -30,7 +30,9 @@
 class CGPassManager : public ModulePass, public PMDataManager {
 
 public:
-  CGPassManager(int Depth) : PMDataManager(Depth) { }
+  static const int ID;
+  CGPassManager(int Depth) 
+: ModulePass((intptr_t)ID), PMDataManager(Depth) { }
 
   /// run - Execute all of the passes scheduled for execution.  Keep track of
   /// whether any of the passes modifies the module, and if so, return true.
@@ -71,6 +73,7 @@
   }
 };
 
+const int CGPassManager::ID = 0;
 /// run - Execute all of the passes scheduled for execution.  Keep track of
 /// whether any of the passes modifies the module, and if so, return true.
 bool CGPassManager::runOnModule(Module M) {


Index: llvm/lib/Analysis/IPA/FindUsedTypes.cpp
diff -u llvm/lib/Analysis/IPA/FindUsedTypes.cpp:1.38 
llvm/lib/Analysis/IPA/FindUsedTypes.cpp:1.39
--- llvm/lib/Analysis/IPA/FindUsedTypes.cpp:1.38Wed Dec  6 00:35:25 2006
+++ llvm/lib/Analysis/IPA/FindUsedTypes.cpp Tue May  1 16:15:46 2007
@@ -21,6 +21,7 @@
 #include llvm/Support/InstIterator.h
 using namespace llvm;
 
+const int FindUsedTypes::ID = 0;
 static RegisterPassFindUsedTypes
 X(printusedtypes, Find Used Types);
 


Index: llvm/lib/Analysis/IPA/GlobalsModRef.cpp
diff -u llvm/lib/Analysis/IPA/GlobalsModRef.cpp:1.29 
llvm/lib/Analysis/IPA/GlobalsModRef.cpp:1.30
--- llvm/lib/Analysis/IPA/GlobalsModRef.cpp:1.29Mon Feb  5 17:42:17 2007
+++ llvm/lib/Analysis/IPA/GlobalsModRef.cpp Tue May  1 16:15:46 2007
@@ -83,6 +83,9 @@
 std::mapFunction*, FunctionRecord FunctionInfo;
 
   public:
+static const int ID;
+GlobalsModRef() : ModulePass((intptr_t)ID) {}
+
 bool runOnModule(Module M) {
   InitializeAliasAnalysis(this); // set up super class
   AnalyzeGlobals(M);  // find non-addr taken 
globals
@@ -143,6 +146,7 

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

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/Target/X86:

X86TargetAsmInfo.cpp updated: 1.38 - 1.39
---
Log message:

Fix couple of bugs connected with eh info:
1. Correct output offsets on Linux
2. Fix style of personality function. It shouldn't be indirect.


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

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


Index: llvm/lib/Target/X86/X86TargetAsmInfo.cpp
diff -u llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.38 
llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.39
--- llvm/lib/Target/X86/X86TargetAsmInfo.cpp:1.38   Tue May  1 05:19:31 2007
+++ llvm/lib/Target/X86/X86TargetAsmInfo.cppTue May  1 17:23:12 2007
@@ -99,7 +99,8 @@
   case X86Subtarget::isELF:
 // Set up DWARF directives
 HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)
-AbsoluteSectionOffsets = true;
+AbsoluteDebugSectionOffsets = true;
+AbsoluteEHSectionOffsets = false;
 // bool HasLEB128; // Defaults to false.
 // hasDotLoc - True if target asm supports .loc directives.
 // bool HasDotLoc; // Defaults to false.
@@ -141,7 +142,8 @@
 
 // Set up DWARF directives
 HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)
-AbsoluteSectionOffsets = true;
+AbsoluteDebugSectionOffsets = true;
+AbsoluteEHSectionOffsets = false;
 PrivateGlobalPrefix = L;  // Prefix for private global symbols
 WeakRefDirective = \t.weak\t;
 SetDirective = \t.set\t;



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


[llvm-commits] CVS: llvm/include/llvm/Target/TargetAsmInfo.h

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/include/llvm/Target:

TargetAsmInfo.h updated: 1.31 - 1.32
---
Log message:

Fix couple of bugs connected with eh info:
1. Correct output offsets on Linux
2. Fix style of personality function. It shouldn't be indirect.


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

 TargetAsmInfo.h |   19 +--
 1 files changed, 13 insertions(+), 6 deletions(-)


Index: llvm/include/llvm/Target/TargetAsmInfo.h
diff -u llvm/include/llvm/Target/TargetAsmInfo.h:1.31 
llvm/include/llvm/Target/TargetAsmInfo.h:1.32
--- llvm/include/llvm/Target/TargetAsmInfo.h:1.31   Sun Apr 29 14:17:45 2007
+++ llvm/include/llvm/Target/TargetAsmInfo.hTue May  1 17:23:12 2007
@@ -263,10 +263,14 @@
 
 //===--- Dwarf Emission Directives ---===//
 
-/// AbsoluteSectionOffsets - True if we should emit abolute section
-/// offsets. Defaults to false.
-bool AbsoluteSectionOffsets;
-
+/// AbsoluteDebugSectionOffsets - True if we should emit abolute section
+/// offsets for debug information. Defaults to false.
+bool AbsoluteDebugSectionOffsets;
+
+/// AbsoluteEHSectionOffsets - True if we should emit abolute section
+/// offsets for EH information. Defaults to false.
+bool AbsoluteEHSectionOffsets;
+
 /// HasLEB128 - True if target asm supports leb128 directives.
 ///
 bool HasLEB128; // Defaults to false.
@@ -530,8 +534,11 @@
 const char *getProtectedDirective() const {
   return ProtectedDirective;
 }
-bool isAbsoluteSectionOffsets() const {
-  return AbsoluteSectionOffsets;
+bool isAbsoluteDebugSectionOffsets() const {
+  return AbsoluteDebugSectionOffsets;
+}
+bool isAbsoluteEHSectionOffsets() const {
+  return AbsoluteEHSectionOffsets;
 }
 bool hasLEB128() const {
   return HasLEB128;



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


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

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/Target:

TargetAsmInfo.cpp updated: 1.24 - 1.25
---
Log message:

Fix couple of bugs connected with eh info:
1. Correct output offsets on Linux
2. Fix style of personality function. It shouldn't be indirect.


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

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


Index: llvm/lib/Target/TargetAsmInfo.cpp
diff -u llvm/lib/Target/TargetAsmInfo.cpp:1.24 
llvm/lib/Target/TargetAsmInfo.cpp:1.25
--- llvm/lib/Target/TargetAsmInfo.cpp:1.24  Sun Apr 29 13:35:00 2007
+++ llvm/lib/Target/TargetAsmInfo.cpp   Tue May  1 17:23:12 2007
@@ -75,7 +75,8 @@
   WeakRefDirective(0),
   HiddenDirective(\t.hidden\t),
   ProtectedDirective(\t.protected\t),
-  AbsoluteSectionOffsets(false),
+  AbsoluteDebugSectionOffsets(false),
+  AbsoluteEHSectionOffsets(false),
   HasLEB128(false),
   HasDotLoc(false),
   HasDotFile(false),



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


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

2007-05-01 Thread Anton Korobeynikov


Changes in directory llvm/lib/CodeGen:

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

Fix couple of bugs connected with eh info:
1. Correct output offsets on Linux
2. Fix style of personality function. It shouldn't be indirect.


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

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


Index: llvm/lib/CodeGen/DwarfWriter.cpp
diff -u llvm/lib/CodeGen/DwarfWriter.cpp:1.132 
llvm/lib/CodeGen/DwarfWriter.cpp:1.133
--- llvm/lib/CodeGen/DwarfWriter.cpp:1.132  Wed Mar  7 02:25:02 2007
+++ llvm/lib/CodeGen/DwarfWriter.cppTue May  1 17:23:12 2007
@@ -914,13 +914,20 @@
 
   void EmitSectionOffset(const char* Label, const char* Section,
  unsigned LabelNumber, unsigned SectionNumber,
- bool IsSmall = false) {
+ bool IsSmall = false, bool isEH = false) {
+bool printAbsolute = false;
 if (TAI-needsSet()) {
   O  \t.set\t;
   PrintLabelName(set, SetCounter);
   O  ,;
   PrintLabelName(Label, LabelNumber, true);
-  if (!TAI-isAbsoluteSectionOffsets()) {
+
+  if (isEH)
+printAbsolute = TAI-isAbsoluteEHSectionOffsets();
+  else
+printAbsolute = TAI-isAbsoluteDebugSectionOffsets();
+  
+  if (!printAbsolute) {
 O  -;
 PrintLabelName(Section, SectionNumber);
   }  
@@ -940,7 +947,13 @@
 O  TAI-getData64bitsDirective();
 
   PrintLabelName(Label, LabelNumber, true);
-  if (!TAI-isAbsoluteSectionOffsets()) {
+
+  if (isEH)
+printAbsolute = TAI-isAbsoluteEHSectionOffsets();
+  else
+printAbsolute = TAI-isAbsoluteDebugSectionOffsets();
+
+  if (!printAbsolute) {
 O  -;
 PrintLabelName(Section, SectionNumber);
   }
@@ -1688,7 +1701,7 @@
   CompileUnit *NewCompileUnit(CompileUnitDesc *UnitDesc, unsigned ID) {
 // Construct debug information entry.
 DIE *Die = new DIE(DW_TAG_compile_unit);
-if (TAI-isAbsoluteSectionOffsets())
+if (TAI-isAbsoluteDebugSectionOffsets())
   AddLabel(Die, DW_AT_stmt_list, DW_FORM_data4, DWLabel(section_line, 
0));
 else
   AddDelta(Die, DW_AT_stmt_list, DW_FORM_data4, DWLabel(section_line, 0),
@@ -2107,7 +2120,7 @@

 Asm-EmitInt32(ContentSize);  Asm-EOL(Length of Compilation Unit Info);
 Asm-EmitInt16(DWARF_VERSION); Asm-EOL(DWARF version number);
-EmitSectionOffset(abbrev_begin, section_abbrev, 0, 0, true);
+EmitSectionOffset(abbrev_begin, section_abbrev, 0, 0, true, false);
 Asm-EOL(Offset Into Abbrev. Section);
 Asm-EmitInt8(TAI-getAddressSize()); Asm-EOL(Address Size (in bytes));
   
@@ -2366,7 +2379,7 @@
 
 EmitLabel(frame_begin, SubprogramCount);
 
-EmitSectionOffset(frame_common_begin, section_frame, 0, 0, true);
+EmitSectionOffset(frame_common_begin, section_frame, 0, 0, true, 
false);
 Asm-EOL(FDE CIE offset);
 
 EmitReference(func_begin, SubprogramCount);
@@ -2401,7 +2414,8 @@
 
 Asm-EmitInt16(DWARF_VERSION); Asm-EOL(DWARF Version);
 
-EmitSectionOffset(info_begin, section_info, Unit-getID(), 0, true);
+EmitSectionOffset(info_begin, section_info,
+  Unit-getID(), 0, true, false);
 Asm-EOL(Offset of Compilation Unit Info);
 
 EmitDifference(info_end, Unit-getID(), info_begin, 
Unit-getID(),true);
@@ -2769,10 +2783,8 @@
 if (Personality) {
   Asm-EmitULEB128Bytes(7);
   Asm-EOL(Augmentation Size);
-  Asm-EmitInt8(DW_EH_PE_indirect |
-DW_EH_PE_pcrel |
-DW_EH_PE_sdata4);
-  Asm-EOL(Personality (indirect pcrel sdata4));
+  Asm-EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4);
+  Asm-EOL(Personality (pcrel sdata4));
   
   O  TAI-getData32bitsDirective();
   Asm-EmitExternalGlobal((const GlobalVariable *)(Personality));
@@ -2830,7 +2842,7 @@
   EmitLabel(eh_frame_begin, SubprogramCount);
 
   EmitSectionOffset(eh_frame_begin, section_eh_frame,
-SubprogramCount, 0, true);
+SubprogramCount, 0, true, true);
   Asm-EOL(FDE CIE offset);
 
   EmitReference(eh_func_begin, SubprogramCount, true);
@@ -2994,7 +3006,7 @@
 for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) {
   const LandingPadInfo LandingPad = LandingPads[i];
   EmitSectionOffset(label, eh_func_begin,
-LandingPad.BeginLabel, SubprogramCount);
+LandingPad.BeginLabel, SubprogramCount, false, true);
   Asm-EOL(Region start);
   
   EmitDifference(label, LandingPad.EndLabel,
@@ -3007,8 +3019,8 @@
 else
   Asm-EmitInt64(0);
   } else {
-EmitSectionOffset(label, eh_func_begin,
-  LandingPad.LandingPadLabel, SubprogramCount);
+EmitSectionOffset(label, eh_func_begin, 

[llvm-commits] CVS: llvm/lib/Target/ARM/ARMTargetAsmInfo.h ARMTargetAsmInfo.cpp

2007-05-01 Thread Dale Johannesen


Changes in directory llvm/lib/Target/ARM:

ARMTargetAsmInfo.h updated: 1.3 - 1.4
ARMTargetAsmInfo.cpp updated: 1.18 - 1.19
---
Log message:

Add some support for (Darwin) code-generating directives in getInlineAsmLength.
Support is incomplete, but more accurate than gcc's.


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

 ARMTargetAsmInfo.cpp |  128 ---
 ARMTargetAsmInfo.h   |5 +
 2 files changed, 115 insertions(+), 18 deletions(-)


Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.h
diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.3 
llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.4
--- llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.3  Sun Apr 29 14:17:45 2007
+++ llvm/lib/Target/ARM/ARMTargetAsmInfo.h  Tue May  1 20:02:40 2007
@@ -15,6 +15,7 @@
 #define ARMTARGETASMINFO_H
 
 #include llvm/Target/TargetAsmInfo.h
+#include ARMSubtarget.h
 
 namespace llvm {
 
@@ -24,9 +25,11 @@
   struct ARMTargetAsmInfo : public TargetAsmInfo {
 ARMTargetAsmInfo(const ARMTargetMachine TM);
 
-bool isThumb;
+const ARMSubtarget *Subtarget;
 
 virtual unsigned getInlineAsmLength(const char *Str) const;
+unsigned countArguments(const char *p) const;
+unsigned countString(const char *p) const;
   };
 
 


Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp
diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.18 
llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.19
--- llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.18   Sun Apr 29 19:30:48 2007
+++ llvm/lib/Target/ARM/ARMTargetAsmInfo.cppTue May  1 20:02:40 2007
@@ -1,3 +1,4 @@
+
 //===-- ARMTargetAsmInfo.cpp - ARM asm properties ---*- C++ 
-*-===//
 //
 // The LLVM Compiler Infrastructure
@@ -18,7 +19,7 @@
 using namespace llvm;
 
 ARMTargetAsmInfo::ARMTargetAsmInfo(const ARMTargetMachine TM) {
-  const ARMSubtarget *Subtarget = TM.getSubtargetARMSubtarget();
+  Subtarget = TM.getSubtargetARMSubtarget();
   if (Subtarget-isTargetDarwin()) {
 GlobalPrefix = _;
 PrivateGlobalPrefix = L;
@@ -85,13 +86,42 @@
   InlineAsmStart = @ InlineAsm Start;
   InlineAsmEnd = @ InlineAsm End;
   LCOMMDirective = \t.lcomm\t;
-  isThumb = Subtarget-isThumb();
+}
+
+/// Count the number of comma-separated arguments.
+/// Do not try to detect errors.
+unsigned ARMTargetAsmInfo::countArguments(const char* p) const {
+  unsigned count = 0;
+  while (*p  isspace(*p)  *p != '\n')
+p++;
+  count++;
+  while (*p  *p!='\n'  
+ strncmp(p, CommentString, strlen(CommentString))!=0) {
+if (*p==',')
+  count++;
+p++;
+  }
+  return count;
+}
+
+/// Count the length of a string enclosed in quote characters.
+/// Do not try to detect errors.
+unsigned ARMTargetAsmInfo::countString(const char* p) const {
+  unsigned count = 0;
+  while (*p  isspace(*p)  *p!='\n')
+p++;
+  if (!*p || *p != '\')
+return count;
+  while (*++p  *p != '\')
+count++;
+  return count;
 }
 
 /// ARM-specific version of TargetAsmInfo::getInlineAsmLength.
 unsigned ARMTargetAsmInfo::getInlineAsmLength(const char *Str) const {
   // Count the number of bytes in the asm.
   bool atInsnStart = true;
+  bool inTextSection = true;
   unsigned Length = 0;
   for (; *Str; ++Str) {
 if (atInsnStart) {
@@ -102,30 +132,94 @@
   for (const char* p = Str; *p  !isspace(*p); p++)
 if (*p == ':') {
   Str = p+1;
+  while (*Str  isspace(*Str)  *Str != '\n')
+Str++;
   break;
 }
   // Ignore everything from comment char(s) to EOL
   if (strncmp(Str, CommentString, strlen(CommentString))==-0)
 atInsnStart = false;
-  else {
+  // FIXME do something like the following for non-Darwin
+  else if (*Str == '.'  Subtarget-isTargetDarwin()) {
+// Directive.
+atInsnStart = false;
+// Some change the section, but don't generate code.
+if (strncasecmp(Str, .literal4, strlen(.literal4))==0 ||
+strncasecmp(Str, .literal8, strlen(.literal8))==0 ||
+strncasecmp(Str, .const, strlen(.const))==0 ||
+strncasecmp(Str, .constructor, strlen(.constructor))==0 ||
+strncasecmp(Str, .cstring, strlen(.cstring))==0 ||
+strncasecmp(Str, .data, strlen(.data))==0 ||
+strncasecmp(Str, .destructor, strlen(.destructor))==0 ||
+strncasecmp(Str, .fvmlib_init0, strlen(.fvmlib_init0))==0 ||
+strncasecmp(Str, .fvmlib_init1, strlen(.fvmlib_init1))==0 ||
+strncasecmp(Str, .mod_init_func, strlen(.mod_init_func))==0 ||
+strncasecmp(Str, .mod_term_func, strlen(.mod_term_func))==0 ||
+strncasecmp(Str, .picsymbol_stub, strlen(.picsymbol_stub))==0 
||
+strncasecmp(Str, .symbol_stub, strlen(.symbol_stub))==0 ||
+strncasecmp(Str, .static_data, strlen(.static_data))==0 ||
+strncasecmp(Str, .section, strlen(.section))==0 ||
+strncasecmp(Str, .lazy_symbol_pointer, 

Re: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMTargetAsmInfo.h ARMTargetAsmInfo.cpp

2007-05-01 Thread Evan Cheng
Woot! Fun stuff. :-)

Thanks Dale.

Evan
On May 1, 2007, at 6:03 PM, Dale Johannesen wrote:



 Changes in directory llvm/lib/Target/ARM:

 ARMTargetAsmInfo.h updated: 1.3 - 1.4
 ARMTargetAsmInfo.cpp updated: 1.18 - 1.19
 ---
 Log message:

 Add some support for (Darwin) code-generating directives in  
 getInlineAsmLength.
 Support is incomplete, but more accurate than gcc's.


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

  ARMTargetAsmInfo.cpp |  128 +++ 
 +---
  ARMTargetAsmInfo.h   |5 +
  2 files changed, 115 insertions(+), 18 deletions(-)


 Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.h
 diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.3 llvm/lib/Target/ 
 ARM/ARMTargetAsmInfo.h:1.4
 --- llvm/lib/Target/ARM/ARMTargetAsmInfo.h:1.3Sun Apr 29 14:17:45  
 2007
 +++ llvm/lib/Target/ARM/ARMTargetAsmInfo.hTue May  1 20:02:40 2007
 @@ -15,6 +15,7 @@
  #define ARMTARGETASMINFO_H

  #include llvm/Target/TargetAsmInfo.h
 +#include ARMSubtarget.h

  namespace llvm {

 @@ -24,9 +25,11 @@
struct ARMTargetAsmInfo : public TargetAsmInfo {
  ARMTargetAsmInfo(const ARMTargetMachine TM);

 -bool isThumb;
 +const ARMSubtarget *Subtarget;

  virtual unsigned getInlineAsmLength(const char *Str) const;
 +unsigned countArguments(const char *p) const;
 +unsigned countString(const char *p) const;
};




 Index: llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp
 diff -u llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.18 llvm/lib/ 
 Target/ARM/ARMTargetAsmInfo.cpp:1.19
 --- llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp:1.18 Sun Apr 29  
 19:30:48 2007
 +++ llvm/lib/Target/ARM/ARMTargetAsmInfo.cpp  Tue May  1 20:02:40 2007
 @@ -1,3 +1,4 @@
 +
  //===-- ARMTargetAsmInfo.cpp - ARM asm properties --- 
 *- C++ -*-===//
  //
  // The LLVM Compiler Infrastructure
 @@ -18,7 +19,7 @@
  using namespace llvm;

  ARMTargetAsmInfo::ARMTargetAsmInfo(const ARMTargetMachine TM) {
 -  const ARMSubtarget *Subtarget = TM.getSubtargetARMSubtarget();
 +  Subtarget = TM.getSubtargetARMSubtarget();
if (Subtarget-isTargetDarwin()) {
  GlobalPrefix = _;
  PrivateGlobalPrefix = L;
 @@ -85,13 +86,42 @@
InlineAsmStart = @ InlineAsm Start;
InlineAsmEnd = @ InlineAsm End;
LCOMMDirective = \t.lcomm\t;
 -  isThumb = Subtarget-isThumb();
 +}
 +
 +/// Count the number of comma-separated arguments.
 +/// Do not try to detect errors.
 +unsigned ARMTargetAsmInfo::countArguments(const char* p) const {
 +  unsigned count = 0;
 +  while (*p  isspace(*p)  *p != '\n')
 +p++;
 +  count++;
 +  while (*p  *p!='\n' 
 + strncmp(p, CommentString, strlen(CommentString))!=0) {
 +if (*p==',')
 +  count++;
 +p++;
 +  }
 +  return count;
 +}
 +
 +/// Count the length of a string enclosed in quote characters.
 +/// Do not try to detect errors.
 +unsigned ARMTargetAsmInfo::countString(const char* p) const {
 +  unsigned count = 0;
 +  while (*p  isspace(*p)  *p!='\n')
 +p++;
 +  if (!*p || *p != '\')
 +return count;
 +  while (*++p  *p != '\')
 +count++;
 +  return count;
  }

  /// ARM-specific version of TargetAsmInfo::getInlineAsmLength.
  unsigned ARMTargetAsmInfo::getInlineAsmLength(const char *Str)  
 const {
// Count the number of bytes in the asm.
bool atInsnStart = true;
 +  bool inTextSection = true;
unsigned Length = 0;
for (; *Str; ++Str) {
  if (atInsnStart) {
 @@ -102,30 +132,94 @@
for (const char* p = Str; *p  !isspace(*p); p++)
  if (*p == ':') {
Str = p+1;
 +  while (*Str  isspace(*Str)  *Str != '\n')
 +Str++;
break;
  }
// Ignore everything from comment char(s) to EOL
if (strncmp(Str, CommentString, strlen(CommentString))==-0)
  atInsnStart = false;
 -  else {
 +  // FIXME do something like the following for non-Darwin
 +  else if (*Str == '.'  Subtarget-isTargetDarwin()) {
 +// Directive.
 +atInsnStart = false;
 +// Some change the section, but don't generate code.
 +if (strncasecmp(Str, .literal4, strlen(.literal4))==0 ||
 +strncasecmp(Str, .literal8, strlen(.literal8))==0 ||
 +strncasecmp(Str, .const, strlen(.const))==0 ||
 +strncasecmp(Str, .constructor, strlen 
 (.constructor))==0 ||
 +strncasecmp(Str, .cstring, strlen(.cstring))==0 ||
 +strncasecmp(Str, .data, strlen(.data))==0 ||
 +strncasecmp(Str, .destructor, strlen(.destructor)) 
 ==0 ||
 +strncasecmp(Str, .fvmlib_init0, strlen 
 (.fvmlib_init0))==0 ||
 +strncasecmp(Str, .fvmlib_init1, strlen 
 (.fvmlib_init1))==0 ||
 +strncasecmp(Str, .mod_init_func, strlen 
 (.mod_init_func))==0 ||
 +strncasecmp(Str, .mod_term_func, strlen 
 (.mod_term_func))==0 ||
 +strncasecmp(Str, .picsymbol_stub, strlen 
 (.picsymbol_stub))==0 ||
 +strncasecmp(Str, 

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

2007-05-01 Thread Reid Spencer


Changes in directory llvm-www:

DevMtgMay2007.html updated: 1.115 - 1.116
---
Log message:

Add Alireza Moshtaghi


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

 DevMtgMay2007.html |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm-www/DevMtgMay2007.html
diff -u llvm-www/DevMtgMay2007.html:1.115 llvm-www/DevMtgMay2007.html:1.116
--- llvm-www/DevMtgMay2007.html:1.115   Fri Apr 27 13:31:19 2007
+++ llvm-www/DevMtgMay2007.html Tue May  1 20:42:00 2007
@@ -127,6 +127,7 @@
   LLVM, that tutorial you gave last week, etc./p
 table class=www
   trthSpeaker/ththTopic/th/tr
+  trtdEvan Cheng/tdtdBack end talk/td
   trtdNick Lewycky/td
 tdDesign and implementation of the PredicateSimplifier pass, or, 
   VRP in LLVM/td
@@ -319,6 +320,7 @@
 trthName/ththOrganization/th/tr
 trtdPaul McJones/tdtdAdobe Systems Incorporated./td/tr
 trtdScott Michel/tdtdAerospace/td/tr
+trtdAlireza Moshtaghi/tdtdMicrochip Technology/td/tr
 trtdRobert Mykland/tdtdAscenium Corp./td/tr
 trtdSteve Naroff/tdtdApple Inc./td/tr
 trtdDevang Patel/tdtdApple Inc./td/tr
@@ -360,6 +362,6 @@
   src=http://jigsaw.w3.org/css-validator/images/vcss; alt=Valid CSS!/a
   a href=http://validator.w3.org/check/referer;img
   src=http://www.w3.org/Icons/valid-html401; alt=Valid HTML 4.01!/a
-br/Last modified: $Date: 2007/04/27 18:31:19 $
+br/Last modified: $Date: 2007/05/02 01:42:00 $
 /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/Target/CBackend/CBackend.cpp

2007-05-01 Thread Reid Spencer


Changes in directory llvm/lib/Target/CBackend:

CBackend.cpp updated: 1.339 - 1.340
---
Log message:

Make sign extension work correctly for unusual bit widths.


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

 CBackend.cpp |  128 ++-
 1 files changed, 100 insertions(+), 28 deletions(-)


Index: llvm/lib/Target/CBackend/CBackend.cpp
diff -u llvm/lib/Target/CBackend/CBackend.cpp:1.339 
llvm/lib/Target/CBackend/CBackend.cpp:1.340
--- llvm/lib/Target/CBackend/CBackend.cpp:1.339 Tue May  1 16:15:46 2007
+++ llvm/lib/Target/CBackend/CBackend.cpp   Tue May  1 21:17:41 2007
@@ -412,6 +412,29 @@
   }
 }
 
+#define IMPL_SIGN_EXTENSION(OpTy, Func) { \
+  const IntegerType* IntTy = castIntegerType(OpTy); \
+  unsigned BitWidth = IntTy-getBitWidth(); \
+  if (BitWidth != 8  BitWidth != 16  BitWidth != 32  \
+  BitWidth != 64  BitWidth != 128) { \
+const char * Suffix; \
+if (BitWidth =32)\
+  Suffix = U; \
+else \
+  Suffix = ULL; \
+Out  (; \
+Func; \
+Out(1  Suffix  BitWidth - 1   ) ? ; \
+Func; \
+Out   |   (~IntTy-getBitMask())  Suffix   : ; \
+Func; \
+Out  IntTy-getBitMask()  Suffix; \
+Out  );\
+   } \
+  else \
+Func; \
+  }
+
 // Pass the Type* and the variable name and this prints out the variable
 // declaration.
 //
@@ -711,23 +734,39 @@
 case Instruction::BitCast:
   Out  (;
   printCast(CE-getOpcode(), CE-getOperand(0)-getType(), CE-getType());
-  if (CE-getOpcode() == Instruction::SExt 
-  CE-getOperand(0)-getType() == Type::Int1Ty) {
-// Make sure we really sext from bool here by subtracting from 0
-Out  0-;
-  }
-  printConstant(CE-getOperand(0));
-  if (CE-getType() == Type::Int1Ty 
-  (CE-getOpcode() == Instruction::Trunc ||
+   if (CE-getOpcode() == Instruction::Trunc ||
CE-getOpcode() == Instruction::FPToUI ||
CE-getOpcode() == Instruction::FPToSI ||
-   CE-getOpcode() == Instruction::PtrToInt)) {
-// Make sure we really truncate to bool here by anding with 1
-Out  1u;
+   CE-getOpcode() == Instruction::PtrToInt) {
+if (const IntegerType* IntTy = dyn_castIntegerType(CE-getType())) {
+  uint64_t BitMask = IntTy-getBitMask();
+  printConstant(CE-getOperand(0));
+  OutBitMask  (IntTy-getBitWidth() =32 ? U: ULL);
+}
   }
-  Out  ')';
+  else if (CE-getOpcode() == Instruction::SExt 
+   CE-getOperand(0)-getType() == Type::Int1Ty) {
+// Make sure we really sext from bool here by subtracting from 0
+Out  0-;
+printConstant(CE-getOperand(0));
+  }
+  else if (CE-getOpcode() == Instruction::SExt 
+   CE-getOperand(0)-getType()-getTypeID() == Type::IntegerTyID) 
{
+ IMPL_SIGN_EXTENSION(CE-getOperand(0)-getType(),
+ printConstant(CE-getOperand(0)));
+   }
+   else if (CE-getOpcode() == Instruction::ZExt 
+CE-getOperand(0)-getType()-getTypeID() == 
Type::IntegerTyID){
+ const IntegerType* IntTy = 
+   castIntegerType(CE-getOperand(0)-getType());
+ uint64_t BitMask = IntTy-getBitMask();
+ writeOperand(CE-getOperand(0));
+ OutBitMask  (IntTy-getBitWidth() =32 ? U: ULL);
+   }
+   else
+ printConstant(CE-getOperand(0));
+  Out  );
   return;
-
 case Instruction::GetElementPtr:
   Out  ((;
   printIndexingExpression(CE-getOperand(0), gep_type_begin(CPV),
@@ -1228,7 +1267,11 @@
 Out  ((;
 printSimpleType(Out, OpTy, castIsSigned);
 Out  );
-writeOperand(Operand);
+if (castIsSigned  OpTy-getTypeID() == Type::IntegerTyID) {
+  IMPL_SIGN_EXTENSION(OpTy, writeOperand(Operand));
+}
+else
+  writeOperand(Operand);
 Out  );
   } else 
 writeOperand(Operand);
@@ -1253,7 +1296,9 @@
   switch (predicate) {
 default:
   // for eq and ne, it doesn't matter
-  break; 
+  break;
+case ICmpInst::ICMP_EQ:
+case ICmpInst::ICMP_NE:
 case ICmpInst::ICMP_UGT:
 case ICmpInst::ICMP_UGE:
 case ICmpInst::ICMP_ULT:
@@ -1278,10 +1323,25 @@
 else
   printType(Out, OpTy); // not integer, sign doesn't matter
 Out  );
-writeOperand(Operand);
+if(castIsSigned  OpTy-getTypeID() == Type::IntegerTyID) {
+  IMPL_SIGN_EXTENSION(OpTy, writeOperand(Operand));
+} else {
+  writeOperand(Operand);
+  if(OpTy-getTypeID() == Type::IntegerTyID){
+const IntegerType * IntTy = castIntegerType(OpTy);
+uint64_t BitMask = IntTy-getBitMask();
+OutBitMask  (IntTy-getBitWidth() =32 ? U: ULL);
+  }
+}
 Out  );
-  } else 
+  } else {
 writeOperand(Operand);
+if(OpTy-getTypeID() == Type::IntegerTyID){
+  const IntegerType * IntTy = 

[llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/bits.h

2007-05-01 Thread Reid Spencer


Changes in directory llvm-test/SingleSource/UnitTests/Integer:

bits.h updated: 1.4 - 1.5
---
Log message:

Add some bit widths.
Make conversion from hex string easier.


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

 bits.h |   10 +-
 1 files changed, 9 insertions(+), 1 deletion(-)


Index: llvm-test/SingleSource/UnitTests/Integer/bits.h
diff -u llvm-test/SingleSource/UnitTests/Integer/bits.h:1.4 
llvm-test/SingleSource/UnitTests/Integer/bits.h:1.5
--- llvm-test/SingleSource/UnitTests/Integer/bits.h:1.4 Sat Apr 21 12:47:59 2007
+++ llvm-test/SingleSource/UnitTests/Integer/bits.h Tue May  1 21:35:26 2007
@@ -40,12 +40,14 @@
 typedef unsigned int __attribute__((bitwidth(68))) uint68;
 typedef unsigned int __attribute__((bitwidth(128))) uint128;
 
-typedef int __attribute__ ((bitwidth(9))) int9;
+typedef int __attribute__((bitwidth(9)))  int9;
 typedef int __attribute__((bitwidth(10))) int10;
 typedef int __attribute__((bitwidth(21))) int21;
 typedef int __attribute__((bitwidth(24))) int24;
 typedef int __attribute__((bitwidth(32))) int32;
 typedef int __attribute__((bitwidth(33))) int33;
+typedef int __attribute__((bitwidth(68))) int68;
+typedef int __attribute__((bitwidth(69))) int69;
 
 typedef int __attribute__((bitwidth(169))) int169;
 typedef unsigned int __attribute__((bitwidth(250))) int250;
@@ -111,3 +113,9 @@
   __builtin_bit_from_string(Result, str, 10); \
   Result; \
 })
+
+#define bitsFromHexString(str,bits) ({ \
+  int __attribute__((bitwidth(bits))) Result; \
+  __builtin_bit_from_string(Result, str, 16); \
+  Result; \
+})



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


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

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

Pass.cpp updated: 1.88 - 1.89
---
Log message:

disable this assertion as a hack to get the build more unbroken :(



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

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


Index: llvm/lib/VMCore/Pass.cpp
diff -u llvm/lib/VMCore/Pass.cpp:1.88 llvm/lib/VMCore/Pass.cpp:1.89
--- llvm/lib/VMCore/Pass.cpp:1.88   Tue May  1 16:15:47 2007
+++ llvm/lib/VMCore/Pass.cppTue May  1 23:01:44 2007
@@ -155,7 +155,7 @@
   void RegisterPass(PassInfo PI) {
 bool Inserted =
   PassInfoMap.insert(std::make_pair(PI.getTypeInfo(),PI)).second;
-assert(Inserted  Pass registered multiple times!);
+//assert(Inserted  Pass registered multiple times!);
   }
   
   void UnregisterPass(PassInfo PI) {



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


Re: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMConstantIslandPass.cpp ARMLoadStoreOptimizer.cpp

2007-05-01 Thread Chris Lattner
 +static const int ID;
 +ARMConstantIslands() : MachineFunctionPass((intptr_t)ID) {}

Why the cast to intptr_t?  Why not just make the ctors take void* ?

-Chris



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


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

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/VMCore:

Pass.cpp updated: 1.89 - 1.90
---
Log message:

revert enough of devang's recent patches to get the tree basically working again


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

 Pass.cpp |   31 ---
 1 files changed, 16 insertions(+), 15 deletions(-)


Index: llvm/lib/VMCore/Pass.cpp
diff -u llvm/lib/VMCore/Pass.cpp:1.89 llvm/lib/VMCore/Pass.cpp:1.90
--- llvm/lib/VMCore/Pass.cpp:1.89   Tue May  1 23:01:44 2007
+++ llvm/lib/VMCore/Pass.cppTue May  1 23:25:31 2007
@@ -133,7 +133,7 @@
 class PassRegistrar {
   /// PassInfoMap - Keep track of the passinfo object for each registered llvm
   /// pass.
-  std::mapintptr_t, PassInfo* PassInfoMap;
+  std::mapTypeInfo, PassInfo* PassInfoMap;
   
   /// AnalysisGroupInfo - Keep track of information for each analysis group.
   struct AnalysisGroupInfo {
@@ -147,19 +147,19 @@
 
 public:
   
-  const PassInfo *GetPassInfo(intptr_t TI) const {
-std::mapintptr_t, PassInfo*::const_iterator I = PassInfoMap.find(TI);
+  const PassInfo *GetPassInfo(const std::type_info TI) const {
+std::mapTypeInfo, PassInfo*::const_iterator I = PassInfoMap.find(TI);
 return I != PassInfoMap.end() ? I-second : 0;
   }
   
   void RegisterPass(PassInfo PI) {
 bool Inserted =
-  PassInfoMap.insert(std::make_pair(PI.getTypeInfo(),PI)).second;
-//assert(Inserted  Pass registered multiple times!);
+  
PassInfoMap.insert(std::make_pair(TypeInfo(PI.getTypeInfo()),PI)).second;
+assert(Inserted  Pass registered multiple times!);
   }
   
   void UnregisterPass(PassInfo PI) {
-std::mapintptr_t, PassInfo*::iterator I =
+std::mapTypeInfo, PassInfo*::iterator I =
   PassInfoMap.find(PI.getTypeInfo());
 assert(I != PassInfoMap.end()  Pass registered but not in map!);
 
@@ -168,7 +168,7 @@
   }
   
   void EnumerateWith(PassRegistrationListener *L) {
-for (std::mapintptr_t, PassInfo*::const_iterator I = PassInfoMap.begin(),
+for (std::mapTypeInfo, PassInfo*::const_iterator I = PassInfoMap.begin(),
  E = PassInfoMap.end(); I != E; ++I)
   L-passEnumerate(I-second);
   }
@@ -210,10 +210,11 @@
 // getPassInfo - Return the PassInfo data structure that corresponds to this
 // pass...
 const PassInfo *Pass::getPassInfo() const {
-  return lookupPassInfo(PassID);
+  if (PassInfoCache) return PassInfoCache;
+  return lookupPassInfo(typeid(*this));
 }
 
-const PassInfo *Pass::lookupPassInfo(intptr_t TI) {
+const PassInfo *Pass::lookupPassInfo(const std::type_info TI) {
   return getPassRegistrar()-GetPassInfo(TI);
 }
 
@@ -237,12 +238,12 @@
 
 // RegisterAGBase implementation
 //
-RegisterAGBase::RegisterAGBase(intptr_t InterfaceID,
-   intptr_t PassID, bool isDefault)
-  : RegisterPassBase(InterfaceID),
+RegisterAGBase::RegisterAGBase(const std::type_info Interface,
+   const std::type_info *Pass, bool isDefault)
+  : RegisterPassBase(Interface),
 ImplementationInfo(0), isDefaultImplementation(isDefault) {
 
-  InterfaceInfo = const_castPassInfo*(Pass::lookupPassInfo(InterfaceID));
+  InterfaceInfo = const_castPassInfo*(Pass::lookupPassInfo(Interface));
   if (InterfaceInfo == 0) {
 // First reference to Interface, register it now.
 registerPass();
@@ -251,8 +252,8 @@
   assert(PIObj.isAnalysisGroup() 
  Trying to join an analysis group that is a normal pass!);
 
-  if (PassID) {
-ImplementationInfo = Pass::lookupPassInfo(PassID);
+  if (Pass) {
+ImplementationInfo = Pass::lookupPassInfo(*Pass);
 assert(ImplementationInfo 
Must register pass before adding to AnalysisGroup!);
 



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


[llvm-commits] CVS: llvm/include/llvm/Pass.h PassSupport.h

2007-05-01 Thread Chris Lattner


Changes in directory llvm/include/llvm:

Pass.h updated: 1.87 - 1.88
PassSupport.h updated: 1.39 - 1.40
---
Log message:

revert enough of devang's recent patches to get the tree basically working again


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

 Pass.h|   14 +++---
 PassSupport.h |   26 +-
 2 files changed, 20 insertions(+), 20 deletions(-)


Index: llvm/include/llvm/Pass.h
diff -u llvm/include/llvm/Pass.h:1.87 llvm/include/llvm/Pass.h:1.88
--- llvm/include/llvm/Pass.h:1.87   Tue May  1 16:15:46 2007
+++ llvm/include/llvm/Pass.hTue May  1 23:25:30 2007
@@ -34,8 +34,8 @@
 #include deque
 #include map
 #include iosfwd
+#include typeinfo
 #include cassert
-#include stdint.h
 
 namespace llvm {
 
@@ -77,7 +77,7 @@
 ///
 class Pass {
   AnalysisResolver *Resolver;  // Used to resolve analysis
-  intptr_t PassID;
+  const PassInfo *PassInfoCache;
 
   // AnalysisImpls - This keeps track of which passes implement the interfaces
   // that are required by the current pass (to implement getAnalysis()).
@@ -87,7 +87,7 @@
   void operator=(const Pass);  // DO NOT IMPLEMENT
   Pass(const Pass );   // DO NOT IMPLEMENT
 public:
-  Pass(intptr_t pid) : Resolver(0), PassID(pid) {}
+  Pass(intptr_t pid = 0) : Resolver(0), PassInfoCache(0) {}
   virtual ~Pass();
 
   /// getPassName - Return a nice clean name for a pass.  This usually
@@ -163,12 +163,12 @@
 
   templatetypename AnalysisClass
   static const PassInfo *getClassPassInfo() {
-return lookupPassInfo((intptr_t)AnalysisClass::ID);
+return lookupPassInfo(typeid(AnalysisClass));
   }
 
   // lookupPassInfo - Return the pass info object for the specified pass class,
   // or null if it is not known.
-  static const PassInfo *lookupPassInfo(intptr_t TI);
+  static const PassInfo *lookupPassInfo(const std::type_info TI);
 
   /// getAnalysisToUpdateAnalysisType() - This function is used by subclasses
   /// to get to the analysis information that might be around that needs to be
@@ -274,7 +274,7 @@
 class FunctionPass : public Pass {
 public:
   FunctionPass(intptr_t pid) : Pass(pid) {}
-
+  
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///
@@ -325,7 +325,7 @@
 class BasicBlockPass : public Pass {
 public:
   BasicBlockPass(intptr_t pid) : Pass(pid) {}
-
+  
   /// doInitialization - Virtual method overridden by subclasses to do
   /// any necessary per-module initialization.
   ///


Index: llvm/include/llvm/PassSupport.h
diff -u llvm/include/llvm/PassSupport.h:1.39 
llvm/include/llvm/PassSupport.h:1.40
--- llvm/include/llvm/PassSupport.h:1.39Tue May  1 16:15:46 2007
+++ llvm/include/llvm/PassSupport.h Tue May  1 23:25:30 2007
@@ -37,19 +37,19 @@
 class PassInfo {
   const char   *PassName;  // Nice name for Pass
   const char   *PassArgument;  // Command Line argument to run this 
pass
-  intptr_t PassID;  
+  const std::type_info TypeInfo;  // type_info object for this Pass class
   bool IsCFGOnlyPass;  // Pass only looks at the CFG.
   bool IsAnalysisGroup;// True if an analysis group.
   std::vectorconst PassInfo* ItfImpl;// Interfaces implemented by this pass
 
-  Pass *(*NormalCtor)();
+  Pass *(*NormalCtor)();   // No argument ctor
 
 public:
   /// PassInfo ctor - Do not call this directly, this should only be invoked
   /// through RegisterPass.
-  PassInfo(const char *name, const char *arg, intptr_t pi,
+  PassInfo(const char *name, const char *arg, const std::type_info ti,
Pass *(*normal)() = 0, bool isCFGOnly = false)
-: PassName(name), PassArgument(arg), PassID(pi), 
+: PassName(name), PassArgument(arg), TypeInfo(ti), 
   IsCFGOnlyPass(isCFGOnly), IsAnalysisGroup(false), NormalCtor(normal) {
   }
 
@@ -65,8 +65,8 @@
   const char *getPassArgument() const { return PassArgument; }
 
   /// getTypeInfo - Return the type_info object for the pass...
-  /// TODO : Rename
-  intptr_t getTypeInfo() const { return PassID; }
+  ///
+  const std::type_info getTypeInfo() const { return TypeInfo; }
 
   /// isAnalysisGroup - Return true if this is an analysis group, not a normal
   /// pass.
@@ -139,12 +139,12 @@
 
   typedef Pass* (*NormalCtor_t)();
   
-  RegisterPassBase(const char *Name, const char *Arg, intptr_t TI,
+  RegisterPassBase(const char *Name, const char *Arg, const std::type_info TI,
NormalCtor_t NormalCtor = 0, bool CFGOnly = false)
 : PIObj(Name, Arg, TI, NormalCtor, CFGOnly) {
 registerPass();
   }
-  RegisterPassBase(intptr_t TI)
+  RegisterPassBase(const std::type_info TI)
 : PIObj(, , TI) {
 // This ctor may only be used for analysis groups: it does not 
auto-register
 // the pass.
@@ -165,7 +165,7 @@
 
   // Register Pass using default constructor...
   RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false)
-: 

[llvm-commits] CVS: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Writer:

BitcodeWriter.cpp updated: 1.19 - 1.20
---
Log message:

use the correct code for binop instrs


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

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


Index: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff -u llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.19 
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.20
--- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.19  Tue May  1 02:03:37 2007
+++ llvm/lib/Bitcode/Writer/BitcodeWriter.cpp   Tue May  1 23:26:36 2007
@@ -497,7 +497,7 @@
   Vals.push_back(VE.getValueID(I.getOperand(0)));
 } else {
   assert(isaBinaryOperator(I)  Unknown instruction!);
-  Code = bitc::CST_CODE_CE_BINOP;
+  Code = bitc::FUNC_CODE_INST_BINOP;
   Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
   Vals.push_back(VE.getTypeID(I.getType()));
   Vals.push_back(VE.getValueID(I.getOperand(0)));



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


[llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Reader:

BitcodeReader.cpp updated: 1.21 - 1.22
---
Log message:

read a few instructions, fix some bugs.  This is enough to be able to round
trip function bodies like this:

define 2 x i64 @foo(2 x i64 %x, 2 x i64 %y) {
%tmp4 = bitcast 2 x i64 %y to 8 x i16   ; 8 x i16 
[#uses=1]
%tmp5 = bitcast 2 x i64 %x to 8 x i16   ; 8 x i16 
[#uses=1]
%tmp = add 8 x i16 %tmp5, %tmp4   ; 8 x i16 [#uses=1]
%tmp6 = bitcast 8 x i16 %tmp to 2 x i64 ; 2 x i64 
[#uses=1]
ret 2 x i64 %tmp6
}



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

 BitcodeReader.cpp |   53 ++---
 1 files changed, 38 insertions(+), 15 deletions(-)


Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.21 
llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.22
--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.21  Tue May  1 02:01:57 2007
+++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp   Tue May  1 23:27:25 2007
@@ -1006,7 +1006,9 @@
 ValueList.push_back(I);
   
   unsigned NextValueNo = ValueList.size();
-  
+  BasicBlock *CurBB = 0;
+  unsigned CurBBNo = 0;
+
   // Read all the records.
   SmallVectoruint64_t, 64 Record;
   while (1) {
@@ -1042,8 +1044,6 @@
 // Read a record.
 Record.clear();
 Instruction *I = 0;
-BasicBlock *CurBB = 0;
-unsigned CurBBNo = 0;
 switch (Stream.ReadRecord(Code, Record)) {
 default: // Default behavior: reject
   return Error(Unknown instruction);
@@ -1057,8 +1057,7 @@
   CurBB = FunctionBBs[0];
   continue;
   
-case bitc::FUNC_CODE_INST_BINOP: {
-  // BINOP:  [opcode, ty, opval, opval]
+case bitc::FUNC_CODE_INST_BINOP: {// BINOP: [opcode, ty, opval, opval]
   if (Record.size()  4) return Error(Invalid BINOP record);
   const Type *Ty = getTypeByID(Record[1]);
   int Opc = GetDecodedBinaryOpcode(Record[0], Ty);
@@ -1069,9 +1068,18 @@
   I = BinaryOperator::create((Instruction::BinaryOps)Opc, LHS, RHS);
   break;
 }
+case bitc::FUNC_CODE_INST_CAST: {// CAST: [opcode, ty, opty, opval]
+  if (Record.size()  4) return Error(Invalid CAST record);
+  int Opc = GetDecodedCastOpcode(Record[0]);
+  const Type *ResTy = getTypeByID(Record[1]);
+  const Type *OpTy = getTypeByID(Record[2]);
+  Value *Op = getFnValueByID(Record[3], OpTy);
+  if (Opc == -1 || ResTy == 0 || OpTy == 0 || Op == 0)
+return Error(Invalid CAST record);
+  I = CastInst::create((Instruction::CastOps)Opc, Op, ResTy);
+  break;
+}
 #if 0
-case bitc::FUNC_CODE_INST_CAST:
-  // CAST:   [opcode, ty, opty, opval]
 case bitc::FUNC_CODE_INST_GEP:
   // GEP:[n, n x operands]
 case bitc::FUNC_CODE_INST_SELECT:
@@ -1084,20 +1092,35 @@
   // SHUFFLEVEC: [ty, opval, opval, opval]
 case bitc::FUNC_CODE_INST_CMP:
   // CMP:[opty, opval, opval, pred]
-
-case bitc::FUNC_CODE_INST_RET:
-  // RET:[opty,opvaloptional]
+#endif
+  
+case bitc::FUNC_CODE_INST_RET: // RET: [opty,opvaloptional]
+  if (Record.size() == 0) {
+I = new ReturnInst();
+break;
+  }
+  if (Record.size() == 2) {
+const Type *OpTy = getTypeByID(Record[0]);
+Value *Op = getFnValueByID(Record[1], OpTy);
+if (OpTy  Op);
+I = new ReturnInst(Op);
+break;
+  }
+  return Error(Invalid RET record);
+#if 0
 case bitc::FUNC_CODE_INST_BR:
   // BR: [opval, bb#, bb#] or [bb#]
 case bitc::FUNC_CODE_INST_SWITCH:
   // SWITCH: [opty, opval, n, n x ops]
 case bitc::FUNC_CODE_INST_INVOKE:
   // INVOKE: [fnty, op0,op1,op2, ...]
-case bitc::FUNC_CODE_INST_UNWIND:
-  // UNWIND
-case bitc::FUNC_CODE_INST_UNREACHABLE:
-  // UNREACHABLE
-
+case bitc::FUNC_CODE_INST_UNWIND: // UNWIND
+  I = new UnwindInst();
+  break;
+case bitc::FUNC_CODE_INST_UNREACHABLE: // UNREACHABLE
+  I = new UnreachableInst();
+  break;
+
 case bitc::FUNC_CODE_INST_PHI:
   // PHI:[ty, #ops, val0,bb0, ...]
 case bitc::FUNC_CODE_INST_MALLOC:



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


[llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Reader:

BitcodeReader.cpp updated: 1.22 - 1.23
---
Log message:

add reader support for a bunch of new instructions


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

 BitcodeReader.cpp |  104 ++
 1 files changed, 90 insertions(+), 14 deletions(-)


Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.22 
llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.23
--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.22  Tue May  1 23:27:25 2007
+++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp   Wed May  2 00:16:49 2007
@@ -150,6 +150,9 @@
 return V;
   }
   
+  // No type specified, must be invalid reference.
+  if (Ty == 0) return 0;
+  
   // Create and return a placeholder, which will later be RAUW'd.
   Value *V = new Argument(Ty);
   Uses[Idx].init(V, this);
@@ -1079,21 +1082,94 @@
   I = CastInst::create((Instruction::CastOps)Opc, Op, ResTy);
   break;
 }
-#if 0
-case bitc::FUNC_CODE_INST_GEP:
-  // GEP:[n, n x operands]
-case bitc::FUNC_CODE_INST_SELECT:
-  // SELECT: [ty, opval, opval, opval]
-case bitc::FUNC_CODE_INST_EXTRACTELT:
-  // EXTRACTELT: [opty, opval, opval]
-case bitc::FUNC_CODE_INST_INSERTELT:
-  // INSERTELT:  [ty, opval, opval, opval]
-case bitc::FUNC_CODE_INST_SHUFFLEVEC:
-  // SHUFFLEVEC: [ty, opval, opval, opval]
-case bitc::FUNC_CODE_INST_CMP:
-  // CMP:[opty, opval, opval, pred]
-#endif
+case bitc::FUNC_CODE_INST_GEP: { // GEP: [n, n x operands]
+  if (Record.size()  2 || (Record.size()  1))
+return Error(Invalid GEP record);
+  const Type *OpTy = getTypeByID(Record[0]);
+  Value *Op = getFnValueByID(Record[1], OpTy);
+  if (OpTy == 0 || Op == 0)
+return Error(Invalid GEP record);
+
+  SmallVectorValue*, 8 GEPIdx;
+  for (unsigned i = 1, e = Record.size()/2; i != e; ++i) {
+const Type *IdxTy = getTypeByID(Record[i*2]);
+Value *Idx = getFnValueByID(Record[i*2+1], IdxTy);
+if (IdxTy == 0 || Idx == 0)
+  return Error(Invalid GEP record);
+GEPIdx.push_back(Idx);
+  }
+
+  I = new GetElementPtrInst(Op, GEPIdx[0], GEPIdx.size());
+  break;
+}
   
+case bitc::FUNC_CODE_INST_SELECT: { // SELECT: [ty, opval, opval, opval]
+  if (Record.size()  4) return Error(Invalid SELECT record);
+  const Type *Ty = getTypeByID(Record[0]);
+  Value *Cond = getFnValueByID(Record[1], Type::Int1Ty);
+  Value *LHS = getFnValueByID(Record[2], Ty);
+  Value *RHS = getFnValueByID(Record[3], Ty);
+  if (Ty == 0 || Cond == 0 || LHS == 0 || RHS == 0)
+return Error(Invalid SELECT record);
+  I = new SelectInst(Cond, LHS, RHS);
+  break;
+}
+  
+case bitc::FUNC_CODE_INST_EXTRACTELT: { // EXTRACTELT: [opty, opval, opval]
+  if (Record.size()  3) return Error(Invalid EXTRACTELT record);
+  const Type *OpTy = getTypeByID(Record[0]);
+  Value *Vec = getFnValueByID(Record[1], OpTy);
+  Value *Idx = getFnValueByID(Record[2], Type::Int32Ty);
+  if (OpTy == 0 || Vec == 0 || Idx == 0)
+return Error(Invalid EXTRACTELT record);
+  I = new ExtractElementInst(Vec, Idx);
+  break;
+}
+  
+case bitc::FUNC_CODE_INST_INSERTELT: { // INSERTELT: [ty, 
opval,opval,opval]
+  if (Record.size()  4) return Error(Invalid INSERTELT record);
+  const VectorType *OpTy = 
+dyn_cast_or_nullVectorType(getTypeByID(Record[0]));
+  if (OpTy == 0) return Error(Invalid INSERTELT record);
+  Value *Vec = getFnValueByID(Record[1], OpTy);
+  Value *Elt = getFnValueByID(Record[2], OpTy-getElementType());
+  Value *Idx = getFnValueByID(Record[3], Type::Int32Ty);
+  if (Vec == 0 || Elt == 0 || Idx == 0)
+return Error(Invalid INSERTELT record);
+  I = new InsertElementInst(Vec, Elt, Idx);
+  break;
+}
+  
+case bitc::FUNC_CODE_INST_SHUFFLEVEC: {// SHUFFLEVEC: 
[ty,opval,opval,opval]
+  if (Record.size()  4) return Error(Invalid SHUFFLEVEC record);
+  const VectorType *OpTy = 
+dyn_cast_or_nullVectorType(getTypeByID(Record[0]));
+  if (OpTy == 0) return Error(Invalid SHUFFLEVEC record);
+  Value *Vec1 = getFnValueByID(Record[1], OpTy);
+  Value *Vec2 = getFnValueByID(Record[2], OpTy);
+  Value *Mask = getFnValueByID(Record[3],
+   VectorType::get(Type::Int32Ty,
+   OpTy-getNumElements()));
+  if (Vec1 == 0 || Vec2 == 0 || Mask == 0)
+return Error(Invalid SHUFFLEVEC record);
+  I = new ShuffleVectorInst(Vec1, Vec2, Mask);
+  break;
+}
+  
+case bitc::FUNC_CODE_INST_CMP: { // CMP: [opty, opval, opval, pred]
+  if (Record.size()  4) return Error(Invalid CMP record);
+  const Type *OpTy = getTypeByID(Record[0]);
+  Value *LHS = 

[llvm-commits] CVS: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Writer:

BitcodeWriter.cpp updated: 1.20 - 1.21
---
Log message:

add reader logic for terminator instrs.


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

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


Index: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff -u llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.20 
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.21
--- llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:1.20  Tue May  1 23:26:36 2007
+++ llvm/lib/Bitcode/Writer/BitcodeWriter.cpp   Wed May  2 00:46:45 2007
@@ -507,7 +507,6 @@
 
   case Instruction::GetElementPtr:
 Code = bitc::FUNC_CODE_INST_GEP;
-Vals.push_back(I.getNumOperands());
 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
   Vals.push_back(VE.getTypeID(I.getOperand(i)-getType()));
   Vals.push_back(VE.getValueID(I.getOperand(i)));
@@ -567,7 +566,6 @@
   case Instruction::Switch:
 Code = bitc::FUNC_CODE_INST_SWITCH;
 Vals.push_back(VE.getTypeID(I.getOperand(0)-getType()));
-Vals.push_back(I.getNumOperands());
 for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
   Vals.push_back(VE.getValueID(I.getOperand(i)));
 break;



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


[llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h

2007-05-01 Thread Chris Lattner


Changes in directory llvm/lib/Bitcode/Reader:

BitcodeReader.cpp updated: 1.23 - 1.24
BitcodeReader.h updated: 1.15 - 1.16
---
Log message:

add reader logic for terminator instrs.


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

 BitcodeReader.cpp |   97 +-
 BitcodeReader.h   |4 ++
 2 files changed, 93 insertions(+), 8 deletions(-)


Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.23 
llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.24
--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.23  Wed May  2 00:16:49 2007
+++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp   Wed May  2 00:46:45 2007
@@ -1090,7 +1090,7 @@
   if (OpTy == 0 || Op == 0)
 return Error(Invalid GEP record);
 
-  SmallVectorValue*, 8 GEPIdx;
+  SmallVectorValue*, 16 GEPIdx;
   for (unsigned i = 1, e = Record.size()/2; i != e; ++i) {
 const Type *IdxTy = getTypeByID(Record[i*2]);
 Value *Idx = getFnValueByID(Record[i*2+1], IdxTy);
@@ -1183,19 +1183,100 @@
 break;
   }
   return Error(Invalid RET record);
-#if 0
-case bitc::FUNC_CODE_INST_BR:
-  // BR: [opval, bb#, bb#] or [bb#]
-case bitc::FUNC_CODE_INST_SWITCH:
-  // SWITCH: [opty, opval, n, n x ops]
-case bitc::FUNC_CODE_INST_INVOKE:
-  // INVOKE: [fnty, op0,op1,op2, ...]
+case bitc::FUNC_CODE_INST_BR: { // BR: [bb#, bb#, opval] or [bb#]
+  if (Record.size() != 1 || Record.size() != 3)
+return Error(Invalid BR record);
+  BasicBlock *TrueDest = getBasicBlock(Record[0]);
+  if (TrueDest == 0)
+return Error(Invalid BR record);
+
+  if (Record.size() == 1)
+I = new BranchInst(TrueDest);
+  else {
+BasicBlock *FalseDest = getBasicBlock(Record[1]);
+Value *Cond = getFnValueByID(Record[2], Type::Int1Ty);
+if (FalseDest == 0 || Cond == 0)
+  return Error(Invalid BR record);
+I = new BranchInst(TrueDest, FalseDest, Cond);
+  }
+  break;
+}
+case bitc::FUNC_CODE_INST_SWITCH: { // SWITCH: [opty, opval, n, n x ops]
+  if (Record.size()  3 || (Record.size()  1) == 0)
+return Error(Invalid SWITCH record);
+  const Type *OpTy = getTypeByID(Record[0]);
+  Value *Cond = getFnValueByID(Record[1], OpTy);
+  BasicBlock *Default = getBasicBlock(Record[2]);
+  if (OpTy == 0 || Cond == 0 || Default == 0)
+return Error(Invalid SWITCH record);
+  unsigned NumCases = (Record.size()-3)/2;
+  SwitchInst *SI = new SwitchInst(Cond, Default, NumCases);
+  for (unsigned i = 0, e = NumCases; i != e; ++i) {
+ConstantInt *CaseVal = 
+  dyn_cast_or_nullConstantInt(getFnValueByID(Record[3+i*2], OpTy));
+BasicBlock *DestBB = getBasicBlock(Record[1+3+i*2]);
+if (CaseVal == 0 || DestBB == 0) {
+  delete SI;
+  return Error(Invalid SWITCH record!);
+}
+SI-addCase(CaseVal, DestBB);
+  }
+  I = SI;
+  break;
+}
+  
+case bitc::FUNC_CODE_INST_INVOKE: { // INVOKE: [fnty, op0,op1,op2, ...]
+  if (Record.size()  4)
+return Error(Invalid INVOKE record);
+  const PointerType *CalleeTy =
+dyn_cast_or_nullPointerType(getTypeByID(Record[0]));
+  Value *Callee = getFnValueByID(Record[1], CalleeTy);
+  BasicBlock *NormalBB = getBasicBlock(Record[2]);
+  BasicBlock *UnwindBB = getBasicBlock(Record[3]);
+  if (CalleeTy == 0 || Callee == 0 || NormalBB == 0 || UnwindBB == 0)
+return Error(Invalid INVOKE record);
+  
+  const FunctionType *FTy =
+dyn_castFunctionType(CalleeTy-getElementType());
+
+  // Check that the right number of fixed parameters are here.
+  if (FTy == 0 || Record.size()  4+FTy-getNumParams())
+return Error(Invalid INVOKE record);
+
+  SmallVectorValue*, 16 Ops;
+  for (unsigned i = 0, e = FTy-getNumParams(); i != e; ++i) {
+Ops.push_back(getFnValueByID(Record[4+i], FTy-getParamType(4+i)));
+if (Ops.back() == 0)
+  return Error(Invalid INVOKE record);
+  }
+  
+  unsigned FirstVarargParam = 4+FTy-getNumParams();
+  if (FTy-isVarArg()) {
+// Read type/value pairs for varargs params.
+if ((Record.size()-FirstVarargParam)  1)
+  return Error(Invalid INVOKE record);
+
+for (unsigned i = FirstVarargParam, e = Record.size(); i != e; i += 2) 
{
+  const Type *ArgTy = getTypeByID(Record[i]);
+  Ops.push_back(getFnValueByID(Record[i+1], ArgTy));
+  if (Ops.back() == 0 || ArgTy == 0)
+return Error(Invalid INVOKE record);
+}
+  } else {
+if (Record.size() != FirstVarargParam)
+  return Error(Invalid INVOKE record);
+  }
+  
+  I = new InvokeInst(Callee, NormalBB, UnwindBB, Ops[0], Ops.size());
+  break;
+}
 case bitc::FUNC_CODE_INST_UNWIND: // UNWIND
   I = 

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

2007-05-01 Thread Chris Lattner

On May 1, 2007, at 1:28 PM, Nate Begeman wrote:

 I believe that sub/super register generator unions the set of sub/
 super registers in a deterministic fashion and produces the
 necessary tables in the RegisterInfo.inc already. The only thing is
 that this would make the sub register index implicit in the
 ordering of the sub register list in the RegisterInfo.td.

 I'm not sure things are sufficiently well ordered internally for
 that, or sorted in any particular fashion.  I'll look into it, but it
 seems like it would be less flexible and make the td files far less
 intuitive as to what is actually going on.  If tablegen picked the
 numbering, I would have to go read the generated file to know what to
 write in the ISel for that backend, which seems backwards to me.

I agree with both of you.  We should have the subreg number in  
the .td file, but we should merge this with the existing subreg stuff  
if possible.  One simple thing would be for nates new syntax to  
populate the old tables, making the old syntax unneeded?

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