[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-04-30 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller created this revision.
Herald added subscribers: dexonsmith, usaxena95, kadircet, arphaman, hiraditya.
Herald added a project: All.
stefanhaller requested review of this revision.
Herald added subscribers: cfe-commits, llvm-commits, ilya-biryukov.
Herald added projects: clang, LLVM, clang-tools-extra.

On Apple Silicon Macs, using a Darwin thread priority of PRIO_DARWIN_BG seems to
map directly to the QoS class Background. With this priority, the thread is
confined to efficiency cores only, which makes background indexing take forever.

Change this to use QoS class Utility instead; this makes the thread run on all
cores, but still lowers priority enough to keep the machine responsive, and not
interfere with user-initiated actions.

Also, rename ThreadPriority::Background to ThreadPriority::Low; this avoids
confusion with the QoS class Background, and allows to reintroduce
ThreadPriority::Background later, should there be a need for it.

We might consider changing the Windows and Linux implementations too (e.g. using
SCHED_BATCH instead of SCHED_IDLE on Linux). I didn't do that here because I
don't have access to these systems to test it on.

See also https://github.com/clangd/clangd/issues/1119.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D124715

Files:
  clang-tools-extra/clangd/index/Background.h
  clang/tools/libclang/CIndex.cpp
  llvm/include/llvm/Support/Threading.h
  llvm/lib/Support/Unix/Threading.inc
  llvm/lib/Support/Windows/Threading.inc

Index: llvm/lib/Support/Windows/Threading.inc
===
--- llvm/lib/Support/Windows/Threading.inc
+++ llvm/lib/Support/Windows/Threading.inc
@@ -121,7 +121,7 @@
   // priorities of the thread as they were before the thread entered background
   // processing mode.
   return SetThreadPriority(GetCurrentThread(),
-   Priority == ThreadPriority::Background
+   Priority == ThreadPriority::Low
? THREAD_MODE_BACKGROUND_BEGIN
: THREAD_MODE_BACKGROUND_END)
  ? SetThreadPriorityResult::SUCCESS
Index: llvm/lib/Support/Unix/Threading.inc
===
--- llvm/lib/Support/Unix/Threading.inc
+++ llvm/lib/Support/Unix/Threading.inc
@@ -18,6 +18,7 @@
 #if defined(__APPLE__)
 #include 
 #include 
+#include 
 #endif
 
 #include 
@@ -258,27 +259,20 @@
   // SCHED_OTHER   the standard round-robin time-sharing policy;
   return !pthread_setschedparam(
  pthread_self(),
- Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
+ Priority == ThreadPriority::Low ? SCHED_IDLE : SCHED_OTHER,
  &priority)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #elif defined(__APPLE__)
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
-  // When setting a thread into background state the scheduling priority is set
-  // to lowest value, disk and network IO are throttled. Network IO will be
-  // throttled for any sockets the thread opens after going into background
-  // state. Any previously opened sockets are not affected.
-
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
-  // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
-  // request occurs within a small time window (usually a fraction of a second)
-  // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
-  // forced to sleep for a certain interval. This slows down the thread that
-  // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
-  // I/O bandwidth.
-  return !setpriority(PRIO_DARWIN_THREAD, 0,
-  Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
- : 0)
+  // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
+  // Utility - Applies to work that takes anywhere from a few seconds to a few
+  // minutes to complete. Examples include downloading a document or importing
+  // data. This class offers a balance between responsiveness, performance, and
+  // energy efficiency.
+  return !pthread_set_qos_class_self_np(Priority == ThreadPriority::Low
+? QOS_CLASS_UTILITY
+: QOS_CLASS_DEFAULT,
+0)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #endif
Index: llvm/include/llvm/Support/Threading.h
===
--- llvm/include/llvm/Support/Threading.h
+++ llvm/include/llvm/Support

[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-04-30 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller updated this revision to Diff 426233.
stefanhaller added a comment.

Fix documentation of ThreadPriority::Low (was: Background), and move it up from
set_thread_priority to ThreadPriority.

(Is it ok that there's no documentation left for set_thread_priority? I couldn't
come up with anything that's not trivial and redundant, e.g. "Sets the priority
of the current thread.")


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

Files:
  clang-tools-extra/clangd/index/Background.h
  clang/tools/libclang/CIndex.cpp
  llvm/include/llvm/Support/Threading.h
  llvm/lib/Support/Unix/Threading.inc
  llvm/lib/Support/Windows/Threading.inc

Index: llvm/lib/Support/Windows/Threading.inc
===
--- llvm/lib/Support/Windows/Threading.inc
+++ llvm/lib/Support/Windows/Threading.inc
@@ -121,7 +121,7 @@
   // priorities of the thread as they were before the thread entered background
   // processing mode.
   return SetThreadPriority(GetCurrentThread(),
-   Priority == ThreadPriority::Background
+   Priority == ThreadPriority::Low
? THREAD_MODE_BACKGROUND_BEGIN
: THREAD_MODE_BACKGROUND_END)
  ? SetThreadPriorityResult::SUCCESS
Index: llvm/lib/Support/Unix/Threading.inc
===
--- llvm/lib/Support/Unix/Threading.inc
+++ llvm/lib/Support/Unix/Threading.inc
@@ -18,6 +18,7 @@
 #if defined(__APPLE__)
 #include 
 #include 
+#include 
 #endif
 
 #include 
@@ -258,27 +259,20 @@
   // SCHED_OTHER   the standard round-robin time-sharing policy;
   return !pthread_setschedparam(
  pthread_self(),
- Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
+ Priority == ThreadPriority::Low ? SCHED_IDLE : SCHED_OTHER,
  &priority)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #elif defined(__APPLE__)
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
-  // When setting a thread into background state the scheduling priority is set
-  // to lowest value, disk and network IO are throttled. Network IO will be
-  // throttled for any sockets the thread opens after going into background
-  // state. Any previously opened sockets are not affected.
-
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
-  // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
-  // request occurs within a small time window (usually a fraction of a second)
-  // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
-  // forced to sleep for a certain interval. This slows down the thread that
-  // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
-  // I/O bandwidth.
-  return !setpriority(PRIO_DARWIN_THREAD, 0,
-  Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
- : 0)
+  // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
+  // Utility - Applies to work that takes anywhere from a few seconds to a few
+  // minutes to complete. Examples include downloading a document or importing
+  // data. This class offers a balance between responsiveness, performance, and
+  // energy efficiency.
+  return !pthread_set_qos_class_self_np(Priority == ThreadPriority::Low
+? QOS_CLASS_UTILITY
+: QOS_CLASS_DEFAULT,
+0)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #endif
Index: llvm/include/llvm/Support/Threading.h
===
--- llvm/include/llvm/Support/Threading.h
+++ llvm/include/llvm/Support/Threading.h
@@ -233,15 +233,15 @@
   unsigned get_cpus();
 
   enum class ThreadPriority {
-Background = 0,
+/// Try to lower current thread's priority such that it does not affect 
+/// foreground tasks significantly. Can be used for long-running, 
+/// latency-insensitive tasks to make sure cpu is not hogged by this task.
+Low = 0,
+
+/// Try to restore current thread's priority to default scheduling 
+/// priority.
 Default = 1,
   };
-  /// If priority is Background tries to lower current threads priority such
-  /// that it does not affect foreground tasks significantly. Can be used for
-  /// long-running, latency-insensitive tasks to make sure cpu is not hogged by
-  /// this task.
-  /// If the priority is default tries to

[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-05-04 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller added a comment.

In D124715#3488447 , @sammccall wrote:

> (How) does this interact with battery vs mains power on laptops?
> It seems like there's a common scenario where:
>
> - the user is on a relatively slow laptop, running off battery
> - the codebase is large, and indexing is unlikely to finish within an editing 
> session
>
> In this case, it seems like only using efficiency cores is what you'd want, 
> and that people are likely to be upset if clangd 15 keeps their performance 
> cores running at all times.

I can only speak for myself here: I'm a laptop user myself, and I work on 
battery the majority of the day; but I still wouldn't trade indexing speed for 
saving battery. The clangd index is so essential for my work that I always want 
it to be available as quickly as possible.

> Reading the docs 
> 
>  it seems like background is the intended QoS for this type of work ("such as 
> indexing"..."minutes or hours").

How long it takes is only one aspect of it. Other clues from the documentation:

Utility: "typically have a progress bar that is visible to the user. Focuses on 
providing a balance between responsiveness, performance, and energy efficiency."
Background: "isn't visible to the user. Focuses on energy efficiency."

The way I read it, Background is intended for tasks that don't make a 
significant difference to the functionality of the software. An example might 
be face detection in the Photos app; as long as it is not finished, it only 
affects a small part of the functionality, the rest of the app is perfectly 
usable. That's not the case for clangd, the software is pretty much not usable 
without an index.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-05-04 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller added a comment.

In D124715#3491782 , @akyrtzi wrote:

> That said, you may want to consider dynamically switching to background if 
> running on laptop with battery, or other heuristics,

My take on this is that it would be Apple's responsibility to add a QoS class 
that has this behavior. I don't think it makes sense for every application to 
implement this logic client-side.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-05-05 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller added a comment.

In D124715#3491985 , @sammccall wrote:

> I'm still concerned some users will find this a large regression and we won't 
> have a good workaround:
>
> - it'll use a lot more battery than before

On Intel Macs, I'm not sure that's true. While it does saturate the CPUs 
noticeably more with Utility than it does with Background, it will also be 
finished much quicker, so I guess the total power consumption will probably be 
roughly the same.

On M1  Macs, it's true that it will use a lot more 
battery. However, M1  Macs are also much more 
energy efficient in general, so it doesn't matter nearly as much. I don't think 
it will be perceived as a regression there.

(On the contrary, people who switch from Intel to M1 
 Macs perceive it as a regression that indexing is 
so slow, even though the machine should be so much faster. I have plenty of 
colleagues who are in that situation, and have heard this complaint several 
times.)

> What do you think about keeping `Background` in the enum along with `Low`, 
> and switching clangd to `Low`?

Personally I don't feel this is necessary, but I can of course change the patch 
if there's agreement that that's what we should do.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-05-06 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller updated this revision to Diff 427567.
stefanhaller added a comment.

Updated the patch to have both Background and Low

As discussed, we provide both Background and Low now, with Low being the
default; Linux and Windows still implement both the same (as Background), this
could be changed as a followup, as I didn't feel comfortable touching these.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

Files:
  clang-tools-extra/clangd/index/Background.h
  clang/tools/libclang/CIndex.cpp
  llvm/include/llvm/Support/Threading.h
  llvm/lib/Support/Unix/Threading.inc
  llvm/lib/Support/Windows/Threading.inc

Index: llvm/lib/Support/Windows/Threading.inc
===
--- llvm/lib/Support/Windows/Threading.inc
+++ llvm/lib/Support/Windows/Threading.inc
@@ -121,7 +121,7 @@
   // priorities of the thread as they were before the thread entered background
   // processing mode.
   return SetThreadPriority(GetCurrentThread(),
-   Priority == ThreadPriority::Background
+   Priority != ThreadPriority::Default
? THREAD_MODE_BACKGROUND_BEGIN
: THREAD_MODE_BACKGROUND_END)
  ? SetThreadPriorityResult::SUCCESS
Index: llvm/lib/Support/Unix/Threading.inc
===
--- llvm/lib/Support/Unix/Threading.inc
+++ llvm/lib/Support/Unix/Threading.inc
@@ -18,6 +18,7 @@
 #if defined(__APPLE__)
 #include 
 #include 
+#include 
 #endif
 
 #include 
@@ -258,27 +259,28 @@
   // SCHED_OTHER   the standard round-robin time-sharing policy;
   return !pthread_setschedparam(
  pthread_self(),
- Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
+ Priority == ThreadPriority::Default ? SCHED_OTHER : SCHED_IDLE,
  &priority)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #elif defined(__APPLE__)
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
-  // When setting a thread into background state the scheduling priority is set
-  // to lowest value, disk and network IO are throttled. Network IO will be
-  // throttled for any sockets the thread opens after going into background
-  // state. Any previously opened sockets are not affected.
-
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
-  // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
-  // request occurs within a small time window (usually a fraction of a second)
-  // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
-  // forced to sleep for a certain interval. This slows down the thread that
-  // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
-  // I/O bandwidth.
-  return !setpriority(PRIO_DARWIN_THREAD, 0,
-  Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
- : 0)
+  // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
+  //
+  // Background - Applies to work that isn’t visible to the user and may take significant
+  // time to complete. Examples include indexing, backing up, or synchronizing data. This
+  // class emphasizes energy efficiency.
+  //
+  // Utility - Applies to work that takes anywhere from a few seconds to a few minutes to
+  // complete. Examples include downloading a document or importing data. This class
+  // offers a balance between responsiveness, performance, and energy efficiency.
+  const auto qosClass = [&](){
+switch (Priority) {
+  case ThreadPriority::Background: return QOS_CLASS_BACKGROUND;
+  case ThreadPriority::Low: return QOS_CLASS_UTILITY;
+  case ThreadPriority::Default: return QOS_CLASS_DEFAULT;
+}
+  }();
+  return !pthread_set_qos_class_self_np(qosClass, 0)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #endif
Index: llvm/include/llvm/Support/Threading.h
===
--- llvm/include/llvm/Support/Threading.h
+++ llvm/include/llvm/Support/Threading.h
@@ -233,15 +233,20 @@
   unsigned get_cpus();
 
   enum class ThreadPriority {
+/// Try to lower current thread's priority as much as possible. Can be used
+/// for long-running tasks that are not time critical; more energy-efficient
+/// than Low.
 Background = 0,
-Default = 1,
+
+/// Try to lower current thread's priority such that it does not affect
+/// foreground tasks significantly. This is a good default for long-running,
+/// latency

[PATCH] D124715: Use QoS class Utility for ThreadPriority::Low on Mac

2022-05-06 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller updated this revision to Diff 427577.
stefanhaller added a comment.

- Added a comment to setThreadBackgroundPriority
- Improved comments for ThreadPriority enum
- Add FIXME comments for Windows and Linux


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

Files:
  clang-tools-extra/clangd/index/Background.h
  clang/tools/libclang/CIndex.cpp
  llvm/include/llvm/Support/Threading.h
  llvm/lib/Support/Unix/Threading.inc
  llvm/lib/Support/Windows/Threading.inc

Index: llvm/lib/Support/Windows/Threading.inc
===
--- llvm/lib/Support/Windows/Threading.inc
+++ llvm/lib/Support/Windows/Threading.inc
@@ -120,8 +120,10 @@
   // End background processing mode. The system restores the resource scheduling
   // priorities of the thread as they were before the thread entered background
   // processing mode.
+  //
+  // FIXME: consider THREAD_PRIORITY_BELOW_NORMAL for Low
   return SetThreadPriority(GetCurrentThread(),
-   Priority == ThreadPriority::Background
+   Priority != ThreadPriority::Default
? THREAD_MODE_BACKGROUND_BEGIN
: THREAD_MODE_BACKGROUND_END)
  ? SetThreadPriorityResult::SUCCESS
Index: llvm/lib/Support/Unix/Threading.inc
===
--- llvm/lib/Support/Unix/Threading.inc
+++ llvm/lib/Support/Unix/Threading.inc
@@ -18,6 +18,7 @@
 #if defined(__APPLE__)
 #include 
 #include 
+#include 
 #endif
 
 #include 
@@ -258,27 +259,29 @@
   // SCHED_OTHER   the standard round-robin time-sharing policy;
   return !pthread_setschedparam(
  pthread_self(),
- Priority == ThreadPriority::Background ? SCHED_IDLE : SCHED_OTHER,
+ // FIXME: consider SCHED_BATCH for Low
+ Priority == ThreadPriority::Default ? SCHED_OTHER : SCHED_IDLE,
  &priority)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #elif defined(__APPLE__)
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getpriority.2.html
-  // When setting a thread into background state the scheduling priority is set
-  // to lowest value, disk and network IO are throttled. Network IO will be
-  // throttled for any sockets the thread opens after going into background
-  // state. Any previously opened sockets are not affected.
-
-  // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/getiopolicy_np.3.html
-  // I/Os with THROTTLE policy are called THROTTLE I/Os. If a THROTTLE I/O
-  // request occurs within a small time window (usually a fraction of a second)
-  // of another NORMAL I/O request, the thread that issues the THROTTLE I/O is
-  // forced to sleep for a certain interval. This slows down the thread that
-  // issues the THROTTLE I/O so that NORMAL I/Os can utilize most of the disk
-  // I/O bandwidth.
-  return !setpriority(PRIO_DARWIN_THREAD, 0,
-  Priority == ThreadPriority::Background ? PRIO_DARWIN_BG
- : 0)
+  // https://developer.apple.com/documentation/apple-silicon/tuning-your-code-s-performance-for-apple-silicon
+  //
+  // Background - Applies to work that isn’t visible to the user and may take significant
+  // time to complete. Examples include indexing, backing up, or synchronizing data. This
+  // class emphasizes energy efficiency.
+  //
+  // Utility - Applies to work that takes anywhere from a few seconds to a few minutes to
+  // complete. Examples include downloading a document or importing data. This class
+  // offers a balance between responsiveness, performance, and energy efficiency.
+  const auto qosClass = [&](){
+switch (Priority) {
+  case ThreadPriority::Background: return QOS_CLASS_BACKGROUND;
+  case ThreadPriority::Low: return QOS_CLASS_UTILITY;
+  case ThreadPriority::Default: return QOS_CLASS_DEFAULT;
+}
+  }();
+  return !pthread_set_qos_class_self_np(qosClass, 0)
  ? SetThreadPriorityResult::SUCCESS
  : SetThreadPriorityResult::FAILURE;
 #endif
Index: llvm/include/llvm/Support/Threading.h
===
--- llvm/include/llvm/Support/Threading.h
+++ llvm/include/llvm/Support/Threading.h
@@ -233,15 +233,20 @@
   unsigned get_cpus();
 
   enum class ThreadPriority {
+/// Lower the current thread's priority as much as possible. Can be used
+/// for long-running tasks that are not time critical; more energy-
+/// efficient than Low.
 Background = 0,
-Default = 1,
+
+/// Lower the current thread's priority such that it does not affect
+/// foreground tasks significantly. This 

[PATCH] D124715: Add ThreadPriority::Low, and use QoS class Utility on Mac

2022-05-07 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller added a comment.

@sammccall I addressed your last change requests with a revised patch, do you 
want to have a final look?

Also, I don't have commit rights, could somebody please land this for me once 
everybody is happy with it?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124715: Add ThreadPriority::Low, and use QoS class Utility on Mac

2022-05-13 Thread Stefan Haller via Phabricator via cfe-commits
stefanhaller added a comment.

In D124715#3498846 , @sammccall wrote:

> Looks great! I'm happy to land it, will do so on Tuesday unless anyone has 
> further comments.

@sammccall Just a friendly ping, in case you forgot. 😄


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124715/new/

https://reviews.llvm.org/D124715

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits