LLVM/project efafbedlldb/test/API/tools/lldb-dap/attach TestDAP_attach.py, lldb/test/API/tools/lldb-dap/console TestDAP_console.py

[lldb-dap] Convert test to use the require decorator (#213462)

This is a follow up to https://github.com/llvm/llvm-project/pull/212753
to convert the `lldb-dap` tests to use the `@require` decorators.
DeltaFile
+9-6lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
+3-3lldb/test/API/tools/lldb-dap/variables/TestDAP_variables.py
+3-3lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
+3-3lldb/test/API/tools/lldb-dap/extendedStackTrace/TestDAP_extendedStackTrace.py
+3-3lldb/test/API/tools/lldb-dap/exception/objc/TestDAP_exception_objc.py
+2-2lldb/test/API/tools/lldb-dap/attach/TestDAP_attach.py
+23-206 files not shown
+33-3012 files

LLVM/project 4ae0a5doffload/libomptarget device.cpp

[OpenMP] Fix race in setupIndirectCallTable (#215274)

The IndirectCallTable variable where the table is constructed is a local
variable. The copy to the device is right now not synchronized, so the
frame where the table resides can be overwritten before the GPU copy has
accessed the host data which corrupts the device side table.

Fix it by make it a synchronous operation.
DeltaFile
+7-0offload/libomptarget/device.cpp
+7-01 files

LLVM/project 067aa36offload/libomptarget device.cpp, offload/plugins-nextgen/amdgpu/src rtl.cpp

[OFFLOAD][OMP] Move OpenMP kernel argument processing from plugins (#213867)

This PR moves part of the OpenMP specific code that is inside the common
code of the plugins that converts the kernel arguments from the OpenMP
ABI to the expected format by the plugins. Also it handles the
additional argument for the KernelLaunch environment.

It also decouples the plugin interface structs from the OpenMP specific
ABI (KernelArgsTy) so changes to this interface do not require changes
to the OpenMP ABI anymore. This also allows to merge what was
KernelArgsTy and LaunchParamsTy into a single struct with all the
information. Because of this there's a number of small changes scattered
through the plugin infrastructure.

There is still some more OpenMP specific code that should be moved out
eventually (and because of this we had to retain some of that
informationt in the new KernelLaunchArgsTy for now) but I didn't want to
complicate this PR further.

Assisted by Claude-Sonnet-5.
DeltaFile
+47-101offload/plugins-nextgen/common/src/PluginInterface.cpp
+61-28offload/plugins-nextgen/common/include/PluginInterface.h
+79-3offload/libomptarget/device.cpp
+18-20offload/plugins-nextgen/amdgpu/src/rtl.cpp
+16-19offload/plugins-nextgen/common/src/RecordReplay.cpp
+12-15offload/plugins-nextgen/common/include/RecordReplay.h
+233-1869 files not shown
+265-23115 files

LLVM/project e4f8403llvm/lib/Support CommandLine.cpp

[Support] Use block-scope statics for cl::opt registration globals (#215216)

Every static cl::opt constructor references GlobalParser and the
TopLevelSubCommand/AllSubCommands ManagedStatics, namespace-scope
globals in another translation unit. Although these are constant-
initialized in practice, Coverity's GLOBAL_INIT_ORDER checker cannot
prove it and reports one 'Initialization or destruction ordering is
unspecified' finding per option -- 15,356 of the 34,356 outstanding
defects (44.7%) in the LLVM Coverity project.

Move the three registries into block-scope statics behind accessor
functions. Block-scope statics are initialized on first use, so the
cross-TU initialization-order hazard pattern disappears while the
ManagedStatic semantics (lazy construction, destruction via
llvm_shutdown) are preserved unchanged.
DeltaFile
+50-40llvm/lib/Support/CommandLine.cpp
+50-401 files

LLVM/project 95cb244llvm/include/llvm/MC MCGOFFStreamer.h, llvm/lib/MC MCGOFFStreamer.cpp

[SystemZ][z/OS] Support emittinh common symbols in HLASM

This is a follow-up to #210179. It reuses the logic to emit common
symbols in HLASM, too.
DeltaFile
+17-12llvm/lib/MC/MCGOFFStreamer.cpp
+6-0llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp
+5-0llvm/test/CodeGen/SystemZ/zos-common-global.ll
+3-0llvm/include/llvm/MC/MCGOFFStreamer.h
+1-1llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.h
+32-135 files

LLVM/project f890a30llvm/lib/CodeGen TargetLoweringBase.cpp, llvm/lib/Target/AArch64 AArch64ISelLowering.cpp

Set Expand as default action for ISD::VECTOR_BROADCAST
DeltaFile
+5-3llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+4-0llvm/lib/CodeGen/TargetLoweringBase.cpp
+9-32 files

LLVM/project 9a0ca57llvm/lib/Target/AArch64 AArch64ISelLowering.h AArch64ISelLowering.cpp, llvm/test/CodeGen/AArch64 sve-vector-broadcast.ll

Fix AArch64 ISel for unpacked types

Using DUP instructions only really works for packed types, as it will
not introduce the spacing between elements that is required for unpacked
types like nxv2f16.

For those, we'll first broadcast to their corresponding packed type, and
then extract the lo lanes into an unpacked type, effectively introducing
the required spacing.
DeltaFile
+51-0llvm/test/CodeGen/AArch64/sve-vector-broadcast.ll
+11-31llvm/lib/Target/AArch64/SVEInstrFormats.td
+22-0llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+1-0llvm/lib/Target/AArch64/AArch64ISelLowering.h
+85-314 files

LLVM/project fba1e10flang/test/Lower/OpenMP declare-target-implicit-func-and-subr-cap-enter.f90 declare-target-data.f90, mlir/lib/Dialect/OpenMP/Transforms MarkDeclareTarget.cpp

[MLIR][OpenMP] Support calls added between MarkDeclareTarget runs

Currently, if there are multiple executions of the `MarkDeclareTarget`
pass in a compiler pipeline and somewhere between both runs function
calls get added to a non-declare_target function that was marked as such
implicitly, potential changes to the `device_type` won't get propagated.

This is because we can't distinguish between a user-specified
`declare_target` function attribute and one added by that pass. This
patch addresses this by adding a new parameter to `DeclareTargetAttr`
that is used by that pass to know whether new `declare_target`
information could be propagated to it.

The `automap` and `implicit` parameters are given default values to
simplify the representation of these attributes.
DeltaFile
+62-40mlir/test/Dialect/OpenMP/mark-declare-target.mlir
+25-47mlir/lib/Dialect/OpenMP/Transforms/MarkDeclareTarget.cpp
+23-23flang/test/Lower/OpenMP/declare-target-func-and-subr.f90
+21-21flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90
+19-19flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90
+19-19flang/test/Lower/OpenMP/declare-target-data.f90
+169-16912 files not shown
+221-20618 files

LLVM/project 791c540flang/test/Integration/OpenMP function-filtering-2.f90, flang/test/Lower/OpenMP declare-target-implicit-tarop-cap.f90 declare-target-implicit-func-and-subr-cap-enter.f90

[Flang][OpenMP] Improve implicit declare_target propagation

After starting to run the `MarkDeclareTarget` pass later in the
pipeline, some limitations of its original implementation started to be
hit; specifically, some calls being missed could result in an overly
restrictive marking that would cause the `HostOpFiltering` pass to
remove reachable device code.

This patch aims to address these problems by making the following
changes:
- It makes sure to mark functions in every `RecipeInterface` op pointed
to by OpenMP operations.
- It recursively propagates and combines declare_target information from
target regions and explicitly set declare_target functions to unmarked
functions, but it never modifies explicitly marked functions.
- External and public functions can now only be marked with
`device_type(any)`. Before, marking them as `nohost` or `host` was
possible, but without the ability to see all users we can't give such
guarantees.

    [7 lines not shown]
DeltaFile
+267-124mlir/lib/Dialect/OpenMP/Transforms/MarkDeclareTarget.cpp
+200-187flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap.f90
+363-0mlir/test/Dialect/OpenMP/mark-declare-target.mlir
+174-161flang/test/Lower/OpenMP/declare-target-implicit-func-and-subr-cap-enter.f90
+86-73flang/test/Lower/OpenMP/declare-target-implicit-tarop-cap.f90
+46-44flang/test/Integration/OpenMP/function-filtering-2.f90
+1,136-5897 files not shown
+1,208-60613 files

LLVM/project aa8e493flang/test/Integration/OpenMP target-dead-code.f90, flang/test/Lower/OpenMP target-dead-code.f90

Address review comments
DeltaFile
+271-0flang/test/Integration/OpenMP/target-dead-code.f90
+0-263flang/test/Lower/OpenMP/target-dead-code.f90
+271-2632 files

LLVM/project c008226flang/include/flang/Optimizer/OpenMP Passes.td, flang/lib/Optimizer/OpenMP CMakeLists.txt DeleteUnreachableTargets.cpp

[Flang][OpenMP] Remove the DeleteUnreachableTargets pass

The `DeleteUnreachableTargets` pass was initially added to work around
a problem caused by the interaction between the function filtering and
host op filtering passes and generic MLIR optimizations.

Specifically, by running function and host op filtering before these
optimizations, we would lose the ability to detect unreachable
`omp.target` operations when compiling for the device. This would cause
GPU kernels being created for them, for which no host counterpart
existed.

By now having moved both passes towards the end of the compilation
pipeline, after FIR to LLVM lowering, removal of unreachable host and
device code is no longer impacted by them. This makes the
`DeleteUnreachableTargets` pass redundant.
DeltaFile
+0-322flang/test/Transforms/OpenMP/delete-unreachable-targets.mlir
+202-27flang/test/Lower/OpenMP/target-dead-code.f90
+0-76flang/lib/Optimizer/OpenMP/DeleteUnreachableTargets.cpp
+0-12flang/include/flang/Optimizer/OpenMP/Passes.td
+0-3flang/lib/Optimizer/Passes/Pipelines.cpp
+0-1flang/lib/Optimizer/OpenMP/CMakeLists.txt
+202-4416 files

LLVM/project 929c545mlir/test/Dialect/OpenMP function-filter.mlir

address review comments
DeltaFile
+2-2mlir/test/Dialect/OpenMP/function-filter.mlir
+2-21 files

LLVM/project 0fd7db2flang/lib/Optimizer/OpenMP UnimplementedDeviceCheck.cpp FunctionFiltering.cpp, flang/test/Transforms omp-function-filtering-todo.mlir

[Flang][MLIR][OpenMP] Move function filtering to the omp dialect

The `FunctionFilteringPass`, which removes host-only functions when
compiling for an OpenMP target device, is currently defined only for
Flang. However, it implements logic that would generally be useful for
other frontends that can generate OpenMP offloading code. This patch
makes that transition by implementing the following changes:
- It rewrites the `FunctionFilteringPass` to work on lower level non-FIR
  MLIR modules.
- It splits off preexisting logic to check for not-yet-implemented target
  device features during function filtering to its own pass and it improves
  context detection to properly diagnostic only device code.
- It delays function filtering to run at the end of the pipeline, as well
  as the `MarkDeclareTargetPass`. This will enable the latter to run
  only once in the pipeline after the `UnimplementedDeviceCheckPass`
  becomes no longer necessary.

One side effect of these changes is that delaying the filtering will
cause all following passes to process host functions that are eventually

    [4 lines not shown]
DeltaFile
+0-155flang/lib/Optimizer/OpenMP/FunctionFiltering.cpp
+152-0mlir/test/Dialect/OpenMP/function-filter.mlir
+0-137flang/test/Transforms/OpenMP/function-filtering.mlir
+109-0mlir/lib/Dialect/OpenMP/Transforms/FunctionFiltering.cpp
+98-0flang/lib/Optimizer/OpenMP/UnimplementedDeviceCheck.cpp
+67-5flang/test/Transforms/omp-function-filtering-todo.mlir
+426-29720 files not shown
+800-61026 files

LLVM/project 9c7ba7bllvm/lib/Support/Unix Path.inc

[AIX][SystemZ][Support] Check if file is dir on open instead of read (#214815)

See
https://github.ibm.com/compiler/llvm-project/commit/678f19f08296fec299438130cf5943714c590b7e
for the original change.

This original change would run fstat() on the file at every read(). In
the non-error situation that is a lot of redundant checking. Moving the
fstat() check to openNativeFileForRead() will reduce the checks to a
minimum and still produce the same error if someone tries to open a
directory.
DeltaFile
+9-9llvm/lib/Support/Unix/Path.inc
+9-91 files

LLVM/project b6a9f2f.github/workflows release-tasks.yml

workflows/release-task: Stop uploading lit to test.pypi.org (#214979)

The gh-action-pypi-publish action only supports being run once per job.
Running it twice results in the second upload always failing. Rather
than trying to create a complicated job structure to support uploading
to test.pypi.org and pypi.org, we just remove the test.pypi.org upload
for now.
DeltaFile
+0-6.github/workflows/release-tasks.yml
+0-61 files

LLVM/project ef4d4d0.github/workflows release-tasks.yml

release-tasks: Disable lit publishing for release candidates (#214972)

There is no rc in the lit version string, so release candidates get
published using the non-rc version number.
DeltaFile
+1-0.github/workflows/release-tasks.yml
+1-01 files

LLVM/project c405fd3mlir/lib/Dialect/OpenACC/Transforms ACCImplicitData.cpp, mlir/test/Dialect/OpenACC acc-implicit-data.mlir

[mlir][acc] Fold present() clauses on device values (#212815)

The compiler must emit acc.device_ptr mapping for device values,
however, an existing present clause prevents that. A present on a device
value always holds, so fold it away to allow implicit data handling to
generate device_ptr mapping.
DeltaFile
+56-20mlir/lib/Dialect/OpenACC/Transforms/ACCImplicitData.cpp
+46-0mlir/test/Dialect/OpenACC/acc-implicit-data.mlir
+102-202 files

LLVM/project 786ed0dclang/lib/Driver SanitizerArgs.cpp, clang/lib/Driver/ToolChains Hexagon.cpp

[Hexagon] Fix unusable SCS reg, make it selectable (#213820)

SCS hardcoded r19 as the shadow call stack pointer and required
-ffixed-r19. That was the wrong register to pick: r19 is precisely the
one the intended consumers cannot give up, so the feature was unusable
in practice.

* The Hexagon Linux kernel already reserves r19 for its thread-info
pointer (arch/hexagon/Makefile: "TIR_NAME := r19", documented there as
not configurable because it is hard-coded in several files).

* hexagon-hypervisor reserves r20-r28 (kernel/CMakeLists.txt), with r28
bound to a register global (H2K_gp).

That leaves h2 only r16-r19, so no single hardcoded choice can serve
both consumers.

Intersecting that with the callee-saved regs leaves r1{6,7,8}. So the
new default is r18.

    [5 lines not shown]
DeltaFile
+118-55llvm/test/CodeGen/Hexagon/shadow-call-stack.ll
+53-23llvm/lib/Target/Hexagon/HexagonFrameLowering.cpp
+53-6clang/test/Driver/fsanitize-shadow-call-stack-hexagon.c
+52-5clang/lib/Driver/SanitizerArgs.cpp
+19-0llvm/lib/Target/Hexagon/HexagonSubtarget.cpp
+17-0clang/lib/Driver/ToolChains/Hexagon.cpp
+312-896 files not shown
+364-9612 files

LLVM/project e46fe87llvm/lib/Target/AMDGPU AMDGPURegBankLegalizeRules.cpp, llvm/test/CodeGen/AMDGPU/GlobalISel load-zero-and-sign-extending-uniform.ll load-zero-and-sign-extending-uniform-in-vgpr.ll

AMDGPU/GlobalISel: RegBankLegalize rules for uniform i16 extending loads

Extending loads, i8 to i16, are legal on targets with true16.
Note: there is potentially a missing rule for uniform P4 when target
usesTrue16 and hasSMRDSmall but MMO does not satisfy isUL. Wasn't able
to construct an LLVM-IR test for this case, leaving it unsupported.
DeltaFile
+122-0llvm/test/CodeGen/AMDGPU/GlobalISel/load-zero-and-sign-extending-uniform-in-vgpr.ll
+116-0llvm/test/CodeGen/AMDGPU/GlobalISel/load-zero-and-sign-extending-uniform.ll
+6-0llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeRules.cpp
+244-03 files

LLVM/project 9d3e53alibcxx/utils/ci run-buildbot, libcxx/utils/ci/lnt README.md common.py

[libc++] Add tools for gathering historical benchmark data (#212775)

Benchmarking every commit of libc++ is prohibitively expensive: a single
run of the benchmark suite takes hours, and the data has to be
regenerated from scratch whenever the compiler, the OS or the benchmark
machines change. These tools instead sample the history at a coarse
granularity and drive libcxx-benchmark-commit.yml to fill in what is
missing.

Three tools cooperate, meant to be run periodically:

  select-anchor-commits  picks one commit per calendar bucket from Git
  plan-benchmarks        diffs that against what LNT already holds
  dispatch-benchmarks    requests the corresponding workflow runs

They keep no state of their own. They recompute the current and target
states from LNT and the GitHub Actions API, which allows running them in
a CRON. The dispatching of workflows is done using a budget, to avoid
launching tens of jobs and competing with other uses of the CI

    [3 lines not shown]
DeltaFile
+408-0libcxx/utils/ci/lnt/dispatch-benchmarks
+217-0libcxx/utils/ci/lnt/select-anchor-commits
+211-0libcxx/utils/ci/lnt/plan-benchmarks
+120-0libcxx/utils/ci/lnt/common.py
+64-18libcxx/utils/ci/lnt/README.md
+13-0libcxx/utils/ci/run-buildbot
+1,033-182 files not shown
+1,036-188 files

LLVM/project ad36a6bclang/lib/CodeGen CGObjCGNU.cpp, clang/test/CodeGenObjC exceptions-personality.m

Fix CGObjCGNU __cxa_rethrow return type (#214496)

PtrTy -> VoidTy
DeltaFile
+2-2clang/lib/CodeGen/CGObjCGNU.cpp
+3-1clang/test/CodeGenObjC/exceptions-personality.m
+5-32 files

LLVM/project 224d3c6clang/lib/StaticAnalyzer/Core HTMLDiagnostics.cpp, clang/test/Analysis/html_diagnostics highlight-range-mapping.cpp

[analyzer] Fix -analyzer-output=html assert on reversed and macro ranges

HTMLDiagnostics::HighlightRange guarded against a reversed range by
comparing line numbers, so a same-line reversal - which is what the piece for
an implicit copy constructor carries - reached html::HighlightRange.
Its scan walks from begin to end, ran off the end of the buffer, and asserted:
https://godbolt.org/z/sTb5qfjjd

  Invalid position to insert! (RewriteRope.h)

It also added the end token's length itself and then passed a token range to
html::HighlightRange, which measured the token again, this time from the
interior. For most tokens the two cancel, but where the tail re-lexes longer
the highlight reached past the end of the range, e.g. over a trailing ';'.

Use getExpansionRangeInFile(), which rejects reversed and cross-file ranges,
then convert once and tell html::HighlightRange the range is already
char-granular.


    [4 lines not shown]
DeltaFile
+43-0clang/test/Analysis/html_diagnostics/highlight-range-mapping.cpp
+8-27clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
+51-272 files

LLVM/project 257cf94clang/lib/StaticAnalyzer/Core SarifDiagnostics.cpp, clang/test/Analysis/diagnostics sarif-macro-expansion.c

[analyzer] Fix -analyzer-output=sarif crash on macro-expanded ranges

A path piece whose range ends inside a macro expansion aborted the whole
document: https://godbolt.org/z/61vWYcsWj

  Cannot create a physicalLocation from invalid SourceRange!

convertTokenRangeToCharRange() built the end with
Lexer::getLocForEndOfToken(), which returns an invalid location for a macro
ID that is not at the end of its expansion, and used it unchecked. The
analyzer's own test corpus hits this in nine files; text and plist output
were unaffected because both already map such ranges to the expansion.

- Use getExpansionRangeInFile(), so the region covers the macro use like the
  other two outputs.
- Fall back to a caret when the range is unusable. A thread flow needs a
  location per piece, so dropping one would truncate the reported path. This
  also stops reversed ranges producing regions with endColumn < startColumn.


    [4 lines not shown]
DeltaFile
+22-21clang/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
+35-0clang/test/Analysis/diagnostics/sarif-macro-expansion.c
+57-212 files

LLVM/project 20ef11eclang/include/clang/Frontend DiagnosticRenderer.h, clang/lib/Frontend DiagnosticRenderer.cpp

[clang] Reject ranges getExpansionRangeInFile cannot represent

getExpansionRangeInFile was extracted verbatim and inherited two shortcomings
of the original loop, fixed here before the analyzer's SARIF and HTML consumers
depend on it:

- It mapped the end with getExpansionRange(SourceLocation), which always
  reports a token range, so a char-range input was widened by a whole token.
  Now using the getExpansionRange(CharSourceRange) overload, which keeps the flag.
- It passed reversed ranges through. Consumers walk begin->end; now returning
  nullopt for those, as Lexer::makeFileCharRange already does.

Separate from the extraction so that stays NFC, and out of the consumer fixes
because it changes the shared helper's contract rather than one output.

Both contract changes, plus the invalid- and cross-file-range guards, are
covered by a GetExpansionRangeInFile unit test in
clang/unittests/Frontend/TextDiagnosticTest.cpp.

Assisted-By: claude
DeltaFile
+89-0clang/unittests/Frontend/TextDiagnosticTest.cpp
+8-1clang/include/clang/Frontend/DiagnosticRenderer.h
+6-0clang/lib/Frontend/DiagnosticRenderer.cpp
+103-13 files

LLVM/project 4aa2d83clang/include/clang/Frontend DiagnosticRenderer.h, clang/lib/Frontend DiagnosticRenderer.cpp TextDiagnostic.cpp

[clang][NFC] Extract getExpansionRangeInFile out of the diagnostic renderers (#214460)

Prep for the following commits, which fix crashes in the analyzer's
SARIF and HTML output on ranges that end inside a macro expansion.
Fixing them means mapping such a range into the reported file - the
normalization the frontend text and SARIF renderers already do, and that
the two analyzer consumers each do differently and incorrectly.

Hoist that logic into getExpansionRangeInFile, beside the DiagnosticRenderer
base both frontend renderers derive from, so the fixes reuse one
implementation instead of adding two more copies. TextDiagnostic and
SARIFDiagnostic move onto it here with no behavior change; the analyzer
consumers follow in later commits.

getFileID() replaces SARIFDiagnostic's getDecomposedLoc(...).first - equivalent
here, and what TextDiagnostic has used since c113cbb51005.

Assisted-By: claude
DeltaFile
+7-17clang/lib/Frontend/SARIFDiagnostic.cpp
+6-11clang/lib/Frontend/TextDiagnostic.cpp
+15-0clang/lib/Frontend/DiagnosticRenderer.cpp
+9-0clang/include/clang/Frontend/DiagnosticRenderer.h
+37-284 files

LLVM/project 9dfc65dlldb/source/Plugins/ScriptInterpreter/Python PythonDataObjects.cpp

[lldb] Remove Python 2 compatibility in PythonDataObjects.cpp (#215268)

Our minimum Python is 3.8.
DeltaFile
+1-4lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp
+1-41 files

LLVM/project 45d4f99llvm/lib/Transforms/InstCombine InstCombineAddSub.cpp, llvm/test/Transforms/InstCombine saturating-add-sub.ll

[InstCombine] Fold uadd.sat(X, C) - C to umin(X, ~C) (#215130)

`uadd.sat(X, C) - C --> umin(X, ~C)` for nonzero `C`.

The saturating add gives `X + C` or `UMAX`, so subtracting `C` leaves
`X` or
`UMAX - C`, which is the unsigned minimum. `UMAX - C == ~C`, so the
constant
is just the inverted `C`.

There was already a test documenting this miss in saturating-add-sub.ll
(`test_scalar_uadd_sub_const`) - it folds now.

https://alive2.llvm.org/ce/z/kLFWy7

Fixes #215103
DeltaFile
+52-2llvm/test/Transforms/InstCombine/saturating-add-sub.ll
+11-1llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+63-32 files

LLVM/project 0021505libcxx/utils/libcxx/test/features misc.py

[libc++] Simplify detection of win32-broken-utf8-wchar-ctype (#214797)

Instead of querying `_LIBCPP_HAS_LOCALIZATION` from Python, do it from
the source program. This fixes a bug where if `_LIBCPP_HAS_LOCALIZATION`
was not defined at all (which is the case for older versions of libc++),
the feature would then be defined immediately, regardless of the
platform we're on. That's because `and` has higher precedence than `or`
in Python, so we'd end up skipping the `_WIN32` check entirely.
DeltaFile
+12-6libcxx/utils/libcxx/test/features/misc.py
+12-61 files

LLVM/project 762d376lldb/packages/Python/lldbsuite/test decorators.py lldbtest.py

[lldb][test] Remove Python <= 3.6 workaround (#215262)

re.Pattern was added in 3.7 and our minimum
is now 3.8.

Python 3.6.15:
>>> import re
>>> re.Pattern
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 're' has no attribute 'Pattern'

Python 3.7.17:
>>> import re
>>> re.Pattern
<class 're.Pattern'>

Python 3.8.20:
>>> import re

    [3 lines not shown]
DeltaFile
+2-5lldb/packages/Python/lldbsuite/test/lldbtest.py
+1-3lldb/packages/Python/lldbsuite/test/decorators.py
+3-82 files

LLVM/project 6f65edellvm/lib/Transforms/AggressiveInstCombine AggressiveInstCombine.cpp, llvm/test/Transforms/AggressiveInstCombine/AMDGPU store-merge-addrspace.ll

[AggressiveInstCombine] Don't merge part stores across address spaces (#213677)
DeltaFile
+102-0llvm/test/Transforms/AggressiveInstCombine/AMDGPU/store-merge-addrspace.ll
+5-1llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp
+107-12 files