LLVM/project 957dc60 — llvm/test/CodeGen/AMDGPU/GlobalISel global-atomic-fadd.f32-rtn.ll divergence-structurizer.ll

AMDGPU/GlobalISel: Mark SCC clobbers on control flow pseudos dead (#227636)

Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
DeltaFile
+36-22llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-brcond.mir
+22-22llvm/test/CodeGen/AMDGPU/GlobalISel/llvm.amdgcn.wqm.demote.ll
+16-16llvm/test/CodeGen/AMDGPU/GlobalISel/global-atomic-fadd.f32-no-rtn.ll
+13-13llvm/test/CodeGen/AMDGPU/GlobalISel/divergence-divergent-i1-used-outside-loop.ll
+12-12llvm/test/CodeGen/AMDGPU/GlobalISel/global-atomic-fadd.f32-rtn.ll
+12-12llvm/test/CodeGen/AMDGPU/GlobalISel/divergence-structurizer.ll
+111-976 files not shown
+152-13112 files

LLVM/project 94a6d82 — llvm/include/llvm/CodeGen TargetRegisterInfo.h, llvm/lib/CodeGen TargetRegisterInfo.cpp InlineSpiller.cpp

Refactor subreg spilling logic.

Avoiding Lanebitemask manipulations.
Moved most of generic the calculations to use TargetRegisterInfo APIs.
Added a new API to get the covering subreg index given a lanebitmask.
DeltaFile
+102-0llvm/test/CodeGen/AMDGPU/subreg-reload-tuple.mir
+28-32llvm/lib/CodeGen/InlineSpiller.cpp
+20-0llvm/lib/CodeGen/TargetRegisterInfo.cpp
+12-5llvm/include/llvm/CodeGen/TargetRegisterInfo.h
+2-2llvm/lib/Target/AMDGPU/SIRegisterInfo.h
+1-1llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
+165-406 files

LLVM/project fa189b0 — clang/lib/AST/ByteCode Compiler.cpp, clang/test/AST/ByteCode matrix.c

[clang][bytecode] Reject matrix lvalue-to-rvalue casts in non-HLSL (#227305)

To fix test/CodeGen/AArch64/abi-classify-return-types.c.

The code path in the existing tests in
`test/SemaHLSL/Types/BuiltinMatrix/MatrixConstantExpr.hlsl` don't go
though `CheckLiteralType()`, so aren't rejected.
DeltaFile
+5-0clang/lib/AST/ByteCode/Compiler.cpp
+5-0clang/test/AST/ByteCode/matrix.c
+10-02 files

LLVM/project a23820b — llvm/test/CodeGen/AMDGPU regpressure-mitigation-with-subreg-reload.mir

compacted the virt-reg numbers
DeltaFile
+14-14llvm/test/CodeGen/AMDGPU/regpressure-mitigation-with-subreg-reload.mir
+14-141 files

LLVM/project e9a77f5 — llvm/test/CodeGen/AMDGPU regpressure-mitigation-with-subreg-reload.mir

[AMDGPU] Test precommit for subreg reload

This test currently fails due to insufficient
registers during allocation. Once the subreg
reload is implemented, it will begin to pass
as the partial reload help mitigate register
pressure.
DeltaFile
+37-0llvm/test/CodeGen/AMDGPU/regpressure-mitigation-with-subreg-reload.mir
+37-01 files

LLVM/project 9fe0644 — llvm/test/CodeGen/AMDGPU ra-inserted-scalar-instructions.mir identical-subrange-spill-infloop.ll

[InlineSpiller][AMDGPU] Implement subreg reload during RA spill

Currently, when a virtual register is partially used, the
entire tuple is restored from the spilled location, even if
only a subset of its sub-registers is needed. This patch
introduces support for partial reloads by analyzing actual
register usage and restoring only the required sub-registers.
This improvement enhances register allocation efficiency,
particularly for cases involving tuple virtual registers.
For AMDGPU, this change brings considerable improvements
in workloads that involve matrix operations, large vectors,
and complex control flows.
DeltaFile
+10,233-11,171llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+83-117llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+92-98llvm/test/CodeGen/AMDGPU/vgpr-mark-last-scratch-load.ll
+35-56llvm/test/CodeGen/AMDGPU/identical-subrange-spill-infloop.ll
+91-0llvm/test/CodeGen/AMDGPU/skip-partial-reload-for-16bit-regaccess.mir
+38-38llvm/test/CodeGen/AMDGPU/ra-inserted-scalar-instructions.mir
+10,572-11,48023 files not shown
+10,834-11,67929 files

LLVM/project 8140fc2 — llvm/include/llvm/CodeGen LiveRangeEdit.h, llvm/lib/CodeGen LiveRangeEdit.cpp

pass in subregidx rather than a regclass
DeltaFile
+12-7llvm/lib/CodeGen/LiveRangeEdit.cpp
+5-5llvm/include/llvm/CodeGen/LiveRangeEdit.h
+17-122 files

LLVM/project 0aa5083 — mlir/lib/Target/LLVMIR/Dialect/LLVMIR CMakeLists.txt LLVMToLLVMIRTranslation.cpp, mlir/test/Target/LLVMIR llvmir.mlir

[MLIR][LLVMIR] Restore constant folding for global initializer GEPs

Before #226904, a GEP in a global initializer went through
IRBuilder::CreateGEP, and MLIR's IRBuilder<TargetFolder> folded the result
with ConstantFoldConstant. That combines nested GEPs, folds null and integer
bases, and infers inbounds and nuw when the offset stays within the global.
Building the constant expression directly skipped the folder, so the output
lost those flags.

Fold the constant again. This also applies to inrange GEPs, which used to
bypass the folder; the only visible difference there is that an inbounds
GEP with a non-negative offset now also gets nuw.

CIR's vtable, VTT and constant pointer tests check for the inferred flags
(for example CIR/CodeGen/vtt.cpp) and have failed since #226904.

Assisted-by: Claude Code (Claude Fable 5.1).
DeltaFile
+11-1mlir/test/Target/LLVMIR/llvmir.mlir
+4-0mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
+1-0mlir/lib/Target/LLVMIR/Dialect/LLVMIR/CMakeLists.txt
+16-13 files

LLVM/project 327d069 — mlir/docs Remarks.md, mlir/include/mlir/IR Remarks.h

[MLIR][Remark] Make remark reporting thread-safe and order final remarks by source position

Passes nested under the multithreaded pass manager report into the same
RemarkEngine from worker threads, but nothing in the engine or the
policies was synchronized. RemarkEmittingPolicyFinal inserted into its
map from several threads at once, and under RemarkEmittingPolicyAll the
streamer, including the LLVM remark serializer, was called from several
threads at once. ThreadSanitizer reports both races in the new unit tests.

RemarkEngine now holds a lock around every call into the policy. It is a
recursive llvm::sys::SmartMutex, the same type as the DiagnosticEngine's
lock. report() takes it, and so does a new finalizePolicy(), which the
engine destructor and mlir-opt now use instead of calling finalize() on
the policy directly. For the All policy the streamer and the diagnostic
printer also run under the lock, so custom policies and streamers need no
lock of their own.

With the race fixed, the final policy's creation order is still not
deterministic: which thread reports first depends on scheduling.

    [16 lines not shown]
DeltaFile
+197-13mlir/unittests/IR/RemarkTest.cpp
+78-14mlir/lib/IR/Remarks.cpp
+51-0mlir/test/Pass/remark-final-parallel.mlir
+29-4mlir/include/mlir/IR/Remarks.h
+26-2mlir/docs/Remarks.md
+9-8mlir/test/Pass/remark-final.mlir
+390-411 files not shown
+391-427 files

LLVM/project 0f972d1 — llvm/lib/Target/AMDGPU SIInstrInfo.cpp, llvm/test/CodeGen/AMDGPU/GlobalISel legalize-trap-gfx11.mir

AMDGPU: Mark scc clobbers in the simulated trap expansion dead (#227633)

Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
DeltaFile
+4-4llvm/test/CodeGen/AMDGPU/GlobalISel/legalize-trap-gfx11.mir
+4-2llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+8-62 files

LLVM/project d4a422c — llvm/lib/Target/AMDGPU SIInstrInfo.cpp, llvm/test/CodeGen/AMDGPU move-load-addr-to-valu-flat.mir move-load-addr-to-valu.mir

AMDGPU: Mark SCC clobber dead when moving scalar branches to VALU (#227635)

Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
DeltaFile
+10-10llvm/test/CodeGen/AMDGPU/move-load-addr-to-valu.mir
+8-8llvm/test/CodeGen/AMDGPU/move-load-addr-to-valu-flat.mir
+2-1llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+20-193 files

LLVM/project 6d125c9 — clang-tools-extra/clangd/refactor/tweaks ExtractFunction.cpp, clang/test/CodeGenOpenCL builtins-amdgcn-gfx13.cl

Merge branch 'main' into users/arsenm/mips/gisel-call-dead-ra-tests
DeltaFile
+1,594-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exclusive.scan.ll
+912-0llvm/lib/ExecutionEngine/JITLink/ELF_mips.cpp
+413-0llvm/include/llvm/ExecutionEngine/JITLink/mips.h
+262-9clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp
+260-0clang/test/CodeGenOpenCL/builtins-amdgcn-gfx13.cl
+226-0llvm/lib/ExecutionEngine/JITLink/mips.cpp
+3,667-9129 files not shown
+5,603-333135 files

LLVM/project 09a15dd — clang/lib/AST/ByteCode Compiler.cpp, clang/test/AST/ByteCode initializer_list.cpp

[clang][bytecode] Fix initializer-list edge cases (#227587)

Namely, initializer lists for primitive types and discarding the result
of an initializer list.
DeltaFile
+20-3clang/lib/AST/ByteCode/Compiler.cpp
+14-0clang/test/AST/ByteCode/initializer_list.cpp
+34-32 files

LLVM/project b62fe22 — mlir/docs Remarks.md, mlir/include/mlir/IR Remarks.h

[MLIR][Remark] Make remark reporting thread-safe and order final remarks by source position

Passes nested under the multithreaded pass manager report into the same
RemarkEngine from worker threads, but nothing in the engine or the
policies was synchronized. RemarkEmittingPolicyFinal inserted into its
map from several threads at once, and under RemarkEmittingPolicyAll the
streamer, including the LLVM remark serializer, was called from several
threads at once. ThreadSanitizer reports both races in the new unit tests.

RemarkEngine now holds a lock around every call into the policy. It is a
recursive llvm::sys::SmartMutex, the same type as the DiagnosticEngine's
lock. report() takes it, and so does a new finalizePolicy(), which the
engine destructor and mlir-opt now use instead of calling finalize() on
the policy directly. For the All policy the streamer and the diagnostic
printer also run under the lock, so custom policies and streamers need no
lock of their own.

With the race fixed, the final policy's creation order is still not
deterministic: which thread reports first depends on scheduling.

    [16 lines not shown]
DeltaFile
+184-5mlir/unittests/IR/RemarkTest.cpp
+84-10mlir/lib/IR/Remarks.cpp
+51-0mlir/test/Pass/remark-final-parallel.mlir
+33-6mlir/include/mlir/IR/Remarks.h
+31-3mlir/docs/Remarks.md
+9-8mlir/test/Pass/remark-final.mlir
+392-321 files not shown
+393-337 files

LLVM/project d58ae91 — mlir/docs Remarks.md, mlir/include/mlir/IR Remarks.h

[MLIR][Remark] Emit final-policy remarks in deterministic order

RemarkEmittingPolicyFinal stores remarks in a DenseSet whose hash covers the
location pointer and the hash seed, so finalize() emitted them in bucket
order, which depends on the build and on where things landed in memory. That
is why mlir/test/Pass/remark-final.mlir used CHECK-DAG.

The engine assigns every remark a RemarkId from a monotonic counter when it is
created, and the set already keeps the newer of two remarks with the same
identity. finalize() now sorts the drained remarks by that ID before emitting,
so remarks come out in creation order and a replaced identity takes the
position of its last report. Linked remarks still follow their parent.

Order only. The identity, DenseMapInfo<Remark> and the header are unchanged.
Only remarks handed to the policy outside the engine have no ID; the unit
tests that do so assert unordered or single results.

Assisted-by: Claude Code (Claude Fable 5.1)
DeltaFile
+20-14mlir/test/Pass/remark-final.mlir
+22-4mlir/unittests/IR/RemarkTest.cpp
+10-4mlir/lib/IR/Remarks.cpp
+2-1mlir/include/mlir/IR/Remarks.h
+2-1mlir/docs/Remarks.md
+56-245 files

LLVM/project b63ea1c — lldb/source/Plugins/Process/Windows/Common NativeProcessWindows.cpp

[lldb][Windows] Lock the thread list when lldb-server accesses it (#226974)

`NativeProcessProtocol::Threads()` returns a `LockingAdaptedIterable`
that holds `m_threads_mutex` for the lifetime of the iteration, so
callers may hold references into `m_threads` across the loop body. On
Windows, this is only done when removing threads:

```
  // OnCreateThread
  m_threads.push_back(std::move(thread));
...
  // OnExitThread
  std::lock_guard<std::recursive_mutex> guard(m_threads_mutex);
  llvm::erase_if(m_threads, ...);
```

`m_threads` is a `std::vector<std::unique_ptr<NativeThreadProtocol>>`.
When the debug-event thread appends and the vector reallocates, every
reference held by a concurrent iteration on the main loop dangles. This

    [17 lines not shown]
DeltaFile
+55-38lldb/source/Plugins/Process/Windows/Common/NativeProcessWindows.cpp
+55-381 files

LLVM/project 8653a63 — llvm/include/llvm/CodeGen TargetRegisterInfo.h, llvm/lib/CodeGen TargetRegisterInfo.cpp InlineSpiller.cpp

Refactor subreg spilling logic.

Avoiding Lanebitemask manipulations.
Moved most of generic the calculations to use TargetRegisterInfo APIs.
Added a new API to get the covering subreg index given a lanebitmask.
DeltaFile
+102-0llvm/test/CodeGen/AMDGPU/subreg-reload-tuple.mir
+28-27llvm/lib/CodeGen/InlineSpiller.cpp
+20-0llvm/lib/CodeGen/TargetRegisterInfo.cpp
+12-5llvm/include/llvm/CodeGen/TargetRegisterInfo.h
+2-2llvm/lib/Target/AMDGPU/SIRegisterInfo.h
+1-1llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
+165-356 files

LLVM/project 629ca65 — llvm/lib/Remarks YAMLRemarkParser.h YAMLRemarkSerializer.cpp, llvm/unittests/Remarks YAMLRemarksSerializerTest.cpp YAMLRemarksParsingTest.cpp

[Remarks] Fix YAML remark round-trip for values that need escaping

The serializer writes argument values with more than one newline as
literal block scalars. A block scalar has no escapes, so a value that
also contained a control character other than tab or newline was
written with the raw byte, which strict YAML readers reject. Such
values now use the double-quoted form.

The parser took the raw scalar text and stripped only single quotes, so
double-quoted values came back with their quotes and escapes, and ''
inside single quotes was not unescaped. Decode scalars with
ScalarNode::getValue instead and report escape errors. Unescaped values
and block scalar values are copied into storage owned by the parser.
Block scalar values used to point into the YAML document, which next()
frees before returning the remark.

Assisted-by: Claude
DeltaFile
+49-0llvm/unittests/Remarks/YAMLRemarksParsingTest.cpp
+29-0llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
+12-6llvm/lib/Remarks/YAMLRemarkParser.cpp
+11-1llvm/lib/Remarks/YAMLRemarkSerializer.cpp
+6-0llvm/lib/Remarks/YAMLRemarkParser.h
+107-75 files

LLVM/project c73e88a — mlir/lib/Target/LLVMIR/Dialect/LLVMIR CMakeLists.txt LLVMToLLVMIRTranslation.cpp, mlir/test/Target/LLVMIR llvmir.mlir

[MLIR][LLVMIR] Restore constant folding for global initializer GEPs

Before #226904, a GEP in a global initializer went through
IRBuilder::CreateGEP, and MLIR's IRBuilder<TargetFolder> folded the result
with ConstantFoldConstant. That combines nested GEPs, folds null and integer
bases, and infers inbounds and nuw when the offset stays within the global.
Building the constant expression directly skipped the folder, so the output
lost those flags.

Fold the constant again for the non-inrange case. The inrange path never
went through the folder and is unchanged.

CIR's vtable, VTT and constant pointer tests check for the inferred flags
(for example CIR/CodeGen/vtt.cpp) and have failed since #226904.

Assisted-by: Claude Code (Claude Fable 5.1).
DeltaFile
+10-0mlir/test/Target/LLVMIR/llvmir.mlir
+5-0mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp
+1-0mlir/lib/Target/LLVMIR/Dialect/LLVMIR/CMakeLists.txt
+16-03 files

LLVM/project 43bd07b — lldb/include/lldb/Host/windows PathUtils.h, lldb/source/Host/windows FileSystem.cpp Host.cpp

[lldb][Windows] Strip the extended-length prefix from host and process paths (#227373)

This patch introduces a helper function to strip the extended-length
path prefix from windows paths.
DeltaFile
+30-0lldb/include/lldb/Host/windows/PathUtils.h
+28-0lldb/unittests/Host/windows/PathUtilsTest.cpp
+6-1lldb/source/Host/windows/Host.cpp
+3-2lldb/source/Host/windows/FileSystem.cpp
+4-1lldb/source/Plugins/Process/Windows/Common/ProcessDebugger.cpp
+3-1lldb/source/Plugins/Process/Windows/Common/ProcessWindows.cpp
+74-51 files not shown
+75-57 files

LLVM/project fcd0b0d — clang-tools-extra/clangd/refactor/tweaks ExtractFunction.cpp, clang/test/CodeGenOpenCL builtins-amdgcn-gfx13.cl

Merge branch 'main' into users/arsenm/amdgpu/gisel-cf-pseudo-dead-defs
DeltaFile
+1,594-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exclusive.scan.ll
+912-0llvm/lib/ExecutionEngine/JITLink/ELF_mips.cpp
+413-0llvm/include/llvm/ExecutionEngine/JITLink/mips.h
+262-9clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp
+260-0clang/test/CodeGenOpenCL/builtins-amdgcn-gfx13.cl
+226-0llvm/lib/ExecutionEngine/JITLink/mips.cpp
+3,667-9119 files not shown
+5,439-287125 files

LLVM/project 5b11db2 —

[RISCV][P-ext] Support Packed Widening Unzip (#227211)
DeltaFile
+0-00 files

LLVM/project 7505b4a — llvm/lib/Target/ARM ARMISelLowering.cpp, llvm/test/CodeGen/Thumb optional-def-dead-cpsr.ll

ARM: Preserve the dead flag when activating the optional CPSR def

This did not preserve the original dead flag, so it would be recomputed
later by LiveVariables or RegAllocFast.

Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
DeltaFile
+46-0llvm/test/CodeGen/Thumb/optional-def-dead-cpsr.ll
+1-0llvm/lib/Target/ARM/ARMISelLowering.cpp
+47-02 files

LLVM/project 6d6ab7f — clang-tools-extra/clangd/refactor/tweaks ExtractFunction.cpp, clang/test/CodeGenOpenCL builtins-amdgcn-gfx13.cl

Merge branch 'main' into users/arsenm/amdgpu/valu-scc-branch-dead-scc
DeltaFile
+1,594-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exclusive.scan.ll
+912-0llvm/lib/ExecutionEngine/JITLink/ELF_mips.cpp
+413-0llvm/include/llvm/ExecutionEngine/JITLink/mips.h
+262-9clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp
+260-0clang/test/CodeGenOpenCL/builtins-amdgcn-gfx13.cl
+226-0llvm/lib/ExecutionEngine/JITLink/mips.cpp
+3,667-9119 files not shown
+5,439-287125 files

LLVM/project 762e955 — clang-tools-extra/clangd/refactor/tweaks ExtractFunction.cpp, clang/test/CodeGenOpenCL builtins-amdgcn-gfx13.cl

Merge branch 'main' into users/arsenm/amdgpu/simulated-trap-dead-scc
DeltaFile
+1,594-0llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exclusive.scan.ll
+912-0llvm/lib/ExecutionEngine/JITLink/ELF_mips.cpp
+413-0llvm/include/llvm/ExecutionEngine/JITLink/mips.h
+262-9clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp
+260-0clang/test/CodeGenOpenCL/builtins-amdgcn-gfx13.cl
+226-0llvm/lib/ExecutionEngine/JITLink/mips.cpp
+3,667-9119 files not shown
+5,439-287125 files

LLVM/project d9b12f5 — clang-tools-extra/clangd/refactor/tweaks ExtractFunction.cpp, clang-tools-extra/clangd/unittests/tweaks ExtractFunctionTests.cpp

[clangd] Extract to Function: mark unmodified captured parameters const

Every captured variable was always passed by non-const reference, even when the extracted code never modifies it, resulting in misleading function signatures.

Determine, for each captured variable, whether it's ever (possibly) mutated within the extraction zone, and add `const` to the parameter's type when it isn't. Still passed by reference either way, to avoid a copy.

The check is folded directly into the existing zone traversal (`captureZoneInfo`'s `ExtractionZoneVisitor`), so its cost stays proportional to the size of the code being extracted. Direct mutations (assignment, increment/decrement, non-const method calls, explicit casts to non-const reference, non-const-reference call arguments, ...) are recognized precisely from each occurrence's immediate syntactic context. Anything that aliases a captured variable (a reference bound to it, its address taken, capture by reference in a lambda, a forwarding-reference call argument, a non-const-ref range-for loop variable) is conservatively treated as a possible mutation, without tracing whether the alias itself is later mutated -- trading a little precision in alias-heavy code for a simple, linear-cost check.

Array-typed captures are never made const, since array-to-pointer decay and array-element mutation have enough edge cases that it wasn't worth special-casing for a rare pattern.

Assisted-by: Claude
DeltaFile
+262-9clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp
+190-3clang-tools-extra/clangd/unittests/tweaks/ExtractFunctionTests.cpp
+452-122 files

LLVM/project 00b72f1 — llvm/lib/Remarks YAMLRemarkSerializer.cpp, llvm/unittests/Remarks YAMLRemarksSerializerTest.cpp

[Remarks] Escape control characters in multi-line YAML remark arguments

Argument values with more than one newline are written as YAML literal
block scalars. A block scalar has no escapes, so a value that also
contains a control character (other than tab and newline) was written
with the raw byte, which strict YAML readers reject. Use the
double-quoted form for such values instead.

Assisted-by: Claude
DeltaFile
+29-0llvm/unittests/Remarks/YAMLRemarksSerializerTest.cpp
+11-1llvm/lib/Remarks/YAMLRemarkSerializer.cpp
+40-12 files

LLVM/project 5f376e4 — lldb/include/lldb/Target ThreadPlan.h, lldb/source/API SBThread.cpp

[lldb] Share the address lookup of thread until and StepOverUntil (#226978)

`thread until` and `SBThread::StepOverUntil` turned their targets into
addresses using different code. This commit introduces a helper function
`GetStepUntilAddresses` to unify behavior and the error message.

It resolves lines as `thread until` did: a line without line table
entries resolves to the nearest following line with entries. For
StepOverUntil, a line that is only the call site of an inlined function
now resolves that way too.

The wording of errors is that of `thread until`.
DeltaFile
+6-60lldb/source/Commands/CommandObjectThread.cpp
+12-48lldb/source/API/SBThread.cpp
+56-0lldb/source/Target/ThreadPlan.cpp
+12-0lldb/include/lldb/Target/ThreadPlan.h
+2-2lldb/test/API/functionalities/thread/step_until/TestStepUntilAPI.py
+88-1105 files

LLVM/project 668b338 — flang/lib/Optimizer/CodeGen PreCGRewrite.cpp, flang/test/Fir cg-rewrite-unfoldable-slice.fir

[flang][codegen] Report a shape or slice cg-rewrite cannot read

cg-rewrite folds a fir.shape, fir.shape_shift, fir.shift or fir.slice
into the code-gen form by reading it through its defining op. A value
that has none cannot be folded. For a slice this went unreported: the
rewrite dropped it and produced a descriptor for the whole array rather
than the section it names. For a shape it reached a cast on a null
defining op.

Report it instead, and say which operand. Rebuilding the value covers a
block argument, but not every case: a slice chosen by an arith.select
has no single value to take apart.
DeltaFile
+45-13flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+25-0flang/test/Fir/cg-rewrite-unfoldable-slice.fir
+70-132 files

LLVM/project ab31d64 — flang/lib/Optimizer/CodeGen PreCGRewrite.cpp, flang/test/Fir cg-rewrite-compile-time-only-block-args.fir

[flang][codegen] Rebuild compile-time-only block arguments in cg-rewrite

A fir.shape, fir.shape_shift, fir.shift or fir.slice only describes an
array at compile time. cg-rewrite reads one through its defining op and
folds it into the code-gen form, so none of these types has an LLVM
lowering and none is expected to reach codegen.

A pass that merges two blocks differing only in such a value passes it
as a block argument instead, and a block argument has no defining op.
The fold then finds nothing to read: a slice is dropped, leaving a
descriptor for the whole array rather than the section, and a shape
reaches a cast on a null defining op.

Rebuild the value in the block. The operands behind it are integers,
which can be block arguments, so take those as arguments, forward them
along each branch, and build the value from them at the top of the
block. The merge is kept and no block is duplicated.
DeltaFile
+116-0flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp
+73-0flang/test/Fir/cg-rewrite-compile-time-only-block-args.fir
+189-02 files