LLVM/project 4e4bdb1llvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/Target/ARM ARMSubtarget.cpp

ARM: Mark more generic libgcc functions as available

Generic libgcc/compiler-rt functions coexist with aeabi variants
(e.g., __divsi3  and __aeabi_idiv) according to my reading of the
build. At least in compiler-rt, they are aliases (such that I'm not sure
what the point of ever emitting the __aeabi name is).

They were previously removed from the available set on AEABI+AAPCS targets
to force selection of the preferred __aeabi_* variants, back when
only one implementation per libcall could be recorded.

Now that multiple implementations can be available per libcall, stop hiding
the generics and select the __aeabi_* variant explicitly as the preferred
implemntation. This reduces the number of special cases to consider for
future libcalls info improvements.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+62-0llvm/lib/Target/ARM/ARMSubtarget.cpp
+1-7llvm/include/llvm/IR/RuntimeLibcalls.td
+63-72 files

LLVM/project c685715llvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/Target/Hexagon HexagonSubtarget.h HexagonSubtarget.cpp

Hexagon: Stop excluding some generic compiler-rt functions from libcalls

RuntimeLibcalls should indicate any function that exists and is callable.
Historically the list of library functions was conflated with the library
functions which should be used, so the library definition was complicated
by excluding the overridden cases. My reading of the compiler-rt sources is
that the generically named functions are built alongside the __hexagon
prefixed variants. e.g., __divsi3 and __hexagon_divsi3 both exist.

It will simplify future libcall work the fewer special case target exclusions
there are, so allow the functions to be defined and apply the selection
preference for the __hexagon prefixed versions in LibcallLoweringInfo.

I do question why compiler-rt is built this way; why doesn't the hexagon
just replace the standard entrypoint names with the target implementations?

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+29-0llvm/lib/Target/Hexagon/HexagonSubtarget.cpp
+5-4llvm/include/llvm/IR/RuntimeLibcalls.td
+3-0llvm/lib/Target/Hexagon/HexagonSubtarget.h
+37-43 files

LLVM/project 6069ad1llvm/test/TableGen RuntimeLibcallEmitter-multiple-impls.td

reduce-comment
DeltaFile
+2-4llvm/test/TableGen/RuntimeLibcallEmitter-multiple-impls.td
+2-41 files

LLVM/project f3159b9llvm/test/Transforms/SLPVectorizer/RISCV external.ll

