[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp TargetLowering.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.25 - 1.26 TargetLowering.cpp updated: 1.108 - 1.109 --- Log message: Removed tabs everywhere except autogenerated external files. Add make target for tabs checking. --- Diffs of the changes: (+23 -23) ScheduleDAGSimple.cpp | 42 +- TargetLowering.cpp|4 ++-- 2 files changed, 23 insertions(+), 23 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.25 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.26 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.25Sun Feb 4 02:47:20 2007 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Mon Apr 16 13:10:22 2007 @@ -288,9 +288,9 @@ // Tally iterator /// SlotsAvailable - Returns true if all units are available. - /// + /// bool SlotsAvailable(Iter Begin, unsigned N, unsigned ResourceSet, - unsigned Resource) { + unsigned Resource) { assert(N Must check availability with N != 0); // Determine end of interval Iter End = Begin + N; @@ -318,23 +318,23 @@ Resource = 0; return false; } - - /// RetrySlot - Finds a good candidate slot to retry search. + + /// RetrySlot - Finds a good candidate slot to retry search. Iter RetrySlot(Iter Begin, unsigned N, unsigned ResourceSet) { assert(N Must check availability with N != 0); // Determine end of interval Iter End = Begin + N; assert(End = Tally.end() Tally is not large enough for schedule); - - while (Begin != End--) { - // Clear units in use - ResourceSet = ~*End; - // If no units left then we should go no further - if (!ResourceSet) return End + 1; - } - // Made it all the way through - return Begin; - } + +while (Begin != End--) { + // Clear units in use + ResourceSet = ~*End; + // If no units left then we should go no further + if (!ResourceSet) return End + 1; +} +// Made it all the way through +return Begin; + } /// FindAndReserveStages - Return true if the stages can be completed. If /// so mark as busy. @@ -391,13 +391,13 @@ // FindAndReserve - Locate an ideal slot for the specified stages and mark // as busy. unsigned FindAndReserve(unsigned Slot, InstrStage *StageBegin, - InstrStage *StageEnd) { - // Where to begin - Iter Begin = Tally.begin() + Slot; - // Find a free slot - Iter Where = FindSlots(Begin, StageBegin, StageEnd); - // Distance is slot number - unsigned Final = Where - Tally.begin(); + InstrStage *StageEnd) { +// Where to begin +Iter Begin = Tally.begin() + Slot; +// Find a free slot +Iter Where = FindSlots(Begin, StageBegin, StageEnd); +// Distance is slot number +unsigned Final = Where - Tally.begin(); return Final; } Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp diff -u llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.108 llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.109 --- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.108 Wed Apr 11 23:44:28 2007 +++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cppMon Apr 16 13:10:22 2007 @@ -2150,7 +2150,7 @@ /// multiplying by a magic number. See: /// http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html SDOperand TargetLowering::BuildSDIV(SDNode *N, SelectionDAG DAG, - std::vectorSDNode** Created) const { +std::vectorSDNode** Created) const { MVT::ValueType VT = N-getValueType(0); // Check to see if we can do this. @@ -2198,7 +2198,7 @@ /// multiplying by a magic number. See: /// http://the.wall.riscom.net/books/proc/ppc/cwg/code2.html SDOperand TargetLowering::BuildUDIV(SDNode *N, SelectionDAG DAG, - std::vectorSDNode** Created) const { +std::vectorSDNode** Created) const { MVT::ValueType VT = N-getValueType(0); // Check to see if we can do this. ___ 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/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.22 - 1.23 --- Log message: Fixed so that it dereferences the ostream pointer. --- Diffs of the changes: (+1 -1) ScheduleDAGSimple.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.22 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.23 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.22Sat Dec 16 23:15:13 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Sun Dec 17 05:15:53 2006 @@ -487,7 +487,7 @@ /// printNI - Print node info. /// void printNI(std::ostream O, NodeInfo *NI) const; - void printNI(std::ostream *O, NodeInfo *NI) const { if (O) printNI(O, NI); } + void printNI(std::ostream *O, NodeInfo *NI) const { if (O) printNI(*O, NI); } /// printChanges - Hilight changes in order caused by scheduling. /// ___ 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/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.21 - 1.22 --- Log message: Added an automatic cast to std::ostream* etc. from OStream. We then can rework the hacks that had us passing OStream in. We pass in std::ostream* instead, check for null, and then dispatch to the correct print() method. --- Diffs of the changes: (+13 -11) ScheduleDAGSimple.cpp | 24 +--- 1 files changed, 13 insertions(+), 11 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.21 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.22 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.21Mon Dec 11 13:15:36 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Sat Dec 16 23:15:13 2006 @@ -473,7 +473,8 @@ /// print - Print ordering to specified output stream. /// - void print(OStream O) const; + void print(std::ostream O) const; + void print(std::ostream *O) const { if (O) print(*O); } void dump(const char *tag) const; @@ -485,7 +486,8 @@ /// printNI - Print node info. /// - void printNI(OStream O, NodeInfo *NI) const; + void printNI(std::ostream O, NodeInfo *NI) const; + void printNI(std::ostream *O, NodeInfo *NI) const { if (O) printNI(O, NI); } /// printChanges - Hilight changes in order caused by scheduling. /// @@ -636,7 +638,7 @@ /// print - Print ordering to specified output stream. /// -void ScheduleDAGSimple::print(OStream O) const { +void ScheduleDAGSimple::print(std::ostream O) const { #ifndef NDEBUG O Ordering\n; for (unsigned i = 0, N = Ordering.size(); i N; i++) { @@ -710,16 +712,16 @@ /// printNI - Print node info. /// -void ScheduleDAGSimple::printNI(OStream O, NodeInfo *NI) const { +void ScheduleDAGSimple::printNI(std::ostream O, NodeInfo *NI) const { #ifndef NDEBUG SDNode *Node = NI-Node; - *(O.stream()) - std::hex Node std::dec - , Lat= NI-Latency - , Slot= NI-Slot - , ARITY=( Node-getNumOperands() , - Node-getNumValues() ) -Node-getOperationName(DAG); + O + std::hex Node std::dec + , Lat= NI-Latency + , Slot= NI-Slot + , ARITY=( Node-getNumOperands() , + Node-getNumValues() ) +Node-getOperationName(DAG); if (isFlagDefiner(Node)) O #; if (isFlagUser(Node)) O #; #endif ___ 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/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.20 - 1.21 --- Log message: It seems the llvm::OStream class does not handle stream manipulators. For now, just grab the stream and perform the output on it directly. --- Diffs of the changes: (+7 -7) ScheduleDAGSimple.cpp | 14 +++--- 1 files changed, 7 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.20 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.21 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.20Thu Dec 7 14:04:42 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Mon Dec 11 13:15:36 2006 @@ -713,13 +713,13 @@ void ScheduleDAGSimple::printNI(OStream O, NodeInfo *NI) const { #ifndef NDEBUG SDNode *Node = NI-Node; - O - std::hex Node std::dec - , Lat= NI-Latency - , Slot= NI-Slot - , ARITY=( Node-getNumOperands() , - Node-getNumValues() ) -Node-getOperationName(DAG); + *(O.stream()) + std::hex Node std::dec + , Lat= NI-Latency + , Slot= NI-Slot + , ARITY=( Node-getNumOperands() , + Node-getNumValues() ) +Node-getOperationName(DAG); if (isFlagDefiner(Node)) O #; if (isFlagUser(Node)) O #; #endif ___ 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/ScheduleDAGSimple.cpp
Hi John, Could you please file a bug on this and assign it to me? Thanks! -bw On Dec 11, 2006, at 11:16 AM, John Criswell wrote: Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.20 - 1.21 --- Log message: It seems the llvm::OStream class does not handle stream manipulators. For now, just grab the stream and perform the output on it directly. --- Diffs of the changes: (+7 -7) ScheduleDAGSimple.cpp | 14 +++--- 1 files changed, 7 insertions(+), 7 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.20 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.21 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.20 Thu Dec 7 14:04:42 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Mon Dec 11 13:15:36 2006 @@ -713,13 +713,13 @@ void ScheduleDAGSimple::printNI(OStream O, NodeInfo *NI) const { #ifndef NDEBUG SDNode *Node = NI-Node; - O - std::hex Node std::dec - , Lat= NI-Latency - , Slot= NI-Slot - , ARITY=( Node-getNumOperands() , - Node-getNumValues() ) -Node-getOperationName(DAG); + *(O.stream()) + std::hex Node std::dec + , Lat= NI-Latency + , Slot= NI-Slot + , ARITY=( Node-getNumOperands() , + Node-getNumValues() ) +Node-getOperationName(DAG); if (isFlagDefiner(Node)) O #; if (isFlagUser(Node)) O #; #endif ___ 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/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.16 - 1.17 --- Log message: Copy the liveins for the first block. PR859: http://llvm.org/PR859 --- Diffs of the changes: (+14 -0) ScheduleDAGSimple.cpp | 14 ++ 1 files changed, 14 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.16 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.17 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.16Wed Aug 2 07:30:23 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Thu Aug 3 15:51:06 2006 @@ -14,9 +14,11 @@ //===--===// #define DEBUG_TYPE sched +#include llvm/CodeGen/MachineFunction.h #include llvm/CodeGen/ScheduleDAG.h #include llvm/CodeGen/SchedulerRegistry.h #include llvm/CodeGen/SelectionDAG.h +#include llvm/CodeGen/SSARegMap.h #include llvm/Target/TargetData.h #include llvm/Target/TargetMachine.h #include llvm/Target/TargetInstrInfo.h @@ -669,6 +671,18 @@ /// EmitAll - Emit all nodes in schedule sorted order. /// void ScheduleDAGSimple::EmitAll() { + // If this is the first basic block in the function, and if it has live ins + // that need to be copied into vregs, emit the copies into the top of the + // block before emitting the code for the block. + MachineFunction MF = DAG.getMachineFunction(); + if (MF.front() == BB MF.livein_begin() != MF.livein_end()) { +for (MachineFunction::livein_iterator LI = MF.livein_begin(), + E = MF.livein_end(); LI != E; ++LI) + if (LI-second) +MRI-copyRegToReg(*MF.begin(), MF.begin()-end(), LI-second, + LI-first, RegMap-getRegClass(LI-second)); + } + std::mapSDNode*, unsigned VRBaseMap; // For each node in the ordering ___ 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/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.10 - 1.11 --- Log message: Move simple-selector-specific types to the simple selector. --- Diffs of the changes: (+202 -0) ScheduleDAGSimple.cpp | 202 ++ 1 files changed, 202 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.10 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.11 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.10Fri Mar 10 01:49:12 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Fri Mar 10 01:51:18 2006 @@ -24,6 +24,208 @@ using namespace llvm; namespace { +class NodeInfo; +typedef NodeInfo *NodeInfoPtr; +typedef std::vectorNodeInfoPtr NIVector; +typedef std::vectorNodeInfoPtr::iterator NIIterator; + +//======// +/// +/// Node group - This struct is used to manage flagged node groups. +/// +class NodeGroup { +public: + NodeGroup *Next; +private: + NIVector Members;// Group member nodes + NodeInfo *Dominator; // Node with highest latency + unsigned Latency;// Total latency of the group + int Pending;// Number of visits pending before +// adding to order + +public: + // Ctor. + NodeGroup() : Next(NULL), Dominator(NULL), Pending(0) {} + + // Accessors + inline void setDominator(NodeInfo *D) { Dominator = D; } + inline NodeInfo *getTop() { return Members.front(); } + inline NodeInfo *getBottom() { return Members.back(); } + inline NodeInfo *getDominator() { return Dominator; } + inline void setLatency(unsigned L) { Latency = L; } + inline unsigned getLatency() { return Latency; } + inline int getPending() const { return Pending; } + inline void setPending(int P) { Pending = P; } + inline int addPending(int I) { return Pending += I; } + + // Pass thru + inline bool group_empty() { return Members.empty(); } + inline NIIterator group_begin() { return Members.begin(); } + inline NIIterator group_end() { return Members.end(); } + inline void group_push_back(const NodeInfoPtr NI) { +Members.push_back(NI); + } + inline NIIterator group_insert(NIIterator Pos, const NodeInfoPtr NI) { +return Members.insert(Pos, NI); + } + inline void group_insert(NIIterator Pos, NIIterator First, + NIIterator Last) { +Members.insert(Pos, First, Last); + } + + static void Add(NodeInfo *D, NodeInfo *U); +}; + +//======// +/// +/// NodeInfo - This struct tracks information used to schedule the a node. +/// +class NodeInfo { +private: + int Pending;// Number of visits pending before +// adding to order +public: + SDNode*Node; // DAG node + InstrStage*StageBegin;// First stage in itinerary + InstrStage*StageEnd; // Last+1 stage in itinerary + unsigned Latency;// Total cycles to complete instr + bool IsCall : 1; // Is function call + bool IsLoad : 1; // Is memory load + bool IsStore : 1;// Is memory store + unsigned Slot; // Node's time slot + NodeGroup *Group; // Grouping information +#ifndef NDEBUG + unsigned Preorder; // Index before scheduling +#endif + + // Ctor. + NodeInfo(SDNode *N = NULL) +: Pending(0) +, Node(N) +, StageBegin(NULL) +, StageEnd(NULL) +, Latency(0) +, IsCall(false) +, Slot(0) +, Group(NULL) +#ifndef NDEBUG +, Preorder(0) +#endif + {} + + // Accessors + inline bool isInGroup() const { +assert(!Group || !Group-group_empty() Group with no members); +return Group != NULL; + } + inline bool isGroupDominator() const { +return isInGroup() Group-getDominator() == this; + } + inline int getPending() const { +return Group ? Group-getPending() : Pending; + } + inline void setPending(int P) { +if (Group) Group-setPending(P); +else Pending = P; + } + inline int addPending(int I) { +if (Group) return Group-addPending(I); +else return Pending += I; + } +}; + +//======// +/// +/// NodeGroupIterator - Iterates over all the nodes indicated by the node +/// info. If the node is in a group then iterate over the members of the +/// group, otherwise just the node info. +/// +class NodeGroupIterator { +private: + NodeInfo *NI; // Node info + NIIterator NGI; // Node group iterator + NIIterator NGE; // Node group
[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.5 - 1.6 --- Log message: don't copy all itinerary data --- Diffs of the changes: (+1 -1) ScheduleDAGSimple.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.5 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.6 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.5 Mon Jan 23 22:43:17 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Thu Mar 9 01:13:00 2006 @@ -292,7 +292,7 @@ /// void ScheduleDAGSimple::GatherSchedulingInfo() { // Get instruction itineraries for the target - const InstrItineraryData InstrItins = TM.getInstrItineraryData(); + const InstrItineraryData InstrItins = TM.getInstrItineraryData(); // For each node for (unsigned i = 0, N = NodeCount; i N; i++) { ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: ScheduleDAGSimple.cpp updated: 1.3 - 1.4 --- Log message: Minor clean up. --- Diffs of the changes: (+2 -1) ScheduleDAGSimple.cpp |3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.3 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.4 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp:1.3 Mon Jan 23 01:21:01 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSimple.cpp Mon Jan 23 02:25:34 2006 @@ -202,11 +202,12 @@ virtual ~ScheduleDAGSimple() {}; + void Schedule(); + private: static bool isDefiner(NodeInfo *A, NodeInfo *B); void IncludeNode(NodeInfo *NI); void VisitAll(); - void Schedule(); void GatherSchedulingInfo(); void FakeGroupDominators(); bool isStrongDependency(NodeInfo *A, NodeInfo *B); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits