[llvm-commits] Fwd: Speeding up instruction selection
Roman Levenstein
romix.llvm at googlemail.com
Wed Apr 23 10:38:54 PDT 2008
Oops. You mean a totally different patch, that happen to use std::set
as well ;-)
May be we should start using different subjects for different
"speeding up" patches?
This would make understanding of the conversation and following this
thread a bit easier ;-)
-Roman
2008/4/23 Roman Levenstein <romix.llvm at googlemail.com>:
> OK. I'll have a look at it.
>
> Looking at the error message, it seems to me that it happens with the
> USE_QUEUE version of the patch.
> What about the NO_QUEUE version? Does it also fail?
>
> Unfortunately, I cannot check it at the moment, because I don't have
> access to my development machine, but will do tomorrow.
>
> -Roman
>
> 2008/4/23 Evan Cheng <evan.cheng at apple.com>:
>
>
> > Hi Roman,
> >
> > Please do more testing on this patch. I am seeing failures:
> >
> > /Users/echeng/LLVM/llvm/Release/bin/llc -f Output/burg.llvm.bc -o
> > Output/burg.llc.s
> > Assertion failed: (RemovedNum == 1 && "Not in queue!"), function
> > remove, file ScheduleDAGRRList.cpp, line 1321.
> >
> > /Users/echeng/LLVM/llvm/Release/bin/llc -f Output/sqlite3.llvm.bc -o
> > Output/sqlite3.llc.s
> > Assertion failed: (RemovedNum == 1 && "Not in queue!"), function
> > remove, file ScheduleDAGRRList.cpp, line 1321.
> >
> > Thanks,
> >
> > Evan
> >
> >
> >
> > On Apr 21, 2008, at 12:44 PM, Evan Cheng wrote:
> >
> > >
> > > On Apr 21, 2008, at 11:54 AM, Roman Levenstein wrote:
> > >
> > >> Hi Evan,
> > >>
> > >> Good point. This code is here due to the historical reasons ;-) I
> > >> introduced it when I was experimenting with different alternatives
> > >> and
> > >> then forgot to remove it... The commit version will not contain it.
> > >>
> > >> Any further comments on this patch? Can I commit it or is it too
> > >> early?
> > >
> > > Please hold off committing for a few days until I have a chance to
> > > evaluate the performance impact. Thanks.
> > >
> > > Evan
> > >
> > >>
> > >>
> > >> - Roman
> > >>
> > >> 2008/4/21, Evan Cheng <evan.cheng at apple.com>:
> > >>
> > >>> + 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
> > >
> > > _______________________________________________
> > > llvm-commits mailing list
> > > llvm-commits at cs.uiuc.edu
> > > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> > _______________________________________________
> > 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