[llvm-commits] Speeding up instruction selection
Roman Levenstein
romix.llvm at googlemail.com
Wed Apr 23 23:18:21 PDT 2008
Hi Dan,
2008/4/24 Dan Gohman <gohman at apple.com>:
> Hi Roman,
>
> I have a few more comments for the ScheduleDAGRRList.cpp queue patch:
>
> > - virtual void updateNode(const SUnit *SU) {}
> > + virtual void updateNode(const SUnit *SU) {
> > + remove((SUnit *)SU);
> > + push((SUnit *)SU);
> > + }
>
> updateNode is overridden in both subclasses, so this code
> isn't ever executed. And, it doesn't need to be.
OK. Will do.
> > - // FIXME: No strict ordering.
> > - return false;
>
> > + if (left->NodeQueueId && right->NodeQueueId)
> > + return (left->NodeQueueId < right->NodeQueueId);
> > + return left->NodeNum < right->NodeNum;
>
> In addition to Evan's comment, please change the NodeQueueId
> comparison to use > instead of <. This is somewhat arbitrary, but in
> some ad-hoc testing it seemed to give better results. In particular,
> there are three regression tests which fail without this change due
> to inferior scheduling.
This is a very good point. I was not quite sure about the sign also ;-)
But does your comment mean that this change fixes some failures (e.g.
burg) that were reported by Evan?
Does it pass all the tests wih this change now? Or do I need yet to
investigate the problems that Evan reported?
-Roman
> On Apr 21, 2008, at 11:12 AM, Evan Cheng wrote:
>
> >
> >
> >
> > + if (left->NodeQueueId && right->NodeQueueId)
> > + return (left->NodeQueueId < right->NodeQueueId);
> > + return left->NodeNum < right->NodeNum;
> >
> > Why would NodeQueueId ever be zero? Nodes that are entered into the
> > queue must have this field set, no?
> >
> > Evan
> >
> > On Apr 18, 2008, at 4:31 AM, Roman Levenstein wrote:
> >
> >
> > > Hi Evan,
> > >
> > > 2008/4/2, Evan Cheng <evan.cheng at apple.com>:
> > >
> > > >
> > > > On Apr 2, 2008, at 1:57 AM, Roman Levenstein wrote:
> > > >
> > > >
> > > > > 2008/4/2, Evan Cheng <evan.cheng at apple.com>:
> > > > >
> > > > > >
> > > > > > On Apr 2, 2008, at 12:55 AM, Roman Levenstein wrote:
> > > > > >
> > > > > >
> > > > > > > Hi Evan,
> > > > > > >
> > > > > > > 2008/4/1, Evan Cheng <evan.cheng at apple.com>:
> > > > > > >
> > > > > > > > Please hold off checking it in for a bit. llvm tot is having
> some
> > > > > > > > problems and I'd like to get to the bottom of it first.
> > > > > > > >
> > > > > > >
> > > > > > > OK.
> > > > > > >
> > > > > > >
> > > > > > > > Also, the tie breaker is less than ideal. I think we need a
> tie-
> > > > > > > > breaker that is "the SUnit that's added to the queue is
> > > > > > > > preferred".
> > > > > > > > That means it prefers nodes which are closer to the end of
> block.
> > > > > > > > What
> > > > > > > > do you think?
> > > > > > > >
> > > > > > >
> > > > > > > Do you actually mean "the SUnit that's added to the queue LAST
> (or
> > > > > > > FIRST) is preferred"? I'll think about it.
> > > > > > >
> > > > > >
> > > > > >
> > > > > > Yep "first". Basically, if all else being equal, let the node
> > > > > > that's
> > > > > > ready first be scheduled first. We can add a order id to SUnit
> > > > > > which
> > > > > > gets set when it's pushed into the ready queue. What do you think?
> > > > > >
> > > > >
> > > > > Makes sense. The queue should have a global "current id" counter.
> > > > > Its
> > > > > current value is assigned to each node being inserted into the ready
> > > > > queue and then incremented. When the node is removed from the queue
> > > > > for any reason, its queue order id is reset. It should be rather
> > > > > easy
> > > > > to implement.
> > > > >
> > > >
> > >
> > >
> > > >
> > > > > BTW, do you really want this queue order id in the SUnit or in a
> > > > > separate array indexed by SUnit unique ids?
> > > > >
> > > >
> > > >
> > > > It should be in SUnit since the sort functions don't have access to
> > > > ScheduleDAG members.
> > > >
> > >
> > > Please find and review the attached patch implementing:
> > > - a proper tie-breaker as discussed above.
> > > - and unmodified part for replacing the slow std::priority_queue by
> > > std::set, as it I already did before.
> > >
> > > What do you think?
> > >
> > > -Roman
> > > <ScheduleDAGRRList.patch>
> > >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
>
>
More information about the llvm-commits
mailing list