[Git][ghc/ghc][wip/drop-inlines] rts: Don't hint inlining of appendToRunQueue
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Tue Oct 11 18:13:09 UTC 2022
Ben Gamari pushed to branch wip/drop-inlines at Glasgow Haskell Compiler / GHC
Commits:
3bc1e289 by Ben Gamari at 2022-10-11T14:13:02-04:00
rts: Don't hint inlining of appendToRunQueue
These hints have resulted in compile-time warnings due to failed
inlinings for quite some time. Moreover, it's quite unlikely that
inlining them is all that beneficial given that they are rather sizeable
functions.
Resolves #22280.
- - - - -
2 changed files:
- rts/Schedule.c
- rts/Schedule.h
Changes:
=====================================
rts/Schedule.c
=====================================
@@ -2915,6 +2915,61 @@ deleteThread_(StgTSO *tso)
}
#endif
+/*
+ * Run queue manipulation
+ */
+
+void
+appendToRunQueue (Capability *cap, StgTSO *tso)
+{
+ ASSERT(tso->_link == END_TSO_QUEUE);
+ if (cap->run_queue_hd == END_TSO_QUEUE) {
+ cap->run_queue_hd = tso;
+ tso->block_info.prev = END_TSO_QUEUE;
+ } else {
+ setTSOLink(cap, cap->run_queue_tl, tso);
+ setTSOPrev(cap, tso, cap->run_queue_tl);
+ }
+ cap->run_queue_tl = tso;
+ cap->n_run_queue++;
+}
+
+void
+pushOnRunQueue (Capability *cap, StgTSO *tso)
+{
+ setTSOLink(cap, tso, cap->run_queue_hd);
+ tso->block_info.prev = END_TSO_QUEUE;
+ if (cap->run_queue_hd != END_TSO_QUEUE) {
+ setTSOPrev(cap, cap->run_queue_hd, tso);
+ }
+ cap->run_queue_hd = tso;
+ if (cap->run_queue_tl == END_TSO_QUEUE) {
+ cap->run_queue_tl = tso;
+ }
+ cap->n_run_queue++;
+}
+
+StgTSO *popRunQueue (Capability *cap)
+{
+ ASSERT(cap->n_run_queue > 0);
+ StgTSO *t = cap->run_queue_hd;
+ ASSERT(t != END_TSO_QUEUE);
+ cap->run_queue_hd = t->_link;
+
+ StgTSO *link = RELAXED_LOAD(&t->_link);
+ if (link != END_TSO_QUEUE) {
+ link->block_info.prev = END_TSO_QUEUE;
+ }
+ RELAXED_STORE(&t->_link, END_TSO_QUEUE); // no write barrier req'd
+
+ if (cap->run_queue_hd == END_TSO_QUEUE) {
+ cap->run_queue_tl = END_TSO_QUEUE;
+ }
+ cap->n_run_queue--;
+ return t;
+}
+
+
/* -----------------------------------------------------------------------------
raiseExceptionHelper
=====================================
rts/Schedule.h
=====================================
@@ -136,67 +136,16 @@ void resurrectThreads (StgTSO *);
* NOTE: tso->link should be END_TSO_QUEUE before calling this macro.
* ASSUMES: cap->running_task is the current task.
*/
-EXTERN_INLINE void
-appendToRunQueue (Capability *cap, StgTSO *tso);
-
-EXTERN_INLINE void
-appendToRunQueue (Capability *cap, StgTSO *tso)
-{
- ASSERT(tso->_link == END_TSO_QUEUE);
- if (cap->run_queue_hd == END_TSO_QUEUE) {
- cap->run_queue_hd = tso;
- tso->block_info.prev = END_TSO_QUEUE;
- } else {
- setTSOLink(cap, cap->run_queue_tl, tso);
- setTSOPrev(cap, tso, cap->run_queue_tl);
- }
- cap->run_queue_tl = tso;
- cap->n_run_queue++;
-}
+void appendToRunQueue (Capability *cap, StgTSO *tso);
/* Push a thread on the beginning of the run queue.
* ASSUMES: cap->running_task is the current task.
*/
-EXTERN_INLINE void
-pushOnRunQueue (Capability *cap, StgTSO *tso);
-
-EXTERN_INLINE void
-pushOnRunQueue (Capability *cap, StgTSO *tso)
-{
- setTSOLink(cap, tso, cap->run_queue_hd);
- tso->block_info.prev = END_TSO_QUEUE;
- if (cap->run_queue_hd != END_TSO_QUEUE) {
- setTSOPrev(cap, cap->run_queue_hd, tso);
- }
- cap->run_queue_hd = tso;
- if (cap->run_queue_tl == END_TSO_QUEUE) {
- cap->run_queue_tl = tso;
- }
- cap->n_run_queue++;
-}
+void pushOnRunQueue (Capability *cap, StgTSO *tso);
/* Pop the first thread off the runnable queue.
*/
-INLINE_HEADER StgTSO *
-popRunQueue (Capability *cap)
-{
- ASSERT(cap->n_run_queue > 0);
- StgTSO *t = cap->run_queue_hd;
- ASSERT(t != END_TSO_QUEUE);
- cap->run_queue_hd = t->_link;
-
- StgTSO *link = RELAXED_LOAD(&t->_link);
- if (link != END_TSO_QUEUE) {
- link->block_info.prev = END_TSO_QUEUE;
- }
- RELAXED_STORE(&t->_link, END_TSO_QUEUE); // no write barrier req'd
-
- if (cap->run_queue_hd == END_TSO_QUEUE) {
- cap->run_queue_tl = END_TSO_QUEUE;
- }
- cap->n_run_queue--;
- return t;
-}
+StgTSO *popRunQueue (Capability *cap);
INLINE_HEADER StgTSO *
peekRunQueue (Capability *cap)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3bc1e289bb15f272bdcdc131b06a90dc0dde83cf
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3bc1e289bb15f272bdcdc131b06a90dc0dde83cf
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221011/e045a568/attachment-0001.html>
More information about the ghc-commits
mailing list