[clang] [CIR][AArch64] Add lowering for unpredicated svdup builtins (PR #174433)

Andrzej Warzyński via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 6 11:43:48 PST 2026


banach-space wrote:

Thanks for taking a look and for the feedback!

> I have some questions that might be naive, but I'm not following how much of the simplification you intend to be permanent and how much is just not yet implemented with regard to `SVETypeFlags`. Can you explain this in a bit more detail if it isn't needed.

These are very good and very welcome questions - thanks for raising them.

To clarify upfront: the simplification is not intended to be permanent. We will be using SVETypeFlags in the near future. At the moment, I’m intentionally focusing on the most basic builtins/intrinsics that don’t meaningfully depend on these flags, mainly to better understand and validate the CIR flow first.

The set of available flags is defined in [arm_sve_sme_incl.td](https://github.com/llvm/llvm-project/blob/188507e54218c91832714fc50b24bd2fc2fd9383/clang/include/clang/Basic/arm_sve_sme_incl.td?plain=1#L206-L244) and the mapping between builtins/intrinsics and those flags lives in  [arm_sve.td](https://github.com/llvm/llvm-project/blob/188507e54218c91832714fc50b24bd2fc2fd9383/clang/include/clang/Basic/arm_sve.td). For example, for [`svdup`](https://developer.arm.com/architectures/instruction-sets/intrinsics/#q=svdup): https://github.com/llvm/llvm-project/blob/188507e54218c91832714fc50b24bd2fc2fd9383/clang/include/clang/Basic/arm_sve.td?plain=1#L515-L527

As you can see, the only attached “type flag” there is [VerifyRuntimeMode](https://github.com/llvm/llvm-project/blob/188507e54218c91832714fc50b24bd2fc2fd9383/clang/include/clang/Basic/arm_sve_sme_incl.td?plain=1#L237). This flag is not used in codegen - it is handled in Sema and relates to streaming vs non-streaming mode, which is relevant in the context of [SME](https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-scalable-matrix-extension-introduction).

In contrast, there are builtins where `SVETypeFlags` are essential for communicating semantic differences, notably gathers and scatters: https://github.com/llvm/llvm-project/blob/188507e54218c91832714fc50b24bd2fc2fd9383/clang/lib/CodeGen/TargetBuiltins/ARM.cpp?plain=1#L4606-L4607

I’ll address the remaining points inline.

https://github.com/llvm/llvm-project/pull/174433


More information about the cfe-commits mailing list