LLVM/project 29fda2cllvm/lib/Target/ARM ARMInstrInfo.td ARMInstrNEON.td, llvm/test/CodeGen/ARM fp16-fusedMAC.ll fusedMAC.ll

ARM: Form fused VFMA/VFMS from the contract flag (#221340)

Select the fused VFMA/VFMS/VFNMA/VFNMS from the per-node contract
fast-math flag instead of the global AllowFPOpFusion == Fast. This is one of the
few remaining consumers of the TargetOption field.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+132-30llvm/test/CodeGen/ARM/cortex-a57-misched-vfma.ll
+107-28llvm/test/CodeGen/ARM/fusedMAC.ll
+22-26llvm/test/CodeGen/ARM/fp16-fusedMAC.ll
+22-22llvm/lib/Target/ARM/ARMInstrVFP.td
+13-11llvm/lib/Target/ARM/ARMInstrNEON.td
+19-0llvm/lib/Target/ARM/ARMInstrInfo.td
+315-1171 files not shown
+317-1237 files

LLVM/project 3dfe0cbclang/test/CIR/CodeGenHIP amdgcnspirv-kernel.hip

fix: Check HIP SPIR-V version metadata after lowering
DeltaFile
+3-0clang/test/CIR/CodeGenHIP/amdgcnspirv-kernel.hip
+3-01 files

LLVM/project a484075clang/lib/CIR/Lowering/DirectToLLVM LowerToLLVMOpenCLMetadata.h LowerToLLVM.cpp, clang/test/CIR/CodeGenOpenCL version.cl

[CIR][OpenCL] Lower OpenCL language version metadata to LLVM dialect

Propagate CIR OpenCL language version module attributes as LLVM dialect named metadata before LLVM IR translation.

Assisted-by: Codex / GPT-5.6 Sol
DeltaFile
+43-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVMOpenCLMetadata.cpp
+16-0clang/test/CIR/CodeGenOpenCL/version.cl
+16-0clang/test/CIR/Lowering/opencl-version-metadata.cir
+2-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVMOpenCLMetadata.h
+2-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+79-05 files

LLVM/project 495a2e4clang/lib/CIR/CodeGen CIRGenModule.cpp, clang/lib/CodeGen CodeGenModule.cpp

fix: Supply the HIP SPIR-V version only for metadata emission

Fix the assertion exposed by PR #214246 under the version invariant from PR #219687. Supply OpenCL 2.0 in classic CodeGen and CIRGen without changing HIP language options or enabling OpenCL-only Sema restrictions.

Assisted-by: Codex / GPT-6
DeltaFile
+8-0clang/test/CodeGenHIP/hipspv-kernel.cpp
+8-0clang/test/SemaHIP/atomic-init.hip
+4-2clang/lib/CIR/CodeGen/CIRGenModule.cpp
+3-1clang/lib/CodeGen/CodeGenModule.cpp
+2-0clang/test/CIR/CodeGenHIP/amdgcnspirv-kernel.hip
+25-35 files

LLVM/project 8d6baedclang/lib/CIR/CodeGen CIRGenModule.h CIRGenModule.cpp, clang/test/CIR/CodeGenOpenCL version.cl

[CIR][OpenCL] Emit OpenCL language version metadata in CIR

Emit OpenCL and C++ for OpenCL language version attributes from CIRGen. Preserve the compatible OpenCL version and the C++ for OpenCL version separately so later lowering does not infer one from the other.

Assisted-by: Codex / GPT-5.6 Sol
DeltaFile
+15-0clang/test/CIR/CodeGenOpenCL/version.cl
+13-0clang/lib/CIR/CodeGen/CIRGenModule.cpp
+4-0clang/test/CodeGenCUDASPIRV/kernel-cc.cu
+1-0clang/lib/CIR/CodeGen/CIRGenModule.h
+33-04 files

LLVM/project fa0a4e1clang/lib/CIR/Dialect/IR CIRDialect.cpp

fix: separate CIR attribute dispatch from OpenCL verification
DeltaFile
+20-8clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+20-81 files

LLVM/project b8a76acclang/include/clang/CIR/Dialect/IR CIRDialect.td CIROpenCLAttrs.td, clang/lib/CIR/Dialect/IR CIROpenCLAttrs.cpp CIRDialect.cpp

[CIR][OpenCL] Add OpenCL language version module attributes

Add structured CIR module attributes for OpenCL and C++ for OpenCL language versions. Verify their module-level placement and version components so lowering can consume explicit source-language version state.

Assisted-by: Codex / GPT-5.6 Sol
DeltaFile
+76-0clang/lib/CIR/Dialect/IR/CIRDialect.cpp
+73-0clang/test/CIR/IR/invalid-version.cir
+28-0clang/include/clang/CIR/Dialect/IR/CIROpenCLAttrs.td
+19-0clang/test/CIR/IR/version.cir
+15-0clang/lib/CIR/Dialect/IR/CIROpenCLAttrs.cpp
+5-0clang/include/clang/CIR/Dialect/IR/CIRDialect.td
+216-01 files not shown
+219-17 files

LLVM/project 446d026clang/lib/CodeGen BackendUtil.cpp, llvm/include/llvm/MC MCTargetOptions.h

MC: Move BinutilsVersion from TargetOptions to MCTargetOptions

BinutilsVersion has no codegen use and only used by MCAsmInfo to check
ELF assembler features.

Co-authored-by: Claude (claude-opus-4.8) <noreply at anthropic.com>
DeltaFile
+10-0llvm/lib/MC/MCTargetOptions.cpp
+0-9llvm/lib/Target/TargetMachine.cpp
+8-0llvm/include/llvm/MC/MCTargetOptions.h
+3-2clang/lib/CodeGen/BackendUtil.cpp
+0-4llvm/include/llvm/Target/TargetOptions.h
+2-2llvm/tools/llc/llc.cpp
+23-173 files not shown
+25-229 files

LLVM/project 0c94a97libcxx/include/__concepts common_with.h

[libc++][NFC] Avoid empty namespace in `<__concepts/common_with.h>` (#221407)

...in pre-C++20 modes. This fixes complaining from clang-tidy checks in
CI.
DeltaFile
+4-4libcxx/include/__concepts/common_with.h
+4-41 files

LLVM/project d74068dllvm/lib/Transforms/IPO OpenMPOpt.cpp, llvm/test/Transforms/OpenMP callback_parallel_regions.ll spmdization_no_guarding_two_reaching_kernels.ll

[OpenMPOpt] Ask the runtime how many of a block's threads can be workers

The custom state machine gates a thread on InitCB < BlockHwSize - WarpSize,
reconstructing the number of worker threads from the block size on the
assumption that the main thread occupies a whole warp above them. The DeviceRTL
already computes that number, in mapping::getMaxTeamThreads(), and its own
generic state machine gates on it in shouldEnterStateMachine(). Export it as
__kmpc_get_max_team_threads() and call that instead, so the compiler's state
machine and the runtime's agree by construction rather than by arithmetic that
has to be kept in step with the launch geometry.

This is NFC here: getMaxTeamThreads() in generic mode is BlockSize - WarpSize,
the same three instructions folded into one call. It is not NFC for a toolchain
whose launch geometry differs. In ROCm, CGOpenMPRuntimeGPU starts a single extra
thread rather than a warp -- "Only one additional thread is started, not an
entire warp" -- so thread_limit(1024) on a 64-lane target launches 961 threads
and the runtime reports 960 workers, while the state machine's own arithmetic
says 961 - 64 = 897. The threads in between are in neither group: the state
machine returns immediately for them, and the parallel region still hands them

    [12 lines not shown]
DeltaFile
+32-64llvm/test/Transforms/OpenMP/spmdization.ll
+24-48llvm/test/Transforms/OpenMP/custom_state_machines.ll
+22-30llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+8-16llvm/test/Transforms/OpenMP/spmdization_indirect.ll
+6-12llvm/test/Transforms/OpenMP/spmdization_no_guarding_two_reaching_kernels.ll
+4-8llvm/test/Transforms/OpenMP/callback_parallel_regions.ll
+96-1784 files not shown
+113-18310 files

LLVM/project ec06ae2llvm/include/llvm/Frontend/OpenMP OMPKinds.def, llvm/lib/Transforms/IPO OpenMPOpt.cpp

[OpenMPOpt] Look inside the callbacks the loop runtime functions are handed

The __kmpc_{distribute_,for_,distribute_for_}static_loop_* functions receive the
loop body as a callback, so a parallel region written inside that body is
reachable from the kernel through the runtime call. AAKernelInfo could not see
that, and recorded the call as reaching an unknown parallel region. A kernel
using these functions therefore always got a worker state machine whose only
option was to indirectly call whatever work function it was handed.

Describe the callback argument of each of these functions in OMPKinds.def and
attach the corresponding !callback metadata in OpenMPOpt, then fold the
callback's AAKernelInfo state into the caller's. The state machine can now
dispatch directly to the regions the loop body actually reaches. Relax the two
"more than one callee means give up" checks for functions carrying !callback,
since the callback edge is a second edge by construction and is analyzable.

The conservative unknown-region record is kept for the case that motivated it, a
callback we only see a declaration of.


    [39 lines not shown]
DeltaFile
+239-0llvm/test/Transforms/OpenMP/callback_parallel_regions.ll
+99-10llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+51-0llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+48-0offload/test/offloading/fortran/target-teams-distribute-nested-parallel-do.f90
+437-104 files

LLVM/project b59cce1clang-tools-extra/docs/clang-tidy/checks/readability container-size-empty.md duplicate-include.md

[clang-tidy][docs] Rewrite readability check docs to Markdown [1/5]
DeltaFile
+82-85clang-tools-extra/docs/clang-tidy/checks/readability/enum-initial-value.md
+62-67clang-tools-extra/docs/clang-tidy/checks/readability/else-after-return.md
+41-39clang-tools-extra/docs/clang-tidy/checks/readability/ambiguous-smartptr-reset-call.md
+31-33clang-tools-extra/docs/clang-tidy/checks/readability/avoid-return-with-void-value.md
+28-29clang-tools-extra/docs/clang-tidy/checks/readability/duplicate-include.md
+25-27clang-tools-extra/docs/clang-tidy/checks/readability/container-size-empty.md
+269-2804 files not shown
+351-36710 files

LLVM/project 4a3ad32clang-tools-extra/docs/clang-tidy/checks/readability ambiguous-smartptr-reset-call.rst ambiguous-smartptr-reset-call.md

[clang-tidy][docs] Rename readability check docs to Markdown [1/5]
DeltaFile
+0-111clang-tools-extra/docs/clang-tidy/checks/readability/enum-initial-value.rst
+111-0clang-tools-extra/docs/clang-tidy/checks/readability/enum-initial-value.md
+0-90clang-tools-extra/docs/clang-tidy/checks/readability/else-after-return.rst
+90-0clang-tools-extra/docs/clang-tidy/checks/readability/else-after-return.md
+0-62clang-tools-extra/docs/clang-tidy/checks/readability/ambiguous-smartptr-reset-call.rst
+62-0clang-tools-extra/docs/clang-tidy/checks/readability/ambiguous-smartptr-reset-call.md
+263-26314 files not shown
+534-53420 files

LLVM/project 6143832clang/include/clang/Basic CodeGenOptions.h, llvm/include/llvm/Support CodeGen.h

WebAssembly: Introduce ExceptionHandling::EmscriptenEH model

Add a dedicated EmscriptenEH exception model so the control uses
the standard exception model control, instead of relying on a backend
specific cl::opt. This will later migrate to a module flag and
remove -enable-emscripten-cxx-exceptions

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+20-12llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+11-6llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
+8-7llvm/include/llvm/Support/CodeGen.h
+5-8llvm/test/CodeGen/WebAssembly/eh-option-errors.ll
+12-1clang/include/clang/Basic/CodeGenOptions.h
+6-3llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+62-3714 files not shown
+94-5320 files

LLVM/project a22a048llvm/lib/CodeGen/SelectionDAG DAGCombiner.cpp, llvm/test/CodeGen/ARM cortex-a57-misched-vfma.ll

DAGCombiner: Drop AllowFPOpFusion from visitFSUBForFMACombine

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+203-31llvm/test/CodeGen/ARM/cortex-a57-misched-vfma.ll
+3-3llvm/test/CodeGen/Hexagon/sffms.ll
+3-3llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+209-373 files

LLVM/project 6d139a6llvm/lib/Target/LoongArch LoongArchMergeBaseOffset.cpp, llvm/lib/Target/RISCV RISCVMergeBaseOffset.cpp

[LoongArch][RISCV] Ignore debug uses when merging base offsets (#221117)

## Summary

Debug instructions are currently enumerated as ordinary users by the RISC-V
and LoongArch merge-base-offset passes. A `DBG_VALUE` can therefore veto an
otherwise valid fold and make `-g` add an ordinary address-calculation
instruction.

Use the non-debug instruction iterator for validation and rewriting, and make
affected debug values unavailable before changing the address represented by
the destination register. Also handle the case where the register has no
ordinary users, which becomes possible after debug uses are excluded.

The same change is applied to both targets because their implementations and
failure mode are equivalent.

## Testing


    [6 lines not shown]
DeltaFile
+42-0llvm/test/CodeGen/LoongArch/merge-base-offset-debug-only.mir
+40-0llvm/test/CodeGen/RISCV/merge-base-offset-debug-only.mir
+37-0llvm/test/CodeGen/LoongArch/merge-base-offset-debug-use.ll
+37-0llvm/test/CodeGen/RISCV/merge-base-offset-debug-use.ll
+9-2llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp
+9-2llvm/lib/Target/LoongArch/LoongArchMergeBaseOffset.cpp
+174-46 files

LLVM/project cd9a5fellvm/test/CodeGen/AMDGPU madak.ll, llvm/test/CodeGen/LoongArch float-fma.ll double-fma.ll

DAGCombiner: Drop AllowFPOpFusion from visitFADDForFMACombine

Rewrites fp-dp3.ll to use flags on individual patterns. It weirdly
used different triples for the fp-contract on and off cases, seemingly
an artifact of the ARM64 and AArch64 merge.

fp-contract.cu is essentially a bugfix, the local fp contract(on) pragma
wins over the global flag now.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+352-1,116llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll
+352-1,116llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll
+260-872llvm/test/CodeGen/LoongArch/float-fma.ll
+260-872llvm/test/CodeGen/LoongArch/double-fma.ll
+388-471llvm/test/CodeGen/AMDGPU/madak.ll
+178-564llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll
+1,790-5,01117 files not shown
+2,485-6,18223 files

LLVM/project 24a7afbllvm/test/CodeGen/X86 pdep-vector-512.ll pdep-vector-128.ll

[X86] LowerCLMUL - improve vXi32 codegen (#221289)

Shuffle combining is struggling to handle the mixture of vector
unrolling, truncations and optimal use of PCLMULQDQ swizzles, this patch
gives us more optimal lowering direct instead of relying on fixup.

Use the PCLMULQDQ lo/hi control immediate to handle anyext i64 element
evaluation - along with shifting the upper elements down to the lowest
bits of the i64 in parallel

Use UNPACK build vector pattern to avoid FPR<->GPR traffic

CLMULH needs to be handled in a future patch, and vXi16 /might/ be worth
handling as well.
DeltaFile
+646-759llvm/test/CodeGen/X86/clmul-vector.ll
+354-446llvm/test/CodeGen/X86/znver-pdep.ll
+330-435llvm/test/CodeGen/X86/clmul-vector-256.ll
+287-436llvm/test/CodeGen/X86/pext-vector-128.ll
+279-428llvm/test/CodeGen/X86/pdep-vector-128.ll
+141-302llvm/test/CodeGen/X86/pdep-vector-512.ll
+2,037-2,8066 files not shown
+2,634-3,84212 files

LLVM/project 5cba2fcclang/docs ReleaseNotes.md, clang/lib/Sema SemaAvailability.cpp

[Clang] Fix Crash in Sema::DiagnoseUnguardedAvailability On 'if' With No Condition (#220004)

**Problem**
C++ 23 introduced consteval expressions which allows `if` statements to
have no condition:
```
if consteval {
}
```
`DiagnoseUnguardedAvailability::TraverseIfStmt` Assumed `If->getCond()`
would never return a `nullptr`, causing a `nullptr` dereference.

Fixes #219948
DeltaFile
+10-0clang/test/SemaCXX/attr-availability.cpp
+5-1clang/lib/Sema/SemaAvailability.cpp
+2-0clang/docs/ReleaseNotes.md
+17-13 files

LLVM/project 229aa7dllvm/include/llvm/CodeGen MachineFunction.h, llvm/include/llvm/Target TargetOptions.h

CodeGen: Move frame-pointer queries out of TargetOptions (#221416)

These used to depend on a TargetOptions field, which was removed
at some point. These are now only depend on MachineFunction,
so move the attribute check there.

Co-authored-by: Claude (Claude-Opus-4.8)
DeltaFile
+0-32llvm/lib/CodeGen/TargetOptionsImpl.cpp
+30-0llvm/lib/CodeGen/MachineFunction.cpp
+5-7llvm/lib/Target/ARM/ARMFrameLowering.cpp
+0-9llvm/include/llvm/Target/TargetOptions.h
+8-0llvm/include/llvm/CodeGen/MachineFunction.h
+3-3llvm/lib/Target/X86/X86FrameLowering.cpp
+46-5122 files not shown
+79-11128 files

LLVM/project c6b91b6llvm/lib/CodeGen/SelectionDAG DAGCombiner.cpp, llvm/test/CodeGen/ARM cortex-a57-misched-vfma.ll

DAGCombiner: Drop AllowFPOpFusion from visitFSUBForFMACombine

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+203-31llvm/test/CodeGen/ARM/cortex-a57-misched-vfma.ll
+3-3llvm/test/CodeGen/Hexagon/sffms.ll
+3-3llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+209-373 files

LLVM/project 06c952dllvm/test/Transforms/SLPVectorizer/AArch64 loop-accumulator-reduction.ll

[SLP][NFC]Add a test with loop-carried reductions, NFC



Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/221438
DeltaFile
+343-0llvm/test/Transforms/SLPVectorizer/AArch64/loop-accumulator-reduction.ll
+343-01 files

LLVM/project efdf877llvm/test/CodeGen/AMDGPU madak.ll, llvm/test/CodeGen/LoongArch float-fma.ll double-fma.ll

DAGCombiner: Drop AllowFPOpFusion from visitFADDForFMACombine

Rewrites fp-dp3.ll to use flags on individual patterns. It weirdly
used different triples for the fp-contract on and off cases, seemingly
an artifact of the ARM64 and AArch64 merge.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+352-1,116llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll
+352-1,116llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll
+260-872llvm/test/CodeGen/LoongArch/float-fma.ll
+260-872llvm/test/CodeGen/LoongArch/double-fma.ll
+388-471llvm/test/CodeGen/AMDGPU/madak.ll
+178-564llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll
+1,790-5,01114 files not shown
+2,463-6,15620 files

LLVM/project d03e943llvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 extract-with-poison-index.ll

[SLP]Fix crash on extractelement with undef/poison index in getEntryCost

canReuseExtract treats undef/poison-index extracts as holes, so such
extracts can end up in a vectorized ExtractElement entry. The cost
model dereferenced getExtractIndex() unconditionally, causing a crash.

Fixes #221414

Reviewers: 

Pull Request: https://github.com/llvm/llvm-project/pull/221437
DeltaFile
+29-0llvm/test/Transforms/SLPVectorizer/X86/extract-with-poison-index.ll
+7-3llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+36-32 files

LLVM/project d39ac8dllvm/lib/Transforms/Vectorize SLPVectorizer.cpp, llvm/test/Transforms/SLPVectorizer/X86 extract-with-poison-index.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+29-0llvm/test/Transforms/SLPVectorizer/X86/extract-with-poison-index.ll
+7-3llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+36-32 files

LLVM/project 71926efclang/lib/CodeGen BackendUtil.cpp, llvm/include/llvm/MC MCTargetOptions.h

MC: Move BinutilsVersion from TargetOptions to MCTargetOptions

BinutilsVersion has no codegen use and only used by MCAsmInfo to check
ELF assembler features.

Co-authored-by: Claude (claude-opus-4.8) <noreply at anthropic.com>
DeltaFile
+10-0llvm/lib/MC/MCTargetOptions.cpp
+0-9llvm/lib/Target/TargetMachine.cpp
+8-0llvm/include/llvm/MC/MCTargetOptions.h
+3-2clang/lib/CodeGen/BackendUtil.cpp
+0-4llvm/include/llvm/Target/TargetOptions.h
+2-2llvm/tools/llc/llc.cpp
+23-173 files not shown
+25-229 files

LLVM/project 1f58d14clang/include/clang/Basic CodeGenOptions.h, clang/lib/CodeGen CGException.cpp CodeGenModule.cpp

clang: Distinguish unspecified from disabled exception model

Add ExceptionHandlingKind::Default so clang can tell an unspecified
exception model from an explicit -exception-model=none.
DeltaFile
+18-17clang/test/CodeGen/exception-model-flag.c
+10-1clang/include/clang/Basic/CodeGenOptions.h
+5-4clang/lib/CodeGen/CodeGenModule.cpp
+4-2clang/lib/CodeGen/CGException.cpp
+1-1clang/lib/Frontend/CompilerInvocation.cpp
+1-1clang/lib/Driver/ToolChains/NetBSD.cpp
+39-266 files not shown
+45-3212 files

LLVM/project 5b5dedaclang/include/clang/Basic CodeGenOptions.h, clang/lib/CodeGen CodeGenModule.cpp

clang: Emit "exception-model" module flag

Record the exception-handling model as an "exception-model" IR module
flag when it differs from the target triple's default, mirroring how
other target ABI properties are recorded. Adds a
CodeGenOptions::toExceptionHandling helper to translate clang's
ExceptionHandlingKind into the LLVM ExceptionHandling enum.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+38-0clang/test/CodeGen/exception-model-flag.c
+19-0clang/include/clang/Basic/CodeGenOptions.h
+12-0clang/lib/CodeGen/CodeGenModule.cpp
+69-03 files

LLVM/project 8674030llvm/docs LangRef.md, llvm/include/llvm/Support CodeGen.h

Distinguish unspecified from disabled exception model
DeltaFile
+9-4llvm/include/llvm/Support/CodeGen.h
+8-3llvm/docs/LangRef.md
+3-5llvm/lib/IR/RuntimeLibcalls.cpp
+4-4llvm/lib/IR/Module.cpp
+3-4llvm/include/llvm/Target/TargetMachine.h
+6-0llvm/test/Assembler/module-flags-exception-model.ll
+33-207 files not shown
+45-2613 files

LLVM/project db98715llvm/docs LangRef.md, llvm/include/llvm/Support CodeGen.h

IR: Introduce "exception-model" module flag

Add an "exception-model" IR module flag intended to replace
TargetOptions::ExceptionModel, such that the ABI is fully
computable from the IR alone. Add the basic documentation and
verifier/linker tests, but doesn't wire up the consumers.

The main thing I question is whether the single "wasm" model is
really the correct control. With the existing TargetOption,
WebAssembly is overloading "none" in a weird way that sometimes
means default, and sometimes mean forcibly disabled exceptions.
It additionally has -wasm-enable-eh and -wasm-enable-sjlj cl::opts
and I don't fully understand the interaction between all of these
knobs; the cl::opts are even worse than the TargetOptions since
these still change the ABI and are backend private.

Co-authored-by: Claude (Claude-Opus-4.8) <noreply at anthropic.com>
DeltaFile
+40-0llvm/include/llvm/Support/CodeGen.h
+37-0llvm/test/Verifier/module-flags-exception-model.ll
+35-0llvm/docs/LangRef.md
+31-0llvm/test/Assembler/module-flags-exception-model.ll
+28-0llvm/test/Linker/module-flags-exception-model.ll
+11-0llvm/lib/IR/Verifier.cpp
+182-02 files not shown
+201-08 files