[libc++][NFC] Re-order availability mapping to `_LIBCPP_INTRODUCED_IN_LLVM_{N}` (#210694)
Noticed that the new additions (from 16f692338cf and 8a531c3608c) were placed
rather randomly. Put the mapping back to reverse chronological order, see
783fd2f9d.
[ADT] Add single-pass merge for ImmutableSet/ImmutableMap (#209807)
The immutable-set/map dataflow joins merged two containers by inserting
the
elements of one into the other one at a time, costing O(|B| * log|A|)
and
re-copying shared spine nodes on every insert.
Add a single-pass, structure-sharing tree merge on ImutAVLFactory
(mergeTrees), exposed as ImmutableSet::Factory::unionSets and
ImmutableMap::Factory::mergeWith. It recurses over the larger operand
and
splits the smaller at each key, returning non-overlapping subtrees
unchanged,
so each spine node is copied at most once: O(|B| * log(|A|/|B| + 1)).
Two flags tune it for the different joins:
* KeepUnmatched - keep keys unique to one side (set union / a lattice
join
[37 lines not shown]
AMDGPU: Reland: Codegen for v_dual_dot2acc_f32_f16/bf16 from VOP3
For V_DOT2_F32_F16 and V_DOT2_F32_BF16 add their VOPDName and mark
them with usesCustomInserter which will be used to add pre-RA register
allocation hints to preferably assign dst and src2 to the same physical
register. When the hint is satisfied, canMapVOP3PToVOPD recognises the
instruction as eligible for VOPD pairing by checking if it is VOP2 like:
dst==src2, no source modifiers, no clamp, and src1 is a register.
Mark both instructions as commutable to allow a literal in src1 to be
moved to src0, since VOPD only permits a literal in src0.
Original patch had a bug where it did not check if physical src
registers match register class of appropriate operand in fullVOPD
instructions, check is now done via isValidVOPDSrc.
AMDGPU: Validate VOPD/VOPD3 physical source registers against operand RC
Replace isVGPR checks with isValidVOPDSrc that validates physical source
registers against the actual combined VOPD/VOPD3 instruction's operand
register classes. Now we also validate operands for VOPD instructions.
[libc++] Compose the test suite Lit site config from harness and installation substitutions (#209638)
This patch restructures how libc++'s Lit site config is generated.
Instead of relying on the user-selected configuration file to include
the CMake bridge, it composes a site configuration from multiple
independent bits.
Importantly, it splits substitutions that pertain to the harness setup
(e.g. where to find Python) and substitutions that pertain to libc++
itself (e.g. the path to libc++ headers). This split and the top-level
composition of a site config file are incremental steps towards
decoupling the test suite from libc++'s own build.
[libc++][NFC] Fix synopsis comment for error_condition::message() (#210724)
The method was marked as noexcept in the synopsis, but it's neither
marked noexcept in the spec nor in our implementation.
repo: open catalogue read-only when checking validity
pkg_repo_binary_update opened the repo DB read-write just to sanity
check it, even when no update was needed. Open read-only instead;
the actual read-write open in pkg_repo_binary_init_update already
runs only after new data is fetched.
[flang][PFT-to-MLIR] lazily allocate label-target blocks in branch lowering
Problem
-------
Under -mmlir --wrap-unstructured-constructs-in-execute-region, branch
lowering can hit a null Evaluation::block for a branch target. For
example, genMultiwayBranch trips
Bridge.cpp: Assertion `block && "missing multiway branch block"' failed
and genFIR(SelectCaseStmt) trips
Bridge.cpp: Assertion `e->block && "missing CaseStmt block"' failed
The wrap machinery decides an unstructured DO/IF is wrappable and
therefore stops propagating its isUnstructured flag to the enclosing
construct. The enclosing construct's isUnstructured stays false, so the
top-level createEmptyBlocks does not recurse into its body. If that
enclosing construct's lowering then takes over the body itself instead
[14 lines not shown]
[VPlan] Detect contiguous accesses in outer loop VPlan path. (#203790)
Use SCEV analysis on VPValue pointer operands to detect stride-1 memory
accesses in the outer loop vectorization path. When a load or store
address is an affine AddRec w.r.t. the vectorized outer loop with stride
equal to the element size, mark it as consecutive so it generates a wide
load/store instead of a gather/scatter.
For example, in the column-scaling pattern:
```
for (i = 0; i < N; i++) // outer: vectorized
for (j = 0; j < M; j++) // inner: uniform
A[i*M+j] *= scale[i];
```
The access scale[i] is now correctly identified as contiguous and
generates a vector load instead of a masked gather.
PR: https://github.com/llvm/llvm-project/pull/203790
[SelectionDAG] Fold VECREDUCE_AND/OR/XOR of a constant BUILD_VECTOR (#210883)
Follows up on #207560 and #210126
Adds constant folding for `ISD::VECREDUCE_AND`, `ISD::VECREDUCE_OR`, and
`ISD::VECREDUCE_XOR` in SelectionDAG::FoldConstantArithmetic when the
input is a BUILD_VECTOR of integer constants. Does not fold undef/poison
elements.
Fixes #209108
[VPlan] Move lowering transforms to VPlanLowering.cpp (NFC) (#209885)
Following up to https://github.com/llvm/llvm-project/pull/209883,
move transformations related to lowering/preparing for execution
to VPlanLowering.cpp
This moves materialize*, convertToConcreteRecipes,
dissolveLoopRegions, expandBranchOnTwoConds,
replaceWideCanonicalIVWithWideIV, expandSCEVsToVPInstructions,
addBranchWeightToMiddleTerminator and the alias-mask materialization helpers.
The createScalarIVSteps and scalarizeVPWidenPointerInduction are
promoted to vputils.
Depends on https://github.com/llvm/llvm-project/pull/209883
[llvm-ir2vec] Adding metadata for llvm-ir2vec python binding wheel builds (#194222)
The next step is to setup the metadata for the wheel building process,
and subsequently follow it up with workflow jobs that can automate this.
tests: add repo_filelist_data regression test
Verify that data.pkg never contains file lists or directories
regardless of --list-files, and that -l still generates the file
database (files.pkg) listing the package files.
repo: keep file lists out of the data catalog
The data catalog (data.pkg) and per-package manifest must not contain
file lists or directories; those belong only to the file database emitted
via -l/--list-files. Emit the data catalog in compact form so data.pkg
is identical whether or not --list-files is used. Previously -l caused the
full +MANIFEST (with files) to be read and re-emitted into data, ballooning
the catalog (e.g. a full i386 repo grew from ~60MB to ~2GB).
py-jsonrpclib-pelix: updated to 1.1.0
1.1
- Fixed access to error message in results
- Allow the request query ID to be set to 0 or empty string
- Allow the definition of a classes registry to restrict dynamic imports
- Allow the definition of a maximum content length to reject large requests
- Overall code review
- Disable `cjson` and `simplejson` tests on Python 3.15
py-jaraco.test: updated to 5.7.0
v5.7.0
Features
- Added ``ensure_checkout`` fixture in ``jaraco.test.git`` to skip a test unless the project is a git checkout with an ``origin`` remote.
Revert "[RISCV] Run EarlyMachineLICM before VLOptimizer to hoist constant splats" (#210937)
Reverts llvm/llvm-project#210028
I've bisected the hangs on rva20 to this commit:
https://lab.llvm.org/buildbot/#/builders/210/builds/11806
[clang] Add flag for making pointer subtraction defined (#196392)
The C and C++ standards require both operands of pointer subtraction to
refer to elements of the same array object. Clang/LLVM currently relies
on this rule in several optimizations:
- `inbounds` GEP introduces UB assumptions once the computed address
escapes the originating object bounds.
- `sdiv exact` assumes %op1 is divisable by %op2 otherwise it is a
poison value.
The first issue may be addressed with -fwrapv-pointer command line
option, however there is no option in clang to mitigate the second
issue. Patch adds a new -fdefined-pointer-subtraction to address this.