[NFC][LLVM] Eliminate use of `getIntrinsicInfoTableEntries` from CloneFunction.cpp (#195448)
Simplify creation of constrained intrinsic calls by just using
`getOrInsertDeclaration` that accepts arg and return types of an
intrinsic and hence eliminating the need to look at the IIT descriptors
to map overload types.
[NFC][LLVM][Intrinsics] Add `hasStructReturnType` helper (#195457)
Add a helper function to query if an intrinsic has a struct return type
and use it in AutoUpgrade
[NFC][LLVM] Make `matchIntrinsicSignature` static and rename it (#195380)
Make `matchIntrinsicSignature` static, rename it to `isSignatureValid`,
and change the sense of its return value to match the new name.
[LLVM][Intrinsic] Move overload index validation to C++ (#195297)
Move overload index validation to C++ to enable more descriptive error
messages when that validation fails.
Also delete the `intrinsic-arginfo-error.td` test as its redundant.
[JITLink][Docs] Update roadmap and availability sections (#195446)
This patch updates the JITLink documentation, in particular the
`Roadmap` and `JITLink Availability and Feature Status` to match the
latest code changes. I am not an expert on the JITLink codebase, so let
me know if I missed something.
Fixes #191781
[LV] Add test for cost modeling wide calls with mixed return types (NFC) (#195177)
Add missing test coverage for test with multiple calls with different
return types
[VPlan] Dissolve replicate regions with vector live-outs. (#189022)
Remove the scalar VF restriction and properly handle replicate regions
with vector live outs.
After unrolling the replicate regions, we end up with a set of scalar
VPPhis. The current patch post-processes them and converts them to
a chain of InsertElement + VPWidenPHiRecipes to match original codegen
as closely as possible.
An alternative would be to keep the phis scalar and combine them with
BuildVector at the end, but that would result in quite different
codegen.
Now that ::execute for replicate regions is dead, clean up
VPTransformState::Lane and various ::execute that relied on it.
Depends on https://github.com/llvm/llvm-project/pull/186252
PR: https://github.com/llvm/llvm-project/pull/189022
[DebugInfo] Fix crash in declare-to-assign when memcpy writes to scalable-vector alloca (#194107)
## Problem
`declare-to-assign` (`AssignmentTrackingPass`) crashes with a fatal error when a fixed-size `memcpy` writes into a scalable-vector alloca (e.g. an RVV `vint32m1_t`):
Cannot implicitly convert a scalable size to a fixed-width size in TypeSize::operator ScalarTy()
**PS**: The compiler explorer always implicitly adds the '-g' option, when adding the '-g0', the crash will disappear: https://riscvc.godbolt.org/z/dEqhc4EoE
**Reproducer** (clang `-target riscv64-unknown-linux-gnu -march=rv64gcv -O1 -g`):
```c
#include <string.h>
#include <riscv_vector.h>
vint32m1_t get_i32x4(int* v) {
vint32m1_t r;
memcpy(&r, v, 16);
return r;
}
[13 lines not shown]
[llubi] Fix inconsistent intrinsic argument retrieval (#195499)
This PR fixes inconsistent intrinsic argument retrieval by making all
intrinsics fetch their arguments from `Args`. This change is a
prerequisite for handling parameter attributes in `enterCall`.
workflows/release-binaries: Remove extra depencies for Arm64 Windows (#195222)
The python modules these were needed for were removed in
cdc41818e3bd9e8cb7788d59365e39fe6433159e.
[LifetimeSafety] Detect iterator invalidation through container aliases (#195231)
The previous heuristic in `handleInvalidatingCall` is too conservative.
The ideal way would be completely removing this, but it would introduce
~10 regressions in the existing testcases.
This commit replace the filter with a narrower guard that only skips
direct field accesses (AccessPath currently lacks field granularity and
cannot distinguish `s.v1` from `s.v2`).
Closes https://github.com/llvm/llvm-project/issues/193044
[RFC][IR] Support vector splats in `ConstantPointerNull`
This PR allows `ConstantPointerNull` to represent both scalar pointer nulls and
fixed or scalable vector splats of pointer nulls. This change first aligns with
the native splat behavior of `ConstantInt` and `ConstantFP`, and second, makes
it easier to eventually change the semantics of `ConstantPointerNull` to
represent a semantic null pointer instead of a zero value, which is what it
represents today.
[NFC][TableGen] Drop OperandInfo::addField/fields() wrappers and use OperandInfo::Fields instead (#195489)
Fields is already a public member; the wrappers added no semantic value
beyond a thin storage indirection (and ArrayRef-typed reads). Use Fields
directly at all call sites for consistency with the rest of the struct's
plain-data style.
Assisted by Claude.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply at anthropic.com>
[RFC][IR] Support vector splats in `ConstantPointerNull`
This PR allows `ConstantPointerNull` to represent both scalar pointer nulls and
fixed or scalable vector splats of pointer nulls. This change first aligns with
the native splat behavior of `ConstantInt` and `ConstantFP`, and second, makes
it easier to eventually change the semantics of `ConstantPointerNull` to
represent a semantic null pointer instead of a zero value, which is what it
represents today.
[RFC][IR] Support vector splats in `ConstantPointerNull`
This PR allows `ConstantPointerNull` to represent both scalar pointer nulls and
fixed or scalable vector splats of pointer nulls. This change first aligns with
the native splat behavior of `ConstantInt` and `ConstantFP`, and second, makes
it easier to eventually change the semantics of `ConstantPointerNull` to
represent a semantic null pointer instead of a zero value, which is what it
represents today.