[SLP] Precommit test for deferred extracts (#212658)

Tests for #211680.
DeltaFile
+103-0llvm/test/Transforms/SLPVectorizer/RISCV/external.ll
+103-01 files

LLVM/project 1d894edllvm/test/MC/MachO target-triple.s target-triple-padding.s, llvm/test/Object/Inputs macho-invalid-target-triple-name_toobig.yaml macho-invalid-target-triple-name_offset-toosmall.yaml

[llvm][macho][test] Fix failing target triple tests (#212876)

`llvm-mc -triple arm64-*` requires aarch64-registered-target.
DeltaFile
+1-1llvm/test/Object/Inputs/macho-invalid-target-triple-name_toobig.yaml
+1-1llvm/test/Object/Inputs/macho-invalid-target-triple-name_offset-toosmall.yaml
+2-0llvm/test/MC/MachO/target-triple.s
+2-0llvm/test/MC/MachO/target-triple-padding.s
+6-24 files

LLVM/project 40e84f3llvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/Target/MSP430 MSP430Subtarget.cpp

MSP430: Mark more generic libgcc functions as available (#210962)

The generic soft-float, conversion, comparison and integer helper
routines (__addsf3, __divli's __divsi3, __ashlsi3, ...) exist in the MSP430
libgcc port alongside the preferred __mspabi_* variants. They were previously
removed to force selection of the __mspabi_* names, back when only one
implementation per libcall could be recorded.

Stop hiding them: only __lshrsi3 stays excluded, since the MSP430 libgcc
port provides the 32-bit logical right shift solely under __mspabi_srll and
never defines a generic __lshrsi3.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+67-0llvm/lib/Target/MSP430/MSP430Subtarget.cpp
+4-11llvm/include/llvm/IR/RuntimeLibcalls.td
+71-112 files

LLVM/project 485d097llvm/test/TableGen RuntimeLibcallEmitter-conflict-warning.td RuntimeLibcallEmitter-multiple-impls.td, llvm/utils/TableGen/Basic RuntimeLibcallsEmitter.cpp

RuntimeLibcalls: Emit all available impls for a libcall, not just one

The intent is RuntimeLibcalls should represent all functions that are
callable from the module, which may have contextually selectable alternatives.
Previously we had this warning since there was no mechanism to select which
one you want, and as a workaround the library call sets avoided adding the
variants which should nto be selected.

Now targets can use initLibcallLoweringInfo, so remove the warning to unblock
more libcall cleanups. Eventually initLibcallLoweringInfo should also be tablegen
driven.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+104-0llvm/test/TableGen/RuntimeLibcallEmitter-multiple-impls.td
+0-101llvm/test/TableGen/RuntimeLibcallEmitter-conflict-warning.td
+3-25llvm/utils/TableGen/Basic/RuntimeLibcallsEmitter.cpp
+107-1263 files

LLVM/project ba10a6allvm/include/llvm/IR RuntimeLibcalls.td, llvm/lib/Target/MSP430 MSP430Subtarget.cpp

Revert "MSP430: Mark more generic libgcc functions as available (#210962)"

This reverts commit a7543e65d6b24ff4ea2d8bee1cc676980f4bf76c.
DeltaFile
+0-67llvm/lib/Target/MSP430/MSP430Subtarget.cpp
+11-4llvm/include/llvm/IR/RuntimeLibcalls.td
+11-712 files

LLVM/project b9afaf2clang/test/Driver invalid-target-id.cl openmp-invalid-target-id.c

clang/AMDGPU: Add missing driver tests for invalid target names (#212451)

Make sure -march and -mcpu both error for nonoffload and for
-Xopenmp-target arguments. Defends against regression I almost
introduced.
DeltaFile
+6-0clang/test/Driver/openmp-invalid-target-id.c
+4-0clang/test/Driver/invalid-target-id.cl
+10-02 files

LLVM/project 8c4dce6clang/lib/CIR/CodeGen CIRGenBuiltin.cpp, clang/test/CIR/CodeGen arithmetic-fence-builtin.c

[CIR] Implement non-reassoc __arithmetic_fence (#211915)

This builtin is a no-op (just a load/store) if we don't have reassociate
turned on. This patch implements the 'easy' path to unblock libraries
that use this builtin.
DeltaFile
+80-0clang/test/CIR/CodeGen/arithmetic-fence-builtin.c
+13-0clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp
+93-02 files

LLVM/project 8a50e79clang/lib/CIR/Dialect/Transforms FlattenCFG.cpp

[CIR] Switch FlattenCFGPass to no longer use greedy manager. (#211368)

This showed up doing a self-build of MLIR's Presburger
IntegerRelation.cpp, which is a bit pathalogical. It resulted in us
doing a lot of rewrite patterns during flatten, taking about 20s. After
this patch, we're down to sub-1s spent doing that.

This is because applyOpPatternsGreedily was re-enqueing every child
opops every time we modified anything nearby. This caused us in cases
where there were operations that were visited TONS of times just because
a parent got modified.

This patch replaces this with a very simple inside-out iteration of
these operations. The recent loop-op 'cleanup' flattening modification
necessitates us re-visiting these sometimes (hence the loop).

This patch is effectively 'NFC' other than build time, so there really
isn't a test I could write.


    [5 lines not shown]
DeltaFile
+70-16clang/lib/CIR/Dialect/Transforms/FlattenCFG.cpp
+70-161 files

LLVM/project 045fc45lldb/test/API/commands/expression/expr-with-fork TestExprWithFork.py

[lldb] Fix flaky test_expr_with_fork_trap by increasing expression timeout (#212574)

The test evaluates an expression that forks a child which returns
normally (triggering SIGTRAP from the JIT wrapper trap at _start). The
parent blocks in waitpid() until the detached child terminates. With the
default 250ms expression timeout, the kernel sometimes doesn't schedule
the detached child fast enough, causing waitpid() to still be blocking
when the timeout fires and the expression gets interrupted.

Set a 5-second expression timeout to give the kernel ample time to
schedule the detached child process.
DeltaFile
+9-2lldb/test/API/commands/expression/expr-with-fork/TestExprWithFork.py
+9-21 files

LLVM/project 13834eeclang/include/clang/CIR/Dialect/IR CIRDialect.h CIROps.td, clang/include/clang/CIR/Interfaces CIROpInterfaces.td

[CIR] Introduce fenv attribute for strict fp handling (#211144)

This introduces a new CIR attribute that will be used to describe
floating-point environment assumptions and restrictions, allowing for
general modeling of floating-point environment access. A new interface
is also introduced to simplify handling of default settings when the
attribute or one of its optional components is not present.

This patch adds the attribute and interface to FPBinaryOp,
BinaryFPToFPBuiltinOp, and UnaryFPToFPBuiltin. Support for generating
operations with this attribute and lowering them to the LLVM dialect
will be added in a future change.

Assisted-by: Cursor / claude-opus-4.8
DeltaFile
+136-0clang/unittests/CIR/FenvOpTest.cpp
+101-0clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+60-10clang/include/clang/CIR/Dialect/IR/CIROps.td
+68-0clang/test/CIR/IR/fenv.cir
+41-0clang/include/clang/CIR/Interfaces/CIROpInterfaces.td
+39-0clang/include/clang/CIR/Dialect/IR/CIRDialect.h
+445-102 files not shown
+447-108 files

LLVM/project ce0c2f8clang/lib/Sema HLSLBuiltinTypeDeclBuilder.h SemaHLSL.cpp, clang/test/SemaHLSL/Availability avail-diag-default-compute.hlsl

[HLSL] Add availability attributes to texture sample methods that require implicit derivatives (#212846)

This PR adds availability attributes to texture sample methods that
require implicit derivatives (fixes
https://github.com/llvm/llvm-project/issues/198885)

To make these availability attributes actually get checked,
`DiagnoseHLSLAvailability::HandleFunctionOrMethodRef` in `SemaHLSL.cpp`
has been changed to check availability attributes regardless of whether
or not a function has a body/definition (fixes
https://github.com/llvm/llvm-project/issues/212842).

Assisted by: Claude Opus 5
DeltaFile
+98-0clang/test/SemaHLSL/Resources/Textures-derivative-availability.hlsl
+56-5clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
+6-11clang/lib/Sema/SemaHLSL.cpp
+8-0clang/test/SemaHLSL/Availability/avail-diag-default-compute.hlsl
+1-0clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.h
+169-165 files

LLVM/project d982be9llvm/lib/Target/AMDGPU SIInstrInfo.cpp, llvm/test/CodeGen/AMDGPU swp-amdgpu-pipeline-regpressure-retry.mir

[AMDGPU] Limit register pressure of pipelined loops

Opt AMDGPU into the generic MachinePipeliner register-pressure detector via
shouldLimitRegPressure(), and supply an occupancy-aware verdict in
isScheduleRegPressureTooHigh(): reject a schedule whose SGPR or VGPR/AGPR
pressure would drop the kernel below its target occupancy, or exceed a
register class's addressability cap. On gfx90a+ VGPRs and AGPRs share one
register file, so their combined footprint is bounded together. These match
the limits GCNSchedStrategy enforces.
DeltaFile
+175-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-regpressure-retry.mir
+46-1llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+221-12 files

LLVM/project 71654ddllvm/include/llvm/CodeGen TargetInstrInfo.h, llvm/lib/CodeGen MachinePipeliner.cpp

[MachinePipeliner] Add PipelinerLoopInfo hooks to reuse the reg-pressure detector

The generic MachinePipeliner register-pressure detector (added in #74807)
was only reachable via the global -pipeliner-register-pressure flag, which
cannot be enabled per-target, and it judges pressure against generic
per-pressure-set limits. Add two PipelinerLoopInfo hooks so a target can
reuse that detector on its own terms:

- shouldLimitRegPressure(): A target can opt the loop into the detector without
  the global flag.
- isScheduleRegPressureTooHigh(MaxSetPressure): let the target replace the
  detector's generic per-pressure-set limit check with its own verdict, or
  return nullopt to keep that check.

Both hooks default to preserving current behavior, so targets that do not
override them are unaffected.

Exercised by the AMDGPU adoption in the following commit.
DeltaFile
+23-8llvm/lib/CodeGen/MachinePipeliner.cpp
+14-0llvm/include/llvm/CodeGen/TargetInstrInfo.h
+37-82 files

LLVM/project 3d32ea2llvm/include/llvm/CodeGen TargetInstrInfo.h, llvm/lib/CodeGen MachinePipeliner.cpp

[AMDGPU] Raise the MachinePipeliner MII cap via a target hook

The pipeliner rejects any loop whose minimum initiation interval (MII)
exceeds -pipeliner-max-mii, default 27. That is far too low for real
AMDGPU loops: resource-bound GEMM/attention bodies routinely have an MII
well above 27 and are dropped before scheduling even starts.

Add a PipelinerLoopInfo::getMaxMII() hook so a target can raise the cap,
and override it to 256 for AMDGPU. The generic default is unchanged, and
an explicit -pipeliner-max-mii still takes precedence.

The cap of 256 is chosen from the II distributions of two AMDGPU
workloads.

Composable Kernels:
  II range   count    pct
    0- 24     2305   36.7%
   25- 49     1681   26.8%
   50- 99     1582   25.3%

    [13 lines not shown]
DeltaFile
+9-4llvm/lib/CodeGen/MachinePipeliner.cpp
+5-6llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-max-mii.ll
+5-0llvm/include/llvm/CodeGen/TargetInstrInfo.h
+4-0llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+23-104 files

LLVM/project b0fea17llvm/lib/Target/AMDGPU SIInstrInfo.cpp, llvm/test/CodeGen/AMDGPU swp-amdgpu-pipeline-unpipeline-compare.mir swp-amdgpu-pipeline-loop-carried-mem.mir

[AMDGPU] Add MachinePipeliner support for AMDGPU

Implement the target hooks to enable MachinePipeliner for AMDGPU. The
pass is off by default and can be enabled with -amdgpu-enable-pipeliner
at -O2 and above.

Only uniform, single-basic-block counted loops with a scalar (SCC)
back-edge are pipelined; loops with a divergent (VCC/EXEC) back-edge, or
containing calls or inline asm, are rejected. Code is generated by the
default modulo schedule expander (DFA, window scheduler, and MVE
expansion are disabled for AMDGPU).

Validated on gfx942 and gfx950 with Composable Kernel and Triton workloads.
DeltaFile
+177-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-minimal.ll
+134-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-epilog-phi.mir
+78-0llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+71-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-gen-structure.mir
+58-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-loop-carried-mem.mir
+48-0llvm/test/CodeGen/AMDGPU/swp-amdgpu-pipeline-unpipeline-compare.mir
+566-014 files not shown
+952-020 files

LLVM/project ec27629clang/include/clang/CIR/Dialect/IR CIROps.td, clang/lib/CIR/CodeGen CIRGenFunction.cpp

[CIR] Defer indirect goto resolution to GotoSolver (#206176)

A computed `goto *p` placed inside a nested scope -- an if or a loop
body --
made CIRGen produce invalid IR that the region verifier rejected with
"reference to block defined in another region", aborting the compile.
Regular
`goto` avoids this because CIRGen emits a symbolic
`cir.goto` that references no block and is later resolved into a
`cir.br` by
GotoSolver, which runs after FlattenCFG has merged the nested scopes
into one
region. Indirect goto skipped that indirection: `emitIndirectGotoStmt`
built
a real indirect-branch block during CIRGen and branched to it from
inside the
nested region, and `finishIndirectBranch` wired the `cir.indirect_br`
successors at the end of the function -- both while the scopes were
still

    [29 lines not shown]
DeltaFile
+110-0clang/test/CIR/CodeGen/goto-indirect-nested.c
+68-21clang/lib/CIR/Dialect/Transforms/GotoSolver.cpp
+16-36clang/test/CIR/CodeGen/label-values.c
+0-46clang/lib/CIR/CodeGen/CIRGenFunction.cpp
+29-0clang/include/clang/CIR/Dialect/IR/CIROps.td
+28-0clang/test/CIR/Transforms/goto_solver.cir
+251-1039 files not shown
+306-17915 files

LLVM/project 39aca64llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer VecUtils.h, llvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp

Pass Claimed by ref to getNextUserBundles

A user should not be claimed by multiple successful
bundles. Added a test for this.
DeltaFile
+60-7llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+3-3llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+3-1llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+2-1llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/VecUtils.h
+68-124 files

LLVM/project 30f0db6llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

Add 3-way test to check for consecutive matching
DeltaFile
+45-0llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+45-01 files

LLVM/project 1b7b2e7llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

Remove stores
DeltaFile
+34-207llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+34-2071 files

LLVM/project ce54474llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.h, llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp

[SBVec] Refactor BottomUpVec pass for clarity and maintainability

- Corrected comments to clarify the direction of def-use and use-def chains.
- Changed the initialization of the SchedDirection variable to improve clarity.
- Updated documentation in vectorizeRec() to better describe the purpose of UserBndl.
- Removed outdated TODO comment regarding top-down vectorization scheduling.
DeltaFile
+5-4llvm/include/llvm/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.h
+1-6llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+6-102 files

LLVM/project 345444allvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp, llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp

[SBVec] Add top-down vectorization to the unified Sandbox Vectorizer

Extend the Sandbox Vectorizer's `bottom-up-vec` pass so a single
implementation can vectorize in either direction, and add the top-down
strategy that walks def-use chains forward from a seed.

Direction selection
--------------------
The pass direction is chosen from the Region's auxiliary pass argument:
"bottom-up" (or empty, the default) and "top-down" map onto a
SchedDirection, and any other value is rejected with a fatal usage error.
The vectorizer always runs in the same direction as the scheduler.

Top-down traversal
------------------
Bottom-up starts from a seed slice (e.g. stores to consecutive addresses)
and recurses into operands. Top-down instead starts from a seed of
consecutive loads and recurses into *users*:


    [32 lines not shown]
DeltaFile
+441-0llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+229-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/VecUtilsTest.cpp
+90-27llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+79-0llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+68-9llvm/test/Transforms/SandboxVectorizer/pack.ll
+68-0llvm/test/Transforms/SandboxVectorizer/external_uses.ll
+975-362 files not shown
+1,017-488 files

LLVM/project c02362fllvm/lib/Transforms/Vectorize/SandboxVectorizer VecUtils.cpp, llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

[SBVec] Track claimed users across bundles
DeltaFile
+38-13llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+13-3llvm/lib/Transforms/Vectorize/SandboxVectorizer/VecUtils.cpp
+51-162 files

LLVM/project 5b9e622llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes BottomUpVec.cpp, llvm/test/Transforms/SandboxVectorizer topdown_vec.ll

3 element tests

- nits
DeltaFile
+130-5llvm/test/Transforms/SandboxVectorizer/topdown_vec.ll
+0-4llvm/lib/Transforms/Vectorize/SandboxVectorizer/Passes/BottomUpVec.cpp
+130-92 files

LLVM/project e6c5169llvm/lib/Transforms/Vectorize/SandboxVectorizer DependencyGraph.cpp, llvm/unittests/Transforms/Vectorize/SandboxVectorizer DependencyGraphTest.cpp

[SandboxIR] Fix notifyEraseInstr to skip scheduled neighbors

Guard both loops with !PredN->scheduled() / !SuccN->scheduled() so
scheduled neighbors are left untouched, and add a unit test that erases
a node with one scheduled and one unscheduled predecessor to cover the
fix.
DeltaFile
+43-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/DependencyGraphTest.cpp
+4-2llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+47-22 files

LLVM/project e10b58fllvm/lib/Target/AMDGPU VOP3PInstructions.td AMDGPUTargetTransformInfo.cpp, llvm/lib/Target/AMDGPU/Utils AMDGPUBaseInfo.cpp

[AMDGPU] Duplicate packed fp32 instructions

These have different semantics on gfx9 and gfx12 with respect to
scalar operands.
DeltaFile
+21-9llvm/lib/Target/AMDGPU/SIInstructions.td
+9-9llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+7-7llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+9-4llvm/lib/Target/AMDGPU/VOP3PInstructions.td
+6-6llvm/test/CodeGen/AMDGPU/bug-pk-f32-imm-fold.mir
+5-5llvm/test/CodeGen/AMDGPU/coexec-sched-effective-stall.mir
+57-409 files not shown
+85-5415 files

LLVM/project a14ac6fllvm/lib/Transforms/Vectorize/SandboxVectorizer DependencyGraph.cpp, llvm/unittests/Transforms/Vectorize/SandboxVectorizer DependencyGraphTest.cpp

[SandboxIR] Fix notifyEraseInstr to skip scheduled neighbors

Guard both loops with !PredN->scheduled() / !SuccN->scheduled() so
scheduled neighbors are left untouched, and add a unit test that erases
a node with one scheduled and one unscheduled predecessor to cover the
fix.
DeltaFile
+43-0llvm/unittests/Transforms/Vectorize/SandboxVectorizer/DependencyGraphTest.cpp
+4-2llvm/lib/Transforms/Vectorize/SandboxVectorizer/DependencyGraph.cpp
+47-22 files

LLVM/project 8e564ecllvm/include/llvm/Frontend/HLSL SemanticSignatures.h, llvm/include/llvm/Support DXILABI.h

[HLSL] Add in-memory representation of Semantic Signatures (#209907)

Defines the `SemanticSignatureElement` struct in
`llvm/Frontend/HLSL/SemanticSignatures` to represent a semantic
signature in-memory for use during packing and metadata
construction/parsing.

Adds unit testing of the conversion.

Resolves: https://github.com/llvm/llvm-project/issues/204878

Assisted by: Claude Opus 4.8
DeltaFile
+495-0llvm/unittests/Frontend/HLSLSemanticSignatureMetadataTest.cpp
+202-0llvm/lib/Frontend/HLSL/SemanticSignatures.cpp
+98-0llvm/include/llvm/Frontend/HLSL/SemanticSignatures.h
+1-0llvm/unittests/Frontend/CMakeLists.txt
+1-0llvm/lib/Frontend/HLSL/CMakeLists.txt
+1-0llvm/include/llvm/Support/DXILABI.h
+798-06 files