Revert "[libc] Enable baremetal Armv7-M pre-merge tests" (#240765)
Reverts llvm/llvm-project#233498
This change made a bug in the GitHub workflow apparent, although it did
not cause it.
Reverting while we fix this bug in order to have a clean CI.
[LangRef] Make VP intrinsics with EVL > num elements non-UB
For the remaining VP intrinsics which don't access memory:
- vp.merge
- vp.reduce.*
- vp.cttz.elts
- vp.splice
- vp.reverse
These are marked as speculatable. However the LangRef states that if the EVL > the number of elements in the vector then the behaviour is undefined. The two are inconsistent, so this PR tightens the result in this scenario to be poison.
As a result the vp.reverse expansion needs to be updated to clamp the EVL so it doesn't read outside of the stack object.
vp.udiv/vp.sdiv/vp.urem/vp.srem are also included here even though they're not speculatable. They can still cause UB if division by zero or overflow occurs on any lane even when EVL > number of elts, so I've added lines to clarify this.
VP intrinsics that read/write memory need to remain UB to match how backends lower them, they just use the EVL verbatim without any clamping or checks.
[LangRef][CodeGen] Fix vp.udiv and friends introducing UB during expansion and clarify poison lanes (#240755)
The LangRef isn't immediately clear on how poison lanes (`%mask AND
%evl`) are handled in vp.udiv/vp.sdiv/vp.urem/vp.srem. This PR updates
it to clarify that they return a poison lane, but also perform division
and can cause UB.
So as a result, vp.udiv/vp.sdiv/vp.urem/vp.srem only have UB if a
divison by zero/overflow occurs, even if the mask lane contains poison.
E.g. `vp.udiv x, <1, 1, 1, 1>, mask=<poison, poison, poison, poison>,
evl=4` should be poison, but shouldn't be UB.
When vp.udiv/vp.sdiv/vp.urem/vp.srem are expanded, they're expanded to a
safe divisor like `udiv op0, (select mask, op1, 1)`.
If one of the mask lanes is poison then the new divisor is poison, which
is immediate UB. We need to freeze mask to prevent propagation.
It's possible to add a combine to avoid the x86 codegen regression but I
don't think it's worth it. The loop vectorizer doesn't emit VP
[4 lines not shown]
[Offload][NFC] Move __tgt_async_info into PluginInterface.h (#240772)
__tgt_async_info is no longer used by libomptarget (only by liboffload
and the plugins). Move it from the shared APITypes header to the plugin
interface header. The plugins don't need anything from the APITypes
header anymore so remove includes.
Assisted by Claude.
[clang][bytecode][NFC] Avoid a `getLocation()` call in `InvalidCast` (#240748)
First, `getSource()` is better than `getLocation()` because it
potentially avoids a `getExprLoc()` call, which is slow. Second, we
don't need `Loc` at all for `CastKind::ReinterpretPtrToInt`.
py-pamqp: updated to 5.0.0
5.0.0 (2026-10-30)
- Encode `bytes` field table and field array values as the AMQP byte array (`x`) type, the same as `bytearray`
- **Breaking:** decode AMQP byte array (`x`) values as `bytes`, not `bytearray`. Code that changes a decoded value in place must copy it to a `bytearray` first
[Offload][Omp] Mark aarch64 as unsupported in get_num_devices_device test (#240399)
The test get_num_devices_device.c was added in #238271 and marked x86_64
as unsupported but it seems we also need to mark aarch64.
[CodeGen] Extend Address Analysis for Scalable Offsets (#234553)
Extending Address analysis for scalable offsets for finding contiguous
load/store.
Using StackOffset which can represent fixed and scalable offsets.
[LV] Support widening predicated loads/stores to UF x VF (#233782)
This patch follows #217670 and adds support for widening loads/stores to
UF x VF in loops that use a wide active lane mask.
When widening predicated loads/stores, we also update the mask PHI to
the full mask width. This allows the widened loads/stores to use the
full-width mask directly.
On AArch64, this style of loop can be lowered to multi-vector
loads/stores using a predicate-as-counter for masking.
[LangRef] Make VP intrinsics with EVL > num elements non-UB
For the remaining VP intrinsics which don't access memory:
- vp.merge
- vp.reduce.*
- vp.cttz.elts
- vp.splice
- vp.reverse
These are marked as speculatable. However the LangRef states that if the EVL > the number of elements in the vector then the behaviour is undefined. The two are inconsistent, so this PR tightens the result in this scenario to be poison.
As a result the vp.reverse expansion needs to be updated to clamp the EVL so it doesn't read outside of the stack object.
vp.udiv/vp.sdiv/vp.urem/vp.srem are also included here even though they're not speculatable. They can still cause UB if division by zero or overflow occurs on any lane even when EVL > number of elts, so I've added lines to clarify this.
VP intrinsics that read/write memory need to remain UB to match how backends lower them, they just use the EVL verbatim without any clamping or checks.
[LAA] Drop redundant start check in evaluatePtrAddRecAtMaxBTCWillNotWrap (#237282)
The function bailed out unless AR's start was known u>= StartPtr. This
is
implied by the final MaxOffset u<= DerefBytes check, which in both
directions bounds StartOffset by DerefBytes: for a non-negative step
MaxOffset is StartOffset + AccessedBytes, built without overflow; for a
negative step it is StartOffset itself.
StartOffset is Start - StartPtr modulo 2^N, so Start == StartPtr +
StartOffset with StartOffset in [0, DerefBytes]:
```
StartPtr StartPtr + DerefBytes
| |
|===================|==========| dereferenceable, cannot wrap
|<-- StartOffset -->| |
Start
```
[6 lines not shown]
[WPD] Fix crash during devirtualization in non-LTO mode due to anon globals (#237274)
When the WPD pass runs without LTO, it will construct a module summary
index for itself, which will cause a crash if there are multiple
anonymous globals in the module. This happens because the anonymous
globals will be assigned the same GUIDs by the AssignGUID pass, so there
will be multiple summaries associated with one GUID.
py-svglib: updated to 2.4.0
2.4.0 (2026-11-04)
Added
- `<textPath>` is now supported: text follows the `<path>` named by its `href`
or `xlink:href`, with `startOffset` (a length or a percentage) and
`text-anchor`, and styled `<tspan>` children. ReportLab can't draw text along
a path, so each glyph is placed and rotated individually, at the point of the
path under its midpoint; glyphs beyond the end of the path are dropped. Only
paths of the same document can be followed, and `side`, `method`, `spacing`
and per-glyph `dx`/`dy`/`rotate` are not supported
- The plain `opacity` property is now supported, as a presentation attribute,
in `style` attributes and in `<style>` rules, including percentages. Opacity
composes down the tree, so a shape at 0.5 inside a group at 0.5 is drawn at
0.25. It is applied per shape, so overlapping shapes inside a translucent
group show through each other, and images are not affected
thanks to @Pharex38).
[48 lines not shown]
[OpenMP] Drop optimistic attributes from taskloop bound arguments
Under the default off -openmp-ir-builder-optimistic-attributes flag the
loop bounds get attributed as captures(none) nofree.
Changing them to AttributeSet() removes those claims from the
__kmpc_taskloop and __kmpc_taskloop_5 declarations. The runtime uses
the bounds' addresses to locate the bounds for each task it creates.
Even though the memory also reachtes the runtime through the task
argument the claims in the IR about the arguments are still wrong.
[clang][Modules] Don't home functions excluded from explicit instantiation (#240594)
With `-fmodules-codegen`, inline functions and implicit template
instantiations are emitted into the module's object file and users of
the module only reference them. libc++ marks most of its inline
functions as hidden and excluded from explicit instantiation, so such a
reference can't be resolved if the module's object file is linked into a
different shared library than the user. For example, a test that links
against the shared library of a module that instantiates
`std::vector<T>` fails with "undefined hidden symbol" for the members of
`std::vector<T>` that it calls.
Emit these functions in every user instead, just like `always_inline`
functions. This matches the meaning of the attribute, which already
makes every user instantiate the function despite an explicit
instantiation declaration. Before e9d85264ac replaced `always_inline`
with `exclude_from_explicit_instantiation` in libc++, its hidden
functions were never homed because of the `always_inline` check.
Assisted-by: Claude Code (Claude Opus 5.5)
[CIR] Make cir-canonicalize a full canonicalizer
cir-canonicalize applied the CIR canonicalization patterns and folders
only to a hand-written list of operations. It now builds the pattern set
once in initialize() and runs the greedy driver over every operation, so
every pattern and folder applies everywhere. Dead code elimination is
disabled: CIR stays close to the source, so unused locals and ignored
expressions are kept as in classic codegen, and only the inputs of a
folded operation can be left unused. Empty scopes and switches were
removed only because they were dead, so they get explicit
canonicalization patterns.
The pass uses the multi-op driver because the region driver always
erases blocks without a CFG predecessor, and a block that starts with
cir.label is reached only through cir.goto until the goto solver runs.
Region simplification stays off for the same reason. The new
test-convergence option fails the pass when the driver does not reach a
fixpoint, as in the upstream canonicalizer.
Assisted-by: Claude Code (claude-opus-5-5).