LLVM/project 3e584ccflang-rt/lib/runtime tools.cpp

[flang-rt] - Reduce ShallowCopy template instantiations to improve LTO time (#209915)

Limit `ShallowCopy` rank specializations from 1-15 to 1-4, using a
generic fallback for higher ranks. This significantly reduces code size
and LTO compile time when the Fortran runtime is linked into GPU
offloading code.

Before: 15 ranks × 7 types × 3 scenarios = 315 template instantiations
After: 4 ranks × 7 types × 3 scenarios = 84 template instantiations +
fallbacks

Trade-off: Arrays with rank > 4 use a generic runtime loop instead of
compile-time specialized iteration. This is acceptable because:
- Most real-world Fortran arrays are rank 1-3
- Rank 5-15 arrays are rare in practice
- The generic loop is still efficient (just not unrollable)
## Results

### Compilation Time (from `time` command)

    [35 lines not shown]
DeltaFile
+23-26flang-rt/lib/runtime/tools.cpp
+23-261 files

LLVM/project 9d7095fflang-rt/lib/cuda registration.cpp, flang/include/flang/Optimizer/Transforms Passes.td

[flang][cuda] Use cuf.register_variable_static instead of CUFRegisterExternalVariable (#211886)

This gives more flexibility to the backend to select a different
registration mechanism
DeltaFile
+9-9flang/lib/Optimizer/Transforms/CUDA/CUFAddConstructor.cpp
+6-6flang/test/Fir/CUDA/cuda-constructor-2.f90
+0-8flang-rt/lib/cuda/registration.cpp
+0-7flang/include/flang/Runtime/CUDA/registration.h
+2-3flang/test/Fir/CUDA/cuda-unified-module-global.f90
+1-1flang/include/flang/Optimizer/Transforms/Passes.td
+18-341 files not shown
+19-357 files

LLVM/project f61e1fallvm/include/llvm/CodeGen ModuloSchedule.h, llvm/lib/CodeGen ModuloSchedule.cpp

[Pipeliner] Use VRMapPhi to generate phi in epilog (#211723)

When generating a phi in the epilog block corresponding to an existing
phi in the loop, the loop value should come from the new phi generated
in the kernel block (for a non-phi instruction in the loop) rather than
directly from the value map of the previous stage.

The new phis generated by generatePhis for non-phi instructions are
stored in VRMapPhi. Thread VRMapPhi through generateExistingPhis and add
a helper getMapPhiReg that returns the phi-generated register when
available, falling back to VRMap otherwise.

Without this fix, the epilog can pick up the initial prolog value of a
loop-carried register instead of the last kernel-iteration value,
producing incorrect results for pipelined loops with two or more stages
that carry values across iterations. This has been observed on Hexagon
with the modulo scheduled epilog of a right-shift-with-carry loop after
loop unrolling.

Fixes #208943
DeltaFile
+190-0llvm/test/CodeGen/Hexagon/swp-epilog-carry.ll
+148-0llvm/test/CodeGen/Hexagon/swp-epilog-phi12.mir
+16-12llvm/lib/CodeGen/ModuloSchedule.cpp
+13-3llvm/include/llvm/CodeGen/ModuloSchedule.h
+367-154 files

LLVM/project f0be938llvm/lib/Target/AMDGPU AMDGPUInstructions.td, llvm/unittests/Target/AMDGPU InstSizes.cpp CMakeLists.txt

[AMDGPU] Fix instruction size of LDS-DMA buffer loads (#211302)

Mark i1imm_0 as OPERAND_IMMEDIATE type, so its packed 1-bit value is not
mistaken for a trailing literal (same for InstFlag).
Applies to the swz/IsAsync fields of buffer (MUBUF) and FLAT LDS-DMA
instructions.
Changes estimated size for the corresponding instructions; codegen stays
untouched.

Add unit test, checking encoded size is 8 bytes (was: 12).

AI-assisted.
DeltaFile
+66-0llvm/unittests/Target/AMDGPU/InstSizes.cpp
+6-2llvm/lib/Target/AMDGPU/AMDGPUInstructions.td
+1-0llvm/unittests/Target/AMDGPU/CMakeLists.txt
+73-23 files

LLVM/project 8e76c3fllvm/lib/Analysis ScalarEvolution.cpp, llvm/lib/Transforms/Utils ScalarEvolutionExpander.cpp

[SCEV] Use SCEVPtrToAddr instead of SCEVPtrToInt in SCEV. (#180244)

Use SCEVPtrToAddr instead of SCEVPtrToInt for pointer -> int
conversion in SCEV, like when computing trip count expressions.

getPtrToIntExpr now also creates SCEVPtrToAddrExpr.

Removal of SCEVPtrToIntExpr out of this PR, to limit the scope and
will be done as NFC follow-up.

PR: https://github.com/llvm/llvm-project/pull/180244
DeltaFile
+96-102llvm/test/Analysis/ScalarEvolution/ptrtoint.ll
+58-65llvm/lib/Analysis/ScalarEvolution.cpp
+58-19llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
+45-27llvm/test/Transforms/PhaseOrdering/X86/ptrtoaddr-ptrtoint.ll
+33-33llvm/test/Analysis/ScalarEvolution/pointer-rounding.ll
+26-32llvm/test/Transforms/LoopVectorize/opaque-ptr.ll
+316-27888 files not shown
+831-82094 files

LLVM/project fca20bcutils/bazel/llvm-project-overlay/mlir BUILD.bazel

[Bazel] Fixes 8a6a039 (#211892)

This fixes 8a6a039eb31f33749cfe251a5985b335e9a09681 (#211836).

Buildkite error link:
https://buildkite.com/llvm-project/upstream-bazel/builds?commit=8a6a039eb31f33749cfe251a5985b335e9a09681

Co-authored-by: Google Bazel Bot <google-bazel-bot at google.com>
DeltaFile
+1-0utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+1-01 files

LLVM/project 8cb6cddflang/include/flang/Semantics openmp-modifiers.h

[flang][OpenMP] Use llvm::omp::ClauseSet in modifier verification

It's a trivial type substitution.
DeltaFile
+1-1flang/include/flang/Semantics/openmp-modifiers.h
+1-11 files

LLVM/project c47330bllvm/lib/CodeGen/SelectionDAG LegalizeDAG.cpp, llvm/lib/Target/RISCV RISCVISelLowering.cpp

DAG: Stop legalizing poison to undef

Previously all targets would expand poison to undef, which was a
shortcut taken when poison was introduced.

Introduces a new dedicated poison matcher in tablegen; this avoids
multiple opcode changes, and avoids some problematic contexts that
couldn't deal with PatFrags.

This probably should be legal by default for all legal types.

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+11-7llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+16-0llvm/utils/TableGen/DAGISelMatcher.h
+8-8llvm/test/CodeGen/X86/vselect-avx.ll
+14-0llvm/utils/TableGen/DAGISelMatcher.cpp
+0-13llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+4-4llvm/test/CodeGen/AArch64/sve-fixed-length-frame-offests.ll
+53-3215 files not shown
+89-4721 files

LLVM/project 5b741efllvm/lib/Target/AMDGPU AMDGPUISelDAGToDAG.cpp

AMDGPU: Avoid dropping poison when extracting a high element (#211872)

Haven't found a case where this matters, but I want to stop finding
this instance of the is-undef-get-undef pattern.
DeltaFile
+4-1llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.cpp
+4-11 files

LLVM/project 45ccbd4llvm/lib/Target/AMDGPU AMDGPUInstructions.td

AMDGPU: Don't pack a build_vector with an undef/poison lane (#211871)

Once ISD::POISON is legal it reaches isel and is treated as canonical, so 
is_canonicalized_2<build_vector> matched build_vector<x, poison> and
selected a v_pack for a don't-care high lane. Avoids regressions in future
patches.

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+7-0llvm/lib/Target/AMDGPU/AMDGPUInstructions.td
+7-01 files

LLVM/project 0f7854fclang/lib/Basic/Targets OSTargets.cpp, clang/test/Preprocessor init-fuchsia.c

[clang][Fuchsia] Add __Fuchsia_Compiler_ABI__ predefine (#211744)

This establishes a new canonical predefine for *-fuchsia targets:
`__Fuchsia_Compiler_ABI__` is set to an integer for the version
number of the Fuchsia Compiler ABI the compiler supports.  The
value will change as appropriate with changes to *-fuchsia target
ABI expectations.  It is not anticipated that the compiler will
support selecting target ABI versions, only the latest as the
canonical target-specific behavior.  Fuchsia Compiler ABI
versions are unrelated to the Fuchsia API levels supported by
Fuchsia systems; newly-built programs may target older API levels
with `-ffuchsia-api-level`, but everything relying on the Fuchsia
Compiler ABI is built and deployed together as an isolated unit.
DeltaFile
+19-0clang/lib/Basic/Targets/OSTargets.cpp
+1-0clang/test/Preprocessor/init-fuchsia.c
+20-02 files

LLVM/project 8a6a039mlir/include/mlir/Dialect/XeGPU/IR XeGPUTypes.td XeGPUOps.td, mlir/lib/Dialect/XeGPU/IR XeGPUOps.cpp CMakeLists.txt

[mlir][xegpu] Allow create_mem_desc from ND memref (#211836)

Relax the create_mem_desc source operand constraint to accept a
statically shaped shared-memory memref of any rank, replacing the
1D/2D-only StaticShared{1,2}DMemRefOf classes with a rank-agnostic
StaticSharedMemRefOf.

Add a verifier requiring the source memref to be contiguous row-major,
update the op documentation, and add valid/invalid lit tests.

assisted-by-claude

Co-authored-by: Claude Opus 4.8 <noreply at anthropic.com>
DeltaFile
+11-0mlir/lib/Dialect/XeGPU/IR/XeGPUOps.cpp
+3-8mlir/include/mlir/Dialect/XeGPU/IR/XeGPUTypes.td
+10-1mlir/test/Dialect/XeGPU/invalid.mlir
+9-0mlir/test/Dialect/XeGPU/ops.mlir
+3-2mlir/include/mlir/Dialect/XeGPU/IR/XeGPUOps.td
+1-0mlir/lib/Dialect/XeGPU/IR/CMakeLists.txt
+37-116 files

LLVM/project e949b65flang/lib/Optimizer/Analysis AliasAnalysis.cpp, flang/test/Analysis/AliasAnalysis alias-analysis-omp-private-copy-region.mlir alias-analysis-omp-private-pointer.mlir

[flang][OpenMP] Fix alias analysis for omp.private copy region block arguments to help inline hlfir.assign to improve time taken in LTO. (#209539)

## Summary

This PR fixes https://github.com/llvm/llvm-project/issues/200922 - a
compile-time regression affecting firstprivate clauses on simple arrays
in OpenMP target regions.

When `InlineHLFIRAssign` checks whether to inline `hlfir.assign`
operations in `omp.private` copy regions, the alias analysis
conservatively returns `MayAlias` for the copy region block arguments
(`%arg0` mold vs `%arg1` private). This prevents inlining and forces a
fallback to `fir.call @_FortranAAssign`, which:

- Pulls in 89 runtime functions via LTO
- Creates 550K+ abstract attributes in OpenMPOpt
- Causes severe compile-time degradation (60%+ increase in some cases)

**Example:**

    [32 lines not shown]
DeltaFile
+50-50flang/test/Integration/OpenMP/parallel-private-reduction-worstcase.f90
+65-0flang/lib/Optimizer/Analysis/AliasAnalysis.cpp
+50-0flang/test/Analysis/AliasAnalysis/alias-analysis-omp-private-copy-region.mlir
+34-0flang/test/Analysis/AliasAnalysis/alias-analysis-omp-private-pointer.mlir
+199-504 files

LLVM/project ba61615.ci/metrics metrics_test.py metrics.py, .github/workflows libcxx-pr-conformance-tests.yaml libcxx-build-and-test.yaml

[libc++] Rename pre-commit CI workflows (#211844)

Since we're expanding libc++'s pre-commit CI to add other types of
tests, (e.g. tools tests, performance tests, etc), it makes sense to be
a bit more precise about what each workflow does, and to use a
consistent pattern across workflow names.

Also, update stale references to old names in the documentation and in
some infrastructure scripts.
DeltaFile
+311-0.github/workflows/libcxx-pr-conformance-tests.yaml
+0-310.github/workflows/libcxx-build-and-test.yaml
+16-16.ci/metrics/metrics_test.py
+30-0.github/workflows/libcxx-pr-check-generated-files.yml
+0-30.github/workflows/libcxx-check-generated-files.yml
+3-3.ci/metrics/metrics.py
+360-3596 files not shown
+366-36512 files

LLVM/project 8676929.github/workflows libcxx-pr-test-tools.yml, libcxx/utils/ci run-buildbot

[libc++][CI] Add a Github workflow to test libc++ tools (#211067)

We have a few scripts under libcxx/utils, and they wouldn't be tested on
a regular basis. As a result, changes to e.g. the build system could
break these scripts, which in turn could break some Github workflows
like the libc++ PR benchmarking workflow.

This patch adds a new `test-tools` configuration to `run-buildbot` which
allows testing these tools locally, and a new dedicated Github workflow
to run it.
DeltaFile
+54-0.github/workflows/libcxx-pr-test-tools.yml
+31-0libcxx/utils/ci/run-buildbot
+85-02 files

LLVM/project 982688dclang/test/OpenMP ompx_attributes_codegen.cpp openmp-read-only-feature.c

clang/AMDGPU: Migrate cc1 tests to subarch triples (5) (#211840)

Rewrite OpenMP cc1 test RUN lines to the new subarch triple form,
dropping the redundant -target-cpu, and regenerate autogenerated CHECK
lines. Tests that intentionally assert the "target-cpu" attribute are
left unchanged.

Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>
DeltaFile
+2-2clang/test/OpenMP/ompx_attributes_codegen.cpp
+2-2clang/test/OpenMP/openmp-read-only-feature.c
+1-1clang/test/OpenMP/metadirective_device_arch_codegen.cpp
+1-1clang/test/OpenMP/metadirective_device_isa_codegen_amdgcn.cpp
+1-1clang/test/OpenMP/target_num_teams_num_threads_attributes.cpp
+1-1clang/test/OpenMP/amdgcn_ldbl_check.cpp
+8-82 files not shown
+10-108 files

LLVM/project 43dbc63llvm/lib/TargetParser AMDGPUTargetParser.cpp, llvm/unittests/TargetParser TargetParserTest.cpp

AMDGPU: Reject unrecognized amdgpu subarch in TargetID parsing (#211866)

A bare "amdgpu" or an unrecognized "amdgpu<x>" both parse to the
amdgpu arch with no subarch; TargetID::parse previously accepted them,
taking a named processor and ignoring the missing subarch.

Reject triples with no subarch, unless it uses the legacy spelling.
This is another workaround for Triple not having a proper unknown value
for subarches.

Co-authored-by: Claude (Opus 4.8) <noreply at anthropic.com>
DeltaFile
+9-0llvm/unittests/TargetParser/TargetParserTest.cpp
+4-0llvm/lib/TargetParser/AMDGPUTargetParser.cpp
+13-02 files

LLVM/project b6c6666llvm/lib/Target/NVPTX NVPTXAsmPrinter.cpp, llvm/test/CodeGen/NVPTX global-cycle.ll global-cycle-alias.ll

[NVPTXAsmPrinter] Allow self-referential device global initializers (#197838)

This change adds support for cyclic device global initializers in NVPTX,
including self-references and references between distinct globals. The
backend’s global-emission ordering walk previously treated every cycle
as an error and aborted with “Circular dependency found in global
variable set.” As a result, valid patterns such as __device__ void
*arr[] = {(void *)"foo", &arr[0]}; were rejected. The NVPTX asm printer
now models initializer dependencies as a graph and emits its strongly
connected components in dependency-first order. Acyclic components are
emitted normally. For cyclic components, it first emits compatible PTX
.extern declarations and then emits the definitions in a valid order.
Cycles that cannot be represented this way, such as cycles containing
only static globals, are still rejected. The forward declarations reuse
the normal definition emitter so their address spaces, alignments,
types, and aggregate layouts match the definitions. Added new tests to
cover self-references, cycles between distinct globals, mixed linkage,
packed aggregates, dependency ordering, and unrepresentable static-only
cycles.
DeltaFile
+235-74llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+79-0llvm/test/CodeGen/NVPTX/global-cycle.ll
+44-0llvm/test/CodeGen/NVPTX/global-cycle-alias.ll
+35-0llvm/test/CodeGen/NVPTX/global-ordering.ll
+15-0llvm/test/CodeGen/NVPTX/packed-aggr.ll
+14-0llvm/test/CodeGen/NVPTX/global-cycle-internal-subcycle.ll
+422-744 files not shown
+454-7510 files

LLVM/project 3b87272llvm/include/llvm/MC MCAsmInfo.h, llvm/lib/MC MCAsmInfo.cpp MCAsmInfoXCOFF.cpp

[MC][NFC] Remove some virtual function from MCAsmInfo (#211858)

The MCAsmInfo vtable is currently 144B (no anchor)/152B (anchor) large
-- and there are 49 of these in an all-target libLLVM.so. Some of these
are not needed or can be easily removed. This removes 5 vtable entries.

Some notes on the remaining functions -- I think this vtable can be
removed entirely without too much effort:

- getStackSection can also be removed, this is ELF-only; unfortunately
  this will require code duplication between AsmPrinter and
  MCELFStreamer.

- getExprForPersonalitySymbol is single-use and two-overrides (Darwin on
  x86-64, AArch64), likely removable.

- shouldOmitSectionDirective has three override modes -- COFF (disallow
  for COMDAT/unique section), AMDGPU (4 .hsa sections), and always-omit
  (NVPTX, SPIRV). This is only called from printSwitchToSection, so COFF

    [20 lines not shown]
DeltaFile
+27-10llvm/lib/MC/MCAsmInfo.cpp
+0-28llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
+1-22llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
+9-10llvm/include/llvm/MC/MCAsmInfo.h
+1-12llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCAsmInfo.cpp
+0-12llvm/lib/MC/MCAsmInfoXCOFF.cpp
+38-948 files not shown
+45-12014 files

LLVM/project 75a1d31llvm/test/CodeGen/AMDGPU amdgcn.bitcast.1024bit.ll bf16.ll

[AMDGPU] revert srl pattern for true16 mode (#208136)

revert https://github.com/llvm/llvm-project/pull/132987.

Revert this patch since it create side effects when register coalescer
join large number of imm `copy`. This patch is on top of
https://github.com/llvm/llvm-project/pull/208045 and share the root
cause
DeltaFile
+6,560-6,119llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.1024bit.ll
+4,715-4,955llvm/test/CodeGen/AMDGPU/bf16.ll
+2,967-2,753llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.512bit.ll
+2,002-1,834llvm/test/CodeGen/AMDGPU/maximumnum.bf16.ll
+2,002-1,834llvm/test/CodeGen/AMDGPU/minimumnum.bf16.ll
+1,072-1,937llvm/test/CodeGen/AMDGPU/flat-atomicrmw-fmin.ll
+19,318-19,432130 files not shown
+54,048-49,958136 files

LLVM/project 044a1d9lldb/source/Plugins/SymbolFile/DWARF SymbolFileWasm.cpp, lldb/test/Shell/SymbolFile/DWARF wasm-declaration-mangled-name.yaml

[lldb] Recover a WebAssembly function's mangled name from its declaration (#211707)

The Wasm "name" section stores only demangled names, so SymbolFileWasm
recovers each function's mangled name from the DWARF and attaches it to
the code symbol.

Currently, it only does so from a defining DIE, matched by address. When
we only have a declaration DIE (e.g. TU compiled without debug info), it
still carries the linkage name, but wouldn't get associated without the
address.

Match a declaration-only DIE to its code symbol by the demangled name
that the name section already carries, and attach the linkage name that
way.

Assisted-by: Claude
DeltaFile
+89-0lldb/test/Shell/SymbolFile/DWARF/wasm-declaration-mangled-name.yaml
+42-3lldb/source/Plugins/SymbolFile/DWARF/SymbolFileWasm.cpp
+131-32 files

LLVM/project 5482f92clang/lib/CodeGen CGOpenMPRuntime.cpp, clang/test/OpenMP target_map_nested_ptr_member_mapper_codegen.cpp

[OpenMP] Propagate PRESENT to pointee entries in mapper codegen

Extend map-type-modifier propagation in emitUserDefinedMapper to the PRESENT
modifier, but only for entries that have an attach ptr (the pointee data, whose
storage differs from the struct's own). A present modifier on the outer clause
must require that pointee to be present on the device.

This is gated on a new PropagatePresentToPointee argument, which Clang sets from
CGM.getLangOpts().OpenMP >= 60. Before 6.0 the present modifier is treated as
not applying to the pointee: the spec committee confirmed the divergence
between the present motion modifier (to/from) and the present map-type modifier
(map) was unintentional, to be fixed as an OpenMP 6.0 erratum. Only propagation
is gated; present written directly in a mapper's own clause applies at all
versions.

A TODO notes PRESENT should also propagate to the struct's own members, which
is blocked while pointer members use PTR_AND_OBJ.

Update the present-check tests to their final 6.0-gated behavior.

    [2 lines not shown]
DeltaFile
+36-11llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+10-17offload/test/mapping/mapper_target_update_present_ptee.c
+14-13offload/test/mapping/mapper_map_mbr_then_present_mbr_ptee.c
+13-4llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+6-9clang/test/OpenMP/target_map_nested_ptr_member_mapper_codegen.cpp
+12-3clang/lib/CodeGen/CGOpenMPRuntime.cpp
+91-576 files

LLVM/project eedb658llvm/lib/Transforms/Scalar ConstraintElimination.cpp, llvm/test/Transforms/ConstraintElimination loops-bottom-tested-pointer-cmps.ll induction-condition-in-loop-exit-latch-counted.ll

[ConstraintElim] use condition from latch in addInfoForInductions. (#210984)

Also use condition in latch to inject %iv <= %B and co into the header,
if the latch condition compares a post-inc IV like %iv + %step != %B.

This allows reasoning about loops that have been rotated before
ConstraintElimination, e.g. during the LTO phase or Swift where the
frontend already rotates loops before generating LLVM IR.

Alive2 Proof for injecting %iv <= B from %iv + %step != %B in latch:
https://alive2.llvm.org/ce/z/pH8Czb

This enables a number of additional simplifications in practice
(https://github.com/dtcxzyw/llvm-opt-benchmark-nightly/pull/736).

It comes with a compile-time impact when doing LTO, as all loops will be
rotated
and will hit the new code path.
* stage1-ReleaseThinLTO: +0.08%

    [9 lines not shown]
DeltaFile
+19-5llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+6-9llvm/test/Transforms/ConstraintElimination/loops-bottom-tested-pointer-cmps.ll
+4-8llvm/test/Transforms/ConstraintElimination/induction-condition-in-loop-exit-latch-counted.ll
+29-223 files

LLVM/project 2ace2c8clang/lib/CodeGen CGOpenMPRuntime.cpp, clang/test/OpenMP target_map_nested_ptr_member_mapper_codegen.cpp declare_mapper_codegen.cpp

[OpenMP][Clang] Enable ATTACH-style maps for mappers.

Track per-entry attach-ptr info (HasAttachPtr) through mapper codegen so that
emitUserDefinedMapper does not add a new outer MEMBER_OF to pointee/combined
entries (which occupy different storage than the struct) or to ATTACH entries.
Clang and the MLIR translator populate the per-entry array in parallel with the
other MapInfosTy arrays.

Address review:
  - Rename MapSkipMemberOfArrayTy to MapHasAttachPtrArrayTy to match the
    HasAttachPtr field it backs.
  - Restructure the emitUserDefinedMapper comment into a bulleted (*)/(**)/(***)
    list keyed to the example entries.
  - Reword the Clang comments: HasAttachPtr marks pointee entries that have a
    base attach-ptr; a combined entry has a base attach-ptr if its constituents
    do; cross-reference emitUserDefinedMapper for the MEMBER_OF rationale.
  - Update the moved present-check tests to their now-correct behavior (the
    attach-style maps make the inbounds present checks pass and remove the
    "explicit extension" errors).

    [2 lines not shown]
DeltaFile
+196-160clang/test/OpenMP/target_map_nested_ptr_member_mapper_codegen.cpp
+68-60clang/test/OpenMP/declare_mapper_codegen.cpp
+56-15llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+65-5clang/lib/CodeGen/CGOpenMPRuntime.cpp
+18-24offload/test/mapping/mapper_enter_data_always_present_ptee.c
+14-26offload/test/mapping/mapper_map_mbr_ptee_then_present_mbr_ptee.c
+417-2909 files not shown
+487-35915 files

LLVM/project 6b5a5b7flang/lib/Lower/OpenMP OpenMP.cpp DataSharingProcessor.cpp, flang/test/Lower/OpenMP metadirective-loop.f90 metadirective-implementation.f90

[flang][OpenMP] Lower DO and SIMD variants in metadirectives

Lower DO, SIMD, and DO SIMD replacement directives selected by a
metadirective. Support standalone and begin/end forms with static or runtime
selection.

A standalone metadirective and its associated loop are represented as sibling
PFT evaluations. For example:

```fortran
!$omp metadirective &
!$omp& when(user={condition(flag)}: do) &
!$omp& otherwise(nothing)
do i = 1, n
  a(i) = i
end do
```

has the following evaluation shape:

    [54 lines not shown]
DeltaFile
+432-6flang/lib/Lower/OpenMP/OpenMP.cpp
+416-0flang/test/Lower/OpenMP/metadirective-loop.f90
+69-8flang/lib/Lower/OpenMP/DataSharingProcessor.cpp
+74-0flang/test/Lower/OpenMP/Todo/metadirective-loop-unstructured.f90
+59-0flang/test/Lower/OpenMP/Todo/metadirective-loop-enclosing-data-environment.f90
+46-1flang/test/Lower/OpenMP/metadirective-implementation.f90
+1,096-1512 files not shown
+1,278-2818 files

LLVM/project 8231fdalldb/include/lldb/Utility FileSpec.h, lldb/source/API SBData.cpp SBFileSpec.cpp

[lldb] Remove ConstString from FileSpec (#211394)

This commit completely removes ConstString from FileSpec, replacing it
with llvm::SmallString instead.

I considered combining the directory and the filename together into one
field, but then it became impossible to distinguish between a
partially-constructed FileSpec's last directory and a fully-constructed
FileSpec's filename.

The sizes of the SmallStrings are somewhat arbitrary. I tested out a few
other configurations on my machine locally and this yielded the best
memory/runtime tradeoffs.

I measured the impact of this change in two ways:
(1) Runtime performance

I measured the runtime impact by using LLDB's statistics with `stat
enable` and `stat dump -f` (forcing the parsing of symbols) for a debug

    [15 lines not shown]
DeltaFile
+30-28lldb/source/Utility/FileSpec.cpp
+6-4lldb/include/lldb/Utility/FileSpec.h
+2-2lldb/source/Target/Statistics.cpp
+1-0lldb/source/API/SBData.cpp
+1-0lldb/source/API/SBFileSpec.cpp
+1-0lldb/source/API/SBLaunchInfo.cpp
+41-349 files not shown
+50-3415 files

LLVM/project de4b1f5clang/lib/Parse ParseDecl.cpp, clang/lib/Sema DeclSpec.cpp

[Clang] Avoid querying tag definitions for invalid DeclSpecs (#210085)

Guard hasTagDefinition() against invalid type-specifier state so
recovery from invalid auto/tag combinations does not assert.
Fixes #210014

---------

Signed-off-by: Osama Abdelkader <osama.abdelkader at gmail.com>
DeltaFile
+7-1clang/lib/Parse/ParseDecl.cpp
+5-0clang/test/SemaCXX/auto-cxx0x.cpp
+1-1clang/lib/Sema/DeclSpec.cpp
+13-23 files

LLVM/project 92c76ablibc/src/stdlib/linux realpath.cpp, libc/test/src/stdlib realpath_test.cpp

[libc][realpath] Follow symlinks
DeltaFile
+48-38libc/src/stdlib/linux/realpath.cpp
+26-0libc/test/src/stdlib/realpath_test.cpp
+74-382 files

LLVM/project 4d549d9clang/test/OpenMP target_map_nested_ptr_member_mapper_codegen.cpp target_map_array_section_of_structs_with_nested_mapper_codegen.cpp, llvm/lib/Frontend/OpenMP OMPIRBuilder.cpp

[OpenMP] Propagate ALWAYS/DELETE/CLOSE map-type modifiers to mapper entries

When a map clause uses a user-defined mapper, the map-type-modifying bits
(ALWAYS, DELETE, CLOSE) on the outer clause must apply to each map the mapper
inserts (OpenMP 6.0:281:34). Propagate them in emitUserDefinedMapper by OR-ing
the imported modifier bits into each pushed component, except ATTACH entries
(ATTACH|ALWAYS is reserved for attach(always) and the other bits are
meaningless for ATTACH).

PRESENT is intentionally not propagated here yet (a TODO notes it is handled in
a follow-on, since it requires distinguishing pointee entries from the struct's
own storage).

Add tests:
  - offload mapper_map_always_from.c: ALWAYS forces a member copy-back that the
    ref count would otherwise suppress.
  - offload Fortran target-custom-mapper-delete.f90: DELETE is propagated to the
    mapper's member entry so it is removed by target exit data.

Co-Authored-By: Claude Opus 4.8 <noreply at anthropic.com>
DeltaFile
+152-136clang/test/OpenMP/target_map_nested_ptr_member_mapper_codegen.cpp
+87-77clang/test/OpenMP/target_map_array_section_of_structs_with_nested_mapper_codegen.cpp
+87-77clang/test/OpenMP/target_map_array_of_structs_with_nested_mapper_codegen.cpp
+50-0offload/test/offloading/fortran/target-custom-mapper-delete.f90
+38-2llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+39-0offload/test/mapping/mapper_map_always_from.c
+453-2925 files not shown
+501-32211 files

LLVM/project 86c2f95llvm/include/llvm/CodeGen BreakFalseDeps.h, llvm/lib/Target/AArch64 AArch64.h SVEShuffleOpts.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+8-5llvm/lib/Target/AArch64/AArch64.h
+3-3llvm/lib/Target/AArch64/SVEShuffleOpts.cpp
+3-2llvm/lib/Target/Lanai/Lanai.h
+3-1llvm/lib/Target/AArch64/AArch64PassRegistry.def
+2-1llvm/lib/Target/MSP430/MSP430.h
+1-1llvm/include/llvm/CodeGen/BreakFalseDeps.h
+20-135 files not shown
+25-1811 files