Delete unnecessary elses.
[oota-llvm.git] / include / llvm / CodeGen / SelectionDAG.h
index ea35e69a4868b804a9dee8984ff5e7768116233c..c04436be277ba405b499b90acd8c56f1f93cb52e 100644 (file)
@@ -32,6 +32,7 @@ class AliasAnalysis;
 class TargetLowering;
 class TargetMachine;
 class MachineModuleInfo;
+class DwarfWriter;
 class MachineFunction;
 class MachineConstantPoolValue;
 class FunctionLoweringInfo;
@@ -76,6 +77,7 @@ class SelectionDAG {
   MachineFunction *MF;
   FunctionLoweringInfo &FLI;
   MachineModuleInfo *MMI;
+  DwarfWriter *DW;
 
   /// EntryNode - The starting token.
   SDNode EntryNode;
@@ -122,7 +124,7 @@ public:
   /// init - Prepare this SelectionDAG to process code in the given
   /// MachineFunction.
   ///
-  void init(MachineFunction &mf, MachineModuleInfo *mmi);
+  void init(MachineFunction &mf, MachineModuleInfo *mmi, DwarfWriter *dw);
 
   /// clear - Clear state and free memory necessary to make this
   /// SelectionDAG ready to process a new block.
@@ -134,6 +136,7 @@ public:
   TargetLowering &getTargetLoweringInfo() const { return TLI; }
   FunctionLoweringInfo &getFunctionLoweringInfo() const { return FLI; }
   MachineModuleInfo *getMachineModuleInfo() const { return MMI; }
+  DwarfWriter *getDwarfWriter() const { return DW; }
 
   /// viewGraph - Pop up a GraphViz/gv window with the DAG rendered using 'dot'.
   ///
@@ -310,7 +313,7 @@ public:
   SDValue getValueType(MVT);
   SDValue getRegister(unsigned Reg, MVT VT);
   SDValue getDbgStopPoint(SDValue Root, unsigned Line, unsigned Col,
-                            const CompileUnitDesc *CU);
+                          Value *CU);
   SDValue getLabel(unsigned Opcode, SDValue Root, unsigned LabelID);
 
   SDValue getCopyToReg(SDValue Chain, unsigned Reg, SDValue N) {
@@ -363,6 +366,9 @@ public:
   /// value assuming it was the smaller SrcTy value.
   SDValue getZeroExtendInReg(SDValue Op, MVT SrcTy);
   
+  /// getNOT - Create a bitwise NOT operation as (XOR Val, -1).
+  SDValue getNOT(SDValue Val, MVT VT);
+
   /// getCALLSEQ_START - Return a new CALLSEQ_START node, which always must have
   /// a flag result (to ensure it's not CSE'd).
   SDValue getCALLSEQ_START(SDValue Chain, SDValue Op) {
@@ -527,11 +533,11 @@ public:
   SDValue getIndexedStore(SDValue OrigStoe, SDValue Base,
                            SDValue Offset, ISD::MemIndexedMode AM);
 
-  // getSrcValue - Construct a node to track a Value* through the backend.
+  /// getSrcValue - Construct a node to track a Value* through the backend.
   SDValue getSrcValue(const Value *v);
 
-  // getMemOperand - Construct a node to track a memory reference
-  // through the backend.
+  /// getMemOperand - Construct a node to track a memory reference
+  /// through the backend.
   SDValue getMemOperand(const MachineMemOperand &MO);
 
   /// UpdateNodeOperands - *Mutate* the specified node in-place to have the
@@ -677,6 +683,11 @@ public:
   /// informed about nodes that are deleted and modified due to recursive
   /// changes in the dag.
   ///
+  /// These functions only replace all existing uses. It's possible that as
+  /// these replacements are being performed, CSE may cause the From node
+  /// to be given new uses. These new uses of From are left in place, and
+  /// not automatically transfered to To.
+  ///
   void ReplaceAllUsesWith(SDValue From, SDValue Op,
                           DAGUpdateListener *UpdateListener = 0);
   void ReplaceAllUsesWith(SDNode *From, SDNode *To,
@@ -789,7 +800,7 @@ public:
   
 private:
   bool RemoveNodeFromCSEMaps(SDNode *N);
-  SDNode *AddNonLeafNodeToCSEMaps(SDNode *N);
+  void AddModifiedNodeToCSEMaps(SDNode *N, DAGUpdateListener *UpdateListener);
   SDNode *FindModifiedNodeSlot(SDNode *N, SDValue Op, void *&InsertPos);
   SDNode *FindModifiedNodeSlot(SDNode *N, SDValue Op1, SDValue Op2,
                                void *&InsertPos);
@@ -797,15 +808,16 @@ private:
                                void *&InsertPos);
 
   void DeleteNodeNotInCSEMaps(SDNode *N);
+  void DeallocateNode(SDNode *N);
 
   unsigned getMVTAlignment(MVT MemoryVT) const;
 
   void allnodes_clear();
   
-  // List of non-single value types.
+  /// VTList - List of non-single value types.
   std::vector<SDVTList> VTList;
   
-  // Maps to auto-CSE operations.
+  /// CondCodeNodes - Maps to auto-CSE operations.
   std::vector<CondCodeSDNode*> CondCodeNodes;
 
   std::vector<SDNode*> ValueTypeNodes;