LLVM/project f4e0f02 — mlir/include/mlir/Conversion Passes.td, mlir/include/mlir/Dialect/Tosa/IR TosaOps.td

[mlir][tosa] Emit a runtime assertion when lowering `tosa.pad` with negative padding (#232221)
DeltaFile
+12-0mlir/lib/Conversion/TosaToTensor/TosaToTensor.cpp
+3-0mlir/include/mlir/Dialect/Tosa/IR/TosaOps.td
+2-0mlir/test/Conversion/TosaToTensor/tosa-to-tensor.mlir
+2-0mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp
+1-0mlir/lib/Conversion/TosaToTensor/CMakeLists.txt
+1-0mlir/include/mlir/Conversion/Passes.td
+21-06 files

LLVM/project 9d20703 — libcxx/docs/Status Cxx26Issues.csv, libcxx/include/__iterator common_iterator.h

[libc++] Implement LWG3749: `common_iterator` should handle integer-class difference types (#233606)

Make `iterator_category` of `iterator_traits<common_iterator<I,S>>`
conditionally present only when `iter_difference_t<I>` is an integral
type.

Fixes #105291
DeltaFile
+16-7libcxx/include/__iterator/common_iterator.h
+17-2libcxx/test/std/iterators/predef.iterators/iterators.common/iterator_traits.compile.pass.cpp
+1-1libcxx/docs/Status/Cxx26Issues.csv
+34-103 files

LLVM/project b2a8cf2 — libcxx/utils/ci buildkite-pipeline.yml

[libc++][ci] Retarget the ARM BuildKite runners (#224107)

I enabled agent clusters in BuildKite since unclustered agents are not
supported anymore. As part of that, I created a new libcxx-builders-arm
queue to replace the existing queue. This patch switches the pipeline
definition so that new jobs start targeting the new queue with clustered
agents.

(cherry picked from commit 01edf187213105e35db8aef724a63f86241b6bd4)
DeltaFile
+8-8libcxx/utils/ci/buildkite-pipeline.yml
+8-81 files

LLVM/project aa6e40c — clang/include/clang/Interpreter Interpreter.h, clang/lib/Interpreter Interpreter.cpp

[clang-repl][CodeGen] Add setOptLevel, #pragma clang repl optimize(N)  (#214793)

clang-repl fixes its CodeGenOptions when the interpreter is created, so
the optimization level is the same for every input. This adds a way to
change it, similar to Cling:

- Add a new `CodeGenerator::StartModule` overload that takes a
CodeGenOptions, so the incremental path can start a module with
different codegen options than the ones fixed at construction.
- `Interpreter::setOptLevel` uses it to re-stage the pending module at
the new level.
- `#pragma clang repl optimize(N)` exposes this in source, the level
applies to the input the pragma appears in and stays in effect until
changed again.

assisted by claude-opus-5-5
DeltaFile
+78-0clang/lib/Interpreter/Interpreter.cpp
+77-0clang/unittests/Interpreter/InterpreterTest.cpp
+50-0clang/test/Interpreter/pragma-optimize.cpp
+20-0clang/test/Interpreter/pragma-optimize-diagnostics.cpp
+5-0clang/include/clang/Interpreter/Interpreter.h
+230-05 files

LLVM/project 5df4bbb — clang/lib/CIR/Dialect/Transforms CallConvLoweringPass.cpp, clang/test/CIR/Transforms/abi-lowering amdgpu-calling-conv.cir

[CIR] Support array coercions and flattened direct structs in CallConvLowering  (#220207)

**Summary:**
- The AMDGPU classifier can pass or return an aggregate directly in
registers and can pack a 33-64 bit aggregate
into a [2 x i32] register pair. The CallConvLowering bridge handled
neither, so such signatures hit the NYI path. Handle both in
convertABIArgInfo/abiTypeToCIR.

**Changes:**
- `abiTypeToCIR` gets an `ArrayType` case
- A Direct struct argument with a null coerce type and `CanBeFlattened`
is split into one argument per field, as classic CGCall does. Returns,
unions and non-flattenable structs pass through unchanged.
- Added cir-opt coverage for 64-bit struct coerced to [2 x i32] and
larger struct passed directly in registers.

Addresses review feedback from @koparasy on #220197.


    [2 lines not shown]
DeltaFile
+126-2clang/test/CIR/Transforms/abi-lowering/amdgpu-calling-conv.cir
+19-2clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp
+145-42 files

LLVM/project 369b87e — clang/docs ReleaseNotes.md, clang/lib/Sema SemaExpr.cpp

[Clang] Rebuild lambda init-captures and their initialization in default initializers (#234793)

Fixes https://github.com/llvm/llvm-project/issues/196469.

Reland #196597 with the CodeGen crash fixed by rebuilding init-capture
initialization. Verified with focused Clang tests and runtime
capture/cleanup checks.

In addition to the added test, the main change since #196597  has been
```diff
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3554e76a09cff5332a331e78aa54b2b8cfa9c0c2..43b0c86132172b3f8a42d4d2b3ebf379fc82a779 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -5801,13 +5801,10 @@ struct ImmediateCallVisitor : DynamicRecursiveASTVisitor {
 
 struct EnsureImmediateInvocationInDefaultArgs
     : TreeTransform<EnsureImmediateInvocationInDefaultArgs> {
-  using Base = TreeTransform<EnsureImmediateInvocationInDefaultArgs>;

    [49 lines not shown]
DeltaFile
+76-0clang/test/CodeGenCXX/gh196469-default-member-init-lambda-capture-copy.cpp
+67-8clang/lib/Sema/SemaExpr.cpp
+37-0clang/test/CodeGenCXX/gh196469-default-member-init-lambda-cleanup.cpp
+22-0clang/test/SemaCXX/gh196469-default-member-init-lambda-capture.cpp
+0-12clang/test/SemaCXX/source_location.cpp
+4-0clang/docs/ReleaseNotes.md
+206-206 files

LLVM/project d511349 — llvm/lib/Target/SystemZ SystemZInstrInfo.td SystemZISelLowering.cpp, llvm/test/CodeGen/SystemZ int-div-04.ll int-div-03.ll

SystemZ: Replace AEXT128/ZEXT128/PAIR128 pseudos with patterns

These pseudos only existed because GR128 values were untyped, so the
REG_SEQUENCE they expand to could not be written as a pattern. Now that
GR128 holds v2i64, select the extensions with REG_SEQUENCE output
patterns, and build GR128 pairs with a PAIR128 target node instead of a
custom inserter.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+1-58llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+24-20llvm/lib/Target/SystemZ/SystemZInstrInfo.td
+7-7llvm/test/CodeGen/SystemZ/regcoal_remat_empty_subrange.ll
+7-6llvm/test/CodeGen/SystemZ/multiselect-02.mir
+2-4llvm/test/CodeGen/SystemZ/int-div-04.ll
+2-4llvm/test/CodeGen/SystemZ/int-div-03.ll
+43-994 files not shown
+48-10710 files

LLVM/project 8d915ce — llvm/lib/Target/SystemZ SystemZInstrInfo.td

SystemZ: Move z_pair128 pattern to the moves section

Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+3-3llvm/lib/Target/SystemZ/SystemZInstrInfo.td
+3-31 files

LLVM/project 1948dcf — llvm/lib/Target/SystemZ SystemZOperators.td SystemZInstrFP.td, llvm/test/CodeGen/SystemZ vec-i64-abi-novector.ll vec-v2i64-novector.ll

SystemZ: Make v2i64 legal on subtargets without vector support

Without the vector feature, the GR128 even/odd register pairs were
modeled with MVT::Untyped, since no 128-bit type was legal. Use v2i64
instead, which is what the pairs functionally are.

v2i64 values can be built from and split into their halves with
subregister operations. Everything else is expanded. Loads and stores
are split into i64 halves, so they don't tie up a register
pair. Bitcasts to and from f128 use the FPR pair halves.

This takes care to avoid changing the calling convention. Vectors that
would be broken down into v2i64 are still passed as individual i64
elements. Inline assembly operands still use untyped, which is listed
first in the GR128 type list, so i128 operands are not bitcast to
v2i64.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply at anthropic.com>
DeltaFile
+75-38llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+18-18llvm/test/CodeGen/SystemZ/vec-v2i64-novector.ll
+24-4llvm/lib/Target/SystemZ/SystemZInstrInfo.td
+6-6llvm/test/CodeGen/SystemZ/vec-i64-abi-novector.ll
+6-6llvm/lib/Target/SystemZ/SystemZOperators.td
+12-0llvm/lib/Target/SystemZ/SystemZInstrFP.td
+141-727 files not shown
+168-8513 files

LLVM/project 59ddb5f — llvm/test/CodeGen/SystemZ arg-v2i64-abi.ll ret-v2i64-abi.ll

SystemZ: Add nounwind to v2i64 baseline tests
DeltaFile
+10-67llvm/test/CodeGen/SystemZ/call-ret-v2i64-abi.ll
+33-35llvm/test/CodeGen/SystemZ/vec-v2i64-novector.ll
+7-49llvm/test/CodeGen/SystemZ/call-arg-v2i64-abi.ll
+13-26llvm/test/CodeGen/SystemZ/vec-i64-abi-novector.ll
+10-12llvm/test/CodeGen/SystemZ/ret-v2i64-abi.ll
+7-13llvm/test/CodeGen/SystemZ/arg-v2i64-abi.ll
+80-2026 files

LLVM/project 8517ec6 — llvm/test/CodeGen/SystemZ ret-v2i64-abi.ll call-arg-v2i64-abi.ll

Uncomment and add more vector tests
DeltaFile
+261-8llvm/test/CodeGen/SystemZ/call-ret-v2i64-abi.ll
+1-1llvm/test/CodeGen/SystemZ/ret-v2i64-abi.ll
+1-1llvm/test/CodeGen/SystemZ/call-arg-v2i64-abi.ll
+1-1llvm/test/CodeGen/SystemZ/arg-v2i64-abi.ll
+264-114 files

LLVM/project 9e03b92 — libc/src/__support/FPUtil is_integer.h, libc/src/__support/math pow_utils.h powf_utils.h

[libc][NFC] Split out `is_{, odd_}integer` utility (#234288)

Relates to
https://github.com/llvm/llvm-project/pull/230371/changes#r4327614701.

Common FP utility like `is_integer` and `is_odd_integer` could be split
out to reduce duplicate code.
DeltaFile
+188-0libc/test/src/__support/FPUtil/is_integer_test.cpp
+62-0libc/src/__support/FPUtil/is_integer.h
+7-37libc/src/__support/math/powf_utils.h
+6-37libc/src/__support/math/pow_utils.h
+16-0utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+14-0libc/test/src/__support/FPUtil/CMakeLists.txt
+293-747 files not shown
+328-9213 files

LLVM/project 83000a5 — clang/include/clang/DependencyScanning DependencyScanningWorker.h DependencyScanningFilesystem.h, clang/include/clang/Tooling DependencyScanningTool.h

[clang] Enhance `DependencyScanningFilesystem` to optionally accept a VFS for non-shared cache queries (#234393)

Since `DependencyScanningFilesystem` resolves FS queries through a
global shared cache, the VFS it receives cannot be a custom VFS for
different compiler invocations. To address this add an optional
`LocalFS` whose queries will be cached by the worker only, without going
through the shared cache.

A caller can use this to pass a VFS-per-invocation for dependency
scanning purposes.
DeltaFile
+57-19clang/lib/DependencyScanning/DependencyScanningFilesystem.cpp
+60-0clang/unittests/DependencyScanning/DependencyScanningFilesystemTest.cpp
+30-2clang/include/clang/DependencyScanning/DependencyScanningFilesystem.h
+4-2clang/include/clang/Tooling/DependencyScanningTool.h
+3-2clang/lib/DependencyScanning/DependencyScanningWorker.cpp
+3-1clang/include/clang/DependencyScanning/DependencyScanningWorker.h
+157-266 files

LLVM/project 3d5c61d — llvm/lib/Analysis ValueTracking.cpp, llvm/lib/CodeGen/GlobalISel GISelValueTracking.cpp

[ValueTracking] Query fma/fmuladd operands when NaN is demanded (#234831)

`fma` and `fmuladd` operands are now queried when NaN is demanded for
`computeKnownFPClass` in `ValueTracking`/`GISelValueTracking`.

These allow some tests to fold in another PR
https://github.com/llvm/llvm-project/pull/233986#issuecomment-6301362660

AI Disclosure:
I used Claude Opus 5 to help write the tests.
DeltaFile
+42-0llvm/unittests/CodeGen/GlobalISel/KnownFPClassTest.cpp
+38-0llvm/unittests/Analysis/ValueTrackingTest.cpp
+1-1llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+1-1llvm/lib/Analysis/ValueTracking.cpp
+82-24 files

LLVM/project 7d2aac9 — llvm/lib/Transforms/Scalar LoopStrengthReduce.cpp, llvm/test/Transforms/LoopStrengthReduce/RISCV loop-exit-equality.ll

[LSR] Simplify equality loop exit checks

Assert that the latch has exactly one in-loop successor.

Keep the transform test IR-only since codegen is covered separately.

Assisted-by: TRAE CLI (GPT-5.6-Sol)
DeltaFile
+1-212llvm/test/Transforms/LoopStrengthReduce/RISCV/loop-exit-equality.ll
+2-2llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+3-2142 files

LLVM/project baa2578 — clang/lib/CodeGen CodeGenFunction.cpp CGExpr.cpp, clang/test/CodeGen umask-inline-builtin.c

[clang][CodeGen] Copy calling convention to .inline builtin clones (#234089)

0f0e31cf511d created a separate `.inline` function for inline builtins
instead
of renaming `Fn` in place, leaving the default C calling convention on
the
clone even when `Fn` uses a different calling convention.

Assisted-by: Gemini
DeltaFile
+1-1clang/test/CodeGen/umask-inline-builtin.c
+1-0clang/lib/CodeGen/CodeGenFunction.cpp
+1-0clang/lib/CodeGen/CGExpr.cpp
+3-13 files

LLVM/project 64ccd76 — polly/docs Performance.md index.md

[Polly][docs] Finish MyST migration for selected docs (#233692)

Migration notes from the agent:

- Enabled the MyST `deflist` extension in `polly/docs/conf.py` and
converted the two option lists in `UsingPollyWithClang.md` to native
definition lists because the original reST definition lists would
otherwise need `{eval-rst}`. The converted lists lose the accidental
blockquote indentation, which shifts them slightly left.
- Converted `.. sectionauthor::` in
`HowToManuallyUseTheIndividualPiecesOfPolly.md` to the native
`{sectionauthor}` directive because MyST can invoke Sphinx directives
directly.
- Replaced the `{eval-rst}` `isonum.txt` include and the `{{ larr }}`
substitution in `Performance.md` with a literal `←` because the file
already uses other Unicode math characters.
- Replaced `{{ ReleaseNotesTitle }}`, `{{ release }}` and `{{ version
}}` in `ReleaseNotes.md` with `env.config` expressions and a
`PreRelease` conditional because `rst_epilog` substitutions do not apply

    [21 lines not shown]
DeltaFile
+428-448polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.md
+74-90polly/docs/UsingPollyWithClang.md
+32-39polly/docs/TipsAndTricks.md
+33-27polly/docs/ReleaseNotes.md
+26-25polly/docs/index.md
+16-31polly/docs/Performance.md
+609-6602 files not shown
+630-6778 files

LLVM/project 4d460fc — polly/docs Architecture.rst Architecture.md

[Polly][docs] Rename selected docs from .rst to .md (#233688)

Tracking issue: #201242
See the [migration guide] for more information. 

[migration guide]:
https://llvm.org/docs/SphinxQuickstartTemplate.html#markdown-migration-guidelines

This is the initial straight rename commit. It will probably break the
docs build, but it has to be a separate PR for blame preservation
purposes.
DeltaFile
+0-480polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.rst
+480-0polly/docs/HowToManuallyUseTheIndividualPiecesOfPolly.md
+0-223polly/docs/UsingPollyWithClang.rst
+223-0polly/docs/UsingPollyWithClang.md
+0-93polly/docs/Architecture.rst
+93-0polly/docs/Architecture.md
+796-7968 files not shown
+976-97614 files

LLVM/project 6ceff48 — lld/ELF ICF.cpp

[ELF] Speed up ICF by hashing relocations and propagating over an edge list (#233697)

ICF's initial hash covers section contents and, since
https://reviews.llvm.org/D56986, two rounds of relocation target hashes,
but not what constantEq compares: offsets, types, addends, merge-section
offsets, and names of undefined or preemptible targets. Sections that
differ only in relocations, e.g. the string or external function they
reference, share a hash at every depth, which is why D56986 found no
gain from more rounds. segregate() separates them with a quadratic
number of equalsConstant calls, which dominates a Chromium --icf=all
link.

Hash what constantEq compares, and propagate hashes over relocations to
other candidates for 7 rounds. Each round saves up to one segregate()
pass. Also parallelize the symbol fold loop.

--threads=8, --icf=all, output byte-identical at --threads=1 and 8:

```

    [7 lines not shown]
DeltaFile
+129-85lld/ELF/ICF.cpp
+129-851 files

LLVM/project e115508 — llvm/test/CodeGen/SystemZ vec-i64-abi-novector.ll arg-v2i64-abi.ll

SystemZ: Add baseline tests for i64 vector handling

Make sure nothing changes in future changes. Cover the ABI of other
i64-element vector types and a range of <2 x i64> operations on a
subtarget without the vector facility.

Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
DeltaFile
+523-0llvm/test/CodeGen/SystemZ/vec-v2i64-novector.ll
+325-0llvm/test/CodeGen/SystemZ/ret-v2i64-abi.ll
+324-0llvm/test/CodeGen/SystemZ/call-arg-v2i64-abi.ll
+254-0llvm/test/CodeGen/SystemZ/call-ret-v2i64-abi.ll
+211-0llvm/test/CodeGen/SystemZ/arg-v2i64-abi.ll
+203-0llvm/test/CodeGen/SystemZ/vec-i64-abi-novector.ll
+1,840-01 files not shown
+1,948-07 files

LLVM/project 54a951d — bolt/lib/Passes RISCVLongJmpPass.cpp, bolt/test/RISCV split-functions-ras.s

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+365-47llvm/test/Transforms/Attributor/nofpclass-fma.ll
+174-0bolt/lib/Passes/RISCVLongJmpPass.cpp
+163-0llvm/test/CodeGen/BPF/hmul.ll
+121-0bolt/test/runtime/RISCV/split-branches.s
+68-0llvm/test/CodeGen/BPF/div-to-hmul.ll
+51-0bolt/test/RISCV/split-functions-ras.s
+942-4728 files not shown
+1,345-7234 files

LLVM/project f0392b2 — bolt/lib/Passes RISCVLongJmpPass.cpp, bolt/test/RISCV split-functions-ras.s

[spr] update

Created using spr 2.0.0-beta.2
DeltaFile
+365-47llvm/test/Transforms/Attributor/nofpclass-fma.ll
+174-0bolt/lib/Passes/RISCVLongJmpPass.cpp
+163-0llvm/test/CodeGen/BPF/hmul.ll
+121-0bolt/test/runtime/RISCV/split-branches.s
+68-0llvm/test/CodeGen/BPF/div-to-hmul.ll
+51-0bolt/test/RISCV/split-functions-ras.s
+942-4728 files not shown
+1,345-7234 files

LLVM/project 962b62d — llvm/lib/Support KnownFPClass.cpp, llvm/test/Transforms/Attributor nofpclass-fma.ll

[KnownFPClass] Properly handle the denormal mode for fma (#234821)

Fixes https://github.com/llvm/llvm-project/issues/228972

I have made it so `KnownFPClass::fma` will only flush input denormals
before the multiplication step, and flush output denormals after the
addition step.

In total, this changes:
- Applying the input denormal mode to the Addend
- Applying the output denormal mode to the result
- Not applying the output denormal mode to the intermediate `fmul` step

The tests I added are not currently observable since `KnownFPClass::fma`
is not capable of refining zero/subnormal results precisely enough.

AI Disclosure:
I used Claude Opus 5 to help write the tests.
DeltaFile
+365-47llvm/test/Transforms/Attributor/nofpclass-fma.ll
+16-9llvm/lib/Support/KnownFPClass.cpp
+381-562 files

LLVM/project ecfb7a5 — lld/ELF ICF.cpp

[ELF] Drop ICF's MSB tag. NFC (#234829)

Drop the tag and compute eqClassBase right after the unique IDs it must
exceed.
DeltaFile
+4-7lld/ELF/ICF.cpp
+4-71 files

LLVM/project d4da8a0 — clang/lib/CodeGen CodeGenFunction.cpp CGExpr.cpp, clang/test/CodeGen strlen-inline-builtin.c umask-inline-builtin.c

[clang][CodeGen] Copy function attributes to .inline builtin clones (#234081)

0f0e31cf511d created a separate `.inline` function for inline builtins
instead
of renaming `Fn` in place, but only set `alwaysinline` on the clone.

Exposed by #215264: missing target attributes can prevent inlining
`.inline`
clones, and missing `noundef` parameter attributes cause MSan false
positives
when the clone is not inlined.

Assisted-by: Gemini
DeltaFile
+2-2clang/test/CodeGen/umask-inline-builtin.c
+2-2clang/test/CodeGen/memcpy-inline-builtin-no-extern.c
+2-2clang/test/CodeGen/memcmp-inline-builtin.c
+1-1clang/test/CodeGen/strlen-inline-builtin.c
+1-0clang/lib/CodeGen/CodeGenFunction.cpp
+1-0clang/lib/CodeGen/CGExpr.cpp
+9-76 files

LLVM/project bec00b7 — llvm/lib/Transforms/Utils SimplifyCFG.cpp, llvm/test/Transforms/SimplifyCFG preserve-branchweights-switch-create.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+59-4llvm/test/Transforms/SimplifyCFG/preserve-branchweights-switch-create.ll
+2-0llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+61-42 files

LLVM/project c83bbca — llvm/test/Transforms/SimplifyCFG preserve-branchweights-switch-create.ll

[𝘀𝗽𝗿] changes to main this commit is based on

Created using spr 1.3.7

[skip ci]
DeltaFile
+8-4llvm/test/Transforms/SimplifyCFG/preserve-branchweights-switch-create.ll
+8-41 files

LLVM/project b3f0c0c — .github/workflows libcxx-lnt-refine-commits.yml

[libc++] Cache the result of LNT commit refinement less aggressively (#234825)

At least as we tweak the new pipeline, waiting 3 hours to trigger new
commits is too long.
DeltaFile
+2-2.github/workflows/libcxx-lnt-refine-commits.yml
+2-21 files

LLVM/project 58253ba — llvm/test/Transforms/SimplifyCFG preserve-branchweights-switch-create.ll

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+8-4llvm/test/Transforms/SimplifyCFG/preserve-branchweights-switch-create.ll
+8-41 files

LLVM/project 0df8074 — clang/lib/Basic/Targets BPF.cpp, clang/test/Preprocessor bpf-predefined-macros.c

[BPF] Add UHMUL and SHMUL instruction variants with -mcpu=v5 (#234076)

This patch adds LLVM support for the unsigned and signed high-half
multiply instructions (UHMUL and SHMUL) proposed for the BPF ISA [1].

The instructions use the existing `BPF_MUL` opcode with the offset field
distinguishing the variants:

- `off = 1`: UHMUL, returning the upper 64 bits of an unsigned 64×64-bit
product.
- `off = 2`: SHMUL, returning the upper 64 bits of a signed 64×64-bit
product.

Both register and immediate forms are supported. For example:

```asm
r1 uh*= r2
r3 sh*= r4
r5 uh*= -2

    [42 lines not shown]
DeltaFile
+163-0llvm/test/CodeGen/BPF/hmul.ll
+68-0llvm/test/CodeGen/BPF/div-to-hmul.ll
+30-0clang/test/Preprocessor/bpf-predefined-macros.c
+14-1llvm/lib/Target/BPF/BPFInstrInfo.td
+12-0llvm/test/CodeGen/BPF/assembler-disassembler-v5.s
+6-2clang/lib/Basic/Targets/BPF.cpp
+293-311 files not shown
+329-717 files