[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
https://github.com/lucas-rami updated
https://github.com/llvm/llvm-project/pull/196099
>From b5abaa6a97827f041d493cf33b0ef4e0dbfc52f9 Mon Sep 17 00:00:00 2001
From: Lucas Ramirez
Date: Wed, 6 May 2026 15:31:12 +
Subject: [PATCH 1/2] [AMDGPU] Fix inconsistencies in RP tracking
`advance`/`reset` behavior
Some of the variants of `advance` and `reset` in the `GCNRPTracker` and
`GCNDownwardRPTracker` had unclear/inconsistent semantics on their
return value. This aims to clarify that through improved documentation
and light functional changes.
These inconsistencies ultimately triggered an assert in
`GCNRPTaget::saveRP` on a complex kernel during scheduling.
`GCNScheduleDAGMILive::getRealRegPressure` would incorrectly return a
null pressure for a non-empty region which only had debug values. Such
regions can arise if the `PreRARematStage` rematerializes all non-debug
instructions out of their original region, leaving only debug values.
Attempting to rematerialize registers across that same region afterwards
would trigger the assert.
---
llvm/lib/Target/AMDGPU/GCNRegPressure.cpp | 10 +++--
llvm/lib/Target/AMDGPU/GCNRegPressure.h | 28 ++---
llvm/lib/Target/AMDGPU/GCNSchedStrategy.cpp | 12 --
.../Target/AMDGPU/GCNRegPressureTest.cpp | 41 ++-
4 files changed, 49 insertions(+), 42 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp
b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp
index 683e658aa4fb4..9b8e63a39fab8 100644
--- a/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.cpp
@@ -621,13 +621,14 @@ void GCNUpwardRPTracker::recede(const MachineInstr &MI) {
// GCNDownwardRPTracker
bool GCNDownwardRPTracker::reset(const MachineInstr &MI,
- const LiveRegSet *LiveRegsCopy) {
+ MachineBasicBlock::const_iterator End,
+ const LiveRegSet *LiveRegsCopy) {
MRI = &MI.getMF()->getRegInfo();
LastTrackedMI = nullptr;
MBBEnd = MI.getParent()->end();
NextMI = &MI;
- NextMI = skipDebugInstructionsForward(NextMI, MBBEnd);
- if (NextMI == MBBEnd)
+ NextMI = skipDebugInstructionsForward(NextMI, End);
+ if (NextMI == End)
return false;
GCNRPTracker::reset(*NextMI, LiveRegsCopy, false);
return true;
@@ -746,7 +747,8 @@ bool
GCNDownwardRPTracker::advance(MachineBasicBlock::const_iterator End) {
bool GCNDownwardRPTracker::advance(MachineBasicBlock::const_iterator Begin,
MachineBasicBlock::const_iterator End,
const LiveRegSet *LiveRegsCopy) {
- reset(*Begin, LiveRegsCopy);
+ if (!reset(*Begin, End, LiveRegsCopy))
+return false;
return advance(End);
}
diff --git a/llvm/lib/Target/AMDGPU/GCNRegPressure.h
b/llvm/lib/Target/AMDGPU/GCNRegPressure.h
index 00cb617a55fa7..97d2f5ad59278 100644
--- a/llvm/lib/Target/AMDGPU/GCNRegPressure.h
+++ b/llvm/lib/Target/AMDGPU/GCNRegPressure.h
@@ -428,10 +428,20 @@ class GCNDownwardRPTracker : public GCNRPTracker {
return Res;
}
- /// Reset tracker to the point before the \p MI
- /// filling \p LiveRegs upon this point using LIS.
- /// \p returns false if block is empty except debug values.
- bool reset(const MachineInstr &MI, const LiveRegSet *LiveRegs = nullptr);
+ /// Reset tracker to the point before the \p MI filling \p LiveRegs upon this
+ /// point using LIS. \p End must be between the MI and the end of its parent
+ /// block (inclusive). \p returns false if the range [MI, End) is empty
except
+ /// debug values, in which case the current/maximum pressure are not changed.
+ bool reset(const MachineInstr &MI, MachineBasicBlock::const_iterator End,
+ const LiveRegSet *LiveRegs = nullptr);
+
+ /// Reset tracker to the point before the \p MI filling \p LiveRegs upon this
+ /// point using LIS. \p returns false if there are only debug values between
+ /// \p MI (inclusive) and end of its parent block, in which case the
+ /// current/maximum pressure are not changed.
+ bool reset(const MachineInstr &MI, const LiveRegSet *LiveRegs = nullptr) {
+return reset(MI, MI.getParent()->end(), LiveRegs);
+ }
/// Move to the state right before the next MI or after the end of MBB.
/// \p returns false if reached end of the block.
@@ -462,10 +472,16 @@ class GCNDownwardRPTracker : public GCNRPTracker {
/// \p MI and use LIS for RP calculations.
bool advance(MachineInstr *MI = nullptr, bool UseInternalIterator = true);
- /// Advance instructions until before \p End.
+ /// Advance instructions until before \p End using internal iterators to
+ /// process instructions in program order. Returns whether iterators actually
+ /// had to advance to reach \p End.
bool advance(MachineBasicBlock::const_iterator End);
- /// Reset to \p Begin and advance to \p End.
+ /// Reset tracker to \p Begin (filling \p LiveReg
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
https://github.com/lucas-rami closed https://github.com/llvm/llvm-project/pull/196099 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
lucas-rami wrote: I have no idea why but this got closed automatically when I landed #196098 (the previous PR in the stack). https://github.com/llvm/llvm-project/pull/196099 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -1029,8 +1029,13 @@ GCNScheduleDAGMILive::getRealRegPressure(unsigned
RegionIdx) const {
if (Regions[RegionIdx].first == Regions[RegionIdx].second)
return llvm::getRegPressure(MRI, LiveIns[RegionIdx]);
GCNDownwardRPTracker RPTracker(*LIS);
- RPTracker.advance(Regions[RegionIdx].first, Regions[RegionIdx].second,
-&LiveIns[RegionIdx]);
+ if (!RPTracker.advance(Regions[RegionIdx].first, Regions[RegionIdx].second,
+ &LiveIns[RegionIdx])) {
+// Advance can produce false on a non-empty region if all MIs in the region
+// are debug values; in such cases the maintained max pressure is invalid
+// and the only source of pressure are the region's live-ins.
lucas-rami wrote:
It's possible for the RP tracker to compute the correct pressure when a
`LiveRegSet` is provided to advance/reset, since it can just call
`llvm::getRegPressure`. When a `LiveRegSet` is not provided however, the
tracker must look for a `SlotIndex` at which to estimate pressure. When there
are no non-debug MIs in the block, I don't see a way to derive such an index
and therefore to compute the correct pressure. It felt weird to me to have this
dependency on `LiveRegSet` to be able to compute the correct pressure in such
cases.
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -2025,8 +2030,7 @@ GCNSchedStage::getScheduleMetrics(const
std::vector &InputSchedule) {
#ifndef NDEBUG
LLVM_DEBUG(
printScheduleModel(ReadyCyclesSorted);
- dbgs() << "\n\t"
- << "Metric: "
+ dbgs() << "\n\t" << "Metric: "
lucas-rami wrote:
Thanks for the catch, yes this is a spurious whole file clang-format :)
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -119,25 +119,15 @@ body: | // which would return false in this case. // // There aren't any non-debug instruction between the beginning of bb1 and -// Dbg1 (exclusive). However, the call to reset takes the end of the MBB as -// the limit, so it pushes the beginning of the block up to %2's def and -// considers the reset successful. -EXPECT_TRUE(RPTracker.reset(*MBB1.begin(), &MBB1LiveIns)); -EXPECT_TRUE(RPTrackerNoLiveIns.reset(*MBB1.begin(), nullptr)); -// advance then unnecessarily processes instructions in order until the end -// of the block, even though it is already past Dbg1. It still returns false -// because it is stopped by the end of block delimiter, not the end -// iterator. -EXPECT_FALSE(RPTracker.advance(Dbg1)); rovka wrote: I think you should still test advance (just change the comment). https://github.com/llvm/llvm-project/pull/196099 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -1029,8 +1029,13 @@ GCNScheduleDAGMILive::getRealRegPressure(unsigned
RegionIdx) const {
if (Regions[RegionIdx].first == Regions[RegionIdx].second)
return llvm::getRegPressure(MRI, LiveIns[RegionIdx]);
GCNDownwardRPTracker RPTracker(*LIS);
- RPTracker.advance(Regions[RegionIdx].first, Regions[RegionIdx].second,
-&LiveIns[RegionIdx]);
+ if (!RPTracker.advance(Regions[RegionIdx].first, Regions[RegionIdx].second,
+ &LiveIns[RegionIdx])) {
+// Advance can produce false on a non-empty region if all MIs in the region
+// are debug values; in such cases the maintained max pressure is invalid
+// and the only source of pressure are the region's live-ins.
rovka wrote:
Could we maybe teach it to return the correct pressure instead? Or would that
be too complicated?
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -2025,8 +2030,7 @@ GCNSchedStage::getScheduleMetrics(const
std::vector &InputSchedule) {
#ifndef NDEBUG
LLVM_DEBUG(
printScheduleModel(ReadyCyclesSorted);
- dbgs() << "\n\t"
- << "Metric: "
+ dbgs() << "\n\t" << "Metric: "
rovka wrote:
```suggestion
dbgs() << "\n\tMetric: "
```
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
@@ -2025,8 +2030,7 @@ GCNSchedStage::getScheduleMetrics(const
std::vector &InputSchedule) {
#ifndef NDEBUG
LLVM_DEBUG(
printScheduleModel(ReadyCyclesSorted);
- dbgs() << "\n\t"
- << "Metric: "
+ dbgs() << "\n\t" << "Metric: "
rovka wrote:
(Or just remove this change completely, since it's unrelated)
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
github-actions[bot] wrote:
# :penguin: Linux x64 Test Results
* 100695 tests passed
* 2217 tests skipped
All executed tests passed, but another part of the build **failed**. Click on a
failure below to see the details.
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.o
```
FAILED: unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.o
sccache /opt/llvm/bin/clang++ -DLLVM_BUILD_STATIC -D_DEBUG
-D_GLIBCXX_ASSERTIONS -D_GLIBCXX_USE_CXX11_ABI=1 -D_GNU_SOURCE
-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/unittests/Target/AMDGPU
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/include
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/include
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/lib/Target/AMDGPU
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/build/lib/Target/AMDGPU
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/third-party/unittest/googletest/include
-I/home/gha/actions-runner/_work/llvm-project/llvm-project/third-party/unittest/googlemock/include
-gmlt -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror
-Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra
-Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers
-pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough
-Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor
-Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion
-Wno-pass-failed -Wmisleading-indentation -Wctad-maybe-unsupported
-fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -std=c++17
-UNDEBUG -Wno-variadic-macros -Wno-gnu-zero-variadic-macro-arguments
-fno-exceptions -funwind-tables -fno-rtti -Wno-suggest-override -MD -MT
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.o -MF
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.o.d -o
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.o -c
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp
In file included from
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp:9:
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:22:33:
error: no type named 'once_flag' in namespace 'std'; did you mean
'__once_flag'?
22 | void initializeAMDGPUTargetOnce(std::once_flag &Flag);
| ^~
| __once_flag
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:111:3: note:
'__once_flag' declared here
111 | } __once_flag;
| ^
In file included from
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp:9:
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:27:17:
error: use of undeclared identifier 'Module'
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^~
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:27:34:
error: unknown type name 'LLVMContext'
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:27:62:
error: unknown type name 'TargetMachine'; did you mean 'GCNTargetMachine'?
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^
| GCNTargetMachine
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:17:7:
note: 'GCNTargetMachine' declared here
17 | class GCNTargetMachine;
| ^
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.h:28:53:
error: unknown type name 'MachineModuleInfo'
28 | StringRef MIRCode, MachineModuleInfo
&MMI);
| ^
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp:30:12:
error: out-of-line definition of 'initializeAMDGPUTargetOnce' does not match
any declaration in namespace 'llvm'
30 | void llvm::initializeAMDGPUTargetOnce(std::once_flag& Flag) {
|^~
/home/gha/actions-runner/_work/llvm-project/llvm-project/llvm/unittests/Target/AMDGPU/AMDGPUU
[llvm-branch-commits] [llvm] [AMDGPU] Fix inconsistencies in RP tracking `advance`/`reset` behavior (PR #196099)
github-actions[bot] wrote:
# :window: Windows x64 Test Results
* 61771 tests passed
* 1666 tests skipped
All executed tests passed, but another part of the build **failed**. Click on a
failure below to see the details.
[code=1]
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.obj
```
FAILED: [code=1]
unittests/Target/AMDGPU/CMakeFiles/AMDGPUTests.dir/AMDGPUUnitTests.cpp.obj
sccache C:\clang\clang-msvc\bin\clang-cl.exe /nologo -TP -DLLVM_BUILD_STATIC
-DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
-D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_GLIBCXX_ASSERTIONS
-D_HAS_EXCEPTIONS=0 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE
-D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-IC:\_work\llvm-project\llvm-project\build\unittests\Target\AMDGPU
-IC:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU
-IC:\_work\llvm-project\llvm-project\build\include
-IC:\_work\llvm-project\llvm-project\llvm\include
-IC:\_work\llvm-project\llvm-project\llvm\lib\Target\AMDGPU
-IC:\_work\llvm-project\llvm-project\build\lib\Target\AMDGPU
-IC:\_work\llvm-project\llvm-project\third-party\unittest\googletest\include
-IC:\_work\llvm-project\llvm-project\third-party\unittest\googlemock\include
/DWIN32 /D_WINDOWS /Zc:inline /Zc:__cplusplus /Oi /Brepro /bigobj
/permissive- -Werror=unguarded-availability-new /W4 -Wextra
-Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers
-Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type
-Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override
-Wstring-conversion -Wno-pass-failed -Wmisleading-indentation
-Wctad-maybe-unsupported /Gw /O2 /Ob2 -std:c++17 -MD -UNDEBUG
-Wno-gnu-zero-variadic-macro-arguments /EHs-c- /GR- -Wno-suggest-override
/showIncludes
/Founittests\Target\AMDGPU\CMakeFiles\AMDGPUTests.dir\AMDGPUUnitTests.cpp.obj
/Fdunittests\Target\AMDGPU\CMakeFiles\AMDGPUTests.dir\ -c --
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.cpp
In file included from
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.cpp:9:
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(22,38):
error: no type named 'once_flag' in namespace 'std'
22 | void initializeAMDGPUTargetOnce(std::once_flag &Flag);
| ~^
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(27,17):
error: use of undeclared identifier 'Module'
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^~
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(27,34):
error: unknown type name 'LLVMContext'
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(27,62):
error: unknown type name 'TargetMachine'; did you mean 'GCNTargetMachine'?
27 | std::unique_ptr parseMIR(LLVMContext &Context, const TargetMachine
&TM,
| ^
| GCNTargetMachine
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(17,7):
note: 'GCNTargetMachine' declared here
17 | class GCNTargetMachine;
| ^
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.h(28,53):
error: unknown type name 'MachineModuleInfo'
28 | StringRef MIRCode, MachineModuleInfo
&MMI);
| ^
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.cpp(30,12):
error: out-of-line definition of 'initializeAMDGPUTargetOnce' does not match
any declaration in namespace 'llvm'
30 | void llvm::initializeAMDGPUTargetOnce(std::once_flag& Flag) {
|^~
C:\_work\llvm-project\llvm-project\llvm\unittests\Target\AMDGPU\AMDGPUUnitTests.cpp(50,31):
error: out-of-line definition of 'parseMIR' does not match any declaration in
namespace 'llvm'
50 | std::unique_ptr llvm::parseMIR(LLVMContext &Context,
| ^~~~
7 errors generated.
```
If these failures are unrelated to your changes (for example tests are broken
or flaky at HEAD), please open an issue at
https://github.com/llvm/llvm-project/issues and add the `infrastructure` label.
https://github.com/llvm/llvm-project/pull/196099
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
