Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CXXNameMangler] Correct the mangling of SVE ACLE types within function names. #69460

Merged
merged 6 commits into from
Oct 24, 2023

Conversation

paulwalker-arm
Copy link
Collaborator

  • Mark SVE ACLE types as substitution candidates.
  • Change mangling of svbfloat16_t from __SVBFloat16_t to
    __SVBfloat16_t.

https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst

This is an ABI break with the old behaviour available via
"-fclang-abi-compat=17".

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels Oct 18, 2023
@llvmbot
Copy link
Member

llvmbot commented Oct 18, 2023

@llvm/pr-subscribers-clang

Author: Paul Walker (paulwalker-arm)

Changes
  • Mark SVE ACLE types as substitution candidates.
  • Change mangling of svbfloat16_t from __SVBFloat16_t to
    __SVBfloat16_t.

https://github.com/ARM-software/abi-aa/blob/main/aapcs64/aapcs64.rst

This is an ABI break with the old behaviour available via
"-fclang-abi-compat=17".


Patch is 2.04 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/69460.diff

286 Files Affected:

  • (modified) clang/include/clang/Basic/AArch64SVEACLETypes.def (+1-1)
  • (modified) clang/lib/AST/ItaniumMangle.cpp (+14-3)
  • (modified) clang/test/AST/ast-dump-aarch64-sve-types.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za32.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_read.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_write.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_abd.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_abs.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_acge.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_acgt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_acle.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_aclt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_add.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_adrb.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_adrd.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_adrh.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_adrw.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_and.c (+25-25)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bfdot.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bfmlalb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bfmlalt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bfmmla.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bic.c (+25-25)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_brka.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_brkb.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_brkn.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_brkpa.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_brkpb.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cadd.c (+10-10)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_clasta-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_clasta.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_clastb-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_clastb.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_clz.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmla.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmpeq.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmpge.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmpgt.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmple.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmplt.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmpne.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cmpuo.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cnot.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cnt-bfloat.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cntp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create2.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create3-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create3.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create4-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create4.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cvt-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_cvtnt.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_div.c (+21-21)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_divr.c (+21-21)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_dot.c (+10-10)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_dup-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_dupq-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_eor.c (+25-25)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ext-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ext.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_extb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_exth.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_extw.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_insr-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_lasta-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_lastb-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_lsl.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_lsr.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mad.c (+66-66)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_matmul_fp32.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_matmul_fp64.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_max.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_maxnm.c (+9-9)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_min.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_minnm.c (+9-9)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mla.c (+72-72)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mls.c (+72-72)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mmla.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mov.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_msb.c (+66-66)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mul.c (+39-39)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mulh.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_mulx.c (+9-9)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nand.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_neg.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nmad.c (+18-18)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nmla.c (+18-18)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nmls.c (+18-18)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nmsb.c (+18-18)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_nor.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_not.c (+9-9)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_orn.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_orr.c (+25-25)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_pfirst.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_pnext.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ptest.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_qadd.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_qsub.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rbit.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_recps.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_recpx.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_reinterpret-bfloat.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rev-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_revb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_revh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_revw.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rinta.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rinti.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rintm.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rintn.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rintp.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rintx.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rintz.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rsqrts.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_sel-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_sel.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set2-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set3-bfloat.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set4-bfloat.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_splice-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_splice.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_sqrt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_st1-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_st1.c (+14-14)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_stnt1-bfloat.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_sub.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_subr.c (+33-33)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_tbl-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_tbl.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_tmad.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2-fp64-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2-fp64.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2.c (+15-15)
  • (modified) clang/test/CodeGen/aarch64-sve.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aba.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlbt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addp.c (+22-22)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesd.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aese.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bcax.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bdep.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bext.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bgrp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl1n.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl2n.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cadd.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cdot.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cmla.c (+40-40)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eor3.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eorbt.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eortb.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hadd.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histcnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histseg.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsub.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsubr.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_match.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxnmp.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxp.c (+22-22)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minnmp.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minp.c (+22-22)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mla.c (+11-11)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalb.c (+17-17)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalt.c (+17-17)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mls.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslb.c (+17-17)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslt.c (+17-17)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mul.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullb.c (+14-14)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullt.c (+14-14)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nbsl.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nmatch.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmul.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb_128.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt_128.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qabs.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qadd.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qcadd.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalb.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalbt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalt.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslb.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslbt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslt.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmulh.c (+10-10)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullb.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullt.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qneg.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdcmlah.c (+20-20)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlah.c (+14-14)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlsh.c (+14-14)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmulh.c (+10-10)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshl.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshl.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsub.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsubr.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rax1.c (+2-2)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_recpe.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rhadd.c (+24-24)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshl.c (+12-12)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsqrte.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsra.c (+16-16)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnb.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclb.c (+4-4)
diff --git a/clang/include/clang/Basic/AArch64SVEACLETypes.def b/clang/include/clang/Basic/AArch64SVEACLETypes.def
index 56af270e1d10aad..fa9c1ac0491c454 100644
--- a/clang/include/clang/Basic/AArch64SVEACLETypes.def
+++ b/clang/include/clang/Basic/AArch64SVEACLETypes.def
@@ -71,7 +71,7 @@ SVE_VECTOR_TYPE("__SVFloat16_t", "__SVFloat16_t", SveFloat16, SveFloat16Ty, 8, 1
 SVE_VECTOR_TYPE("__SVFloat32_t", "__SVFloat32_t", SveFloat32, SveFloat32Ty, 4, 32, true, true, false)
 SVE_VECTOR_TYPE("__SVFloat64_t", "__SVFloat64_t", SveFloat64, SveFloat64Ty, 2, 64, true, true, false)
 
-SVE_VECTOR_TYPE("__SVBFloat16_t", "__SVBFloat16_t", SveBFloat16, SveBFloat16Ty, 8, 16, true, false, true)
+SVE_VECTOR_TYPE("__SVBfloat16_t", "__SVBfloat16_t", SveBFloat16, SveBFloat16Ty, 8, 16, true, false, true)
 
 //
 // x2
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index 8862f4d4fbd7bf9..8124630346a39f2 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -2889,6 +2889,10 @@ static bool isTypeSubstitutable(Qualifiers Quals, const Type *Ty,
     return true;
   if (Ty->isOpenCLSpecificType())
     return true;
+  // From Clang 18.0 we correctly treat SVE types as substitution candidates.
+  if (Ty->isSVESizelessBuiltinType() &&
+      Ctx.getLangOpts().getClangABICompat() > LangOptions::ClangABI::Ver17)
+    return true;
   if (Ty->isBuiltinType())
     return false;
   // Through to Clang 6.0, we accidentally treated undeduced auto types as
@@ -3372,9 +3376,16 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
 #define SVE_VECTOR_TYPE(InternalName, MangledName, Id, SingletonId, NumEls,    \
                         ElBits, IsSigned, IsFP, IsBF)                          \
   case BuiltinType::Id:                                                        \
-    type_name = MangledName;                                                   \
-    Out << (type_name == InternalName ? "u" : "") << type_name.size()          \
-        << type_name;                                                          \
+    if (T->getKind() == BuiltinType::SveBFloat16 &&                            \
+        isCompatibleWith(LangOptions::ClangABI::Ver17)) {                      \
+      /* Prior to Clang 18.0 we used this incorrect mangled name */            \
+      type_name = "__SVBFloat16_t";                                            \
+      Out << "u" << type_name.size() << type_name;                             \
+    } else {                                                                   \
+      type_name = MangledName;                                                 \
+      Out << (type_name == InternalName ? "u" : "") << type_name.size()        \
+          << type_name;                                                        \
+    }                                                                          \
     break;
 #define SVE_PREDICATE_TYPE(InternalName, MangledName, Id, SingletonId, NumEls) \
   case BuiltinType::Id:                                                        \
diff --git a/clang/test/AST/ast-dump-aarch64-sve-types.c b/clang/test/AST/ast-dump-aarch64-sve-types.c
index dd14868c42b9bb0..b5a0b00b492803d 100644
--- a/clang/test/AST/ast-dump-aarch64-sve-types.c
+++ b/clang/test/AST/ast-dump-aarch64-sve-types.c
@@ -42,8 +42,8 @@
 // CHECK: TypedefDecl {{.*}} implicit __SVFloat64_t '__SVFloat64_t'
 // CHECK-NEXT: -BuiltinType {{.*}} '__SVFloat64_t'
 
-// CHECK: TypedefDecl {{.*}} implicit __SVBFloat16_t '__SVBFloat16_t'
-// CHECK-NEXT: -BuiltinType {{.*}} '__SVBFloat16_t'
+// CHECK: TypedefDecl {{.*}} implicit __SVBfloat16_t '__SVBfloat16_t'
+// CHECK-NEXT: -BuiltinType {{.*}} '__SVBfloat16_t'
 
 // CHECK: TypedefDecl {{.*}} implicit __SVBool_t '__SVBool_t'
 // CHECK-NEXT: -BuiltinType {{.*}} '__SVBool_t'
diff --git a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c
index 1b181bd59e7c846..cf4ec7afe3d7d9a 100644
--- a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c
+++ b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c
@@ -22,7 +22,7 @@
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv4i32(i32 0, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za32_u32u10__SVBool_tu10__SVBool_tu12__SVUint32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za32_u32u10__SVBool_tS_u12__SVUint32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -42,7 +42,7 @@ void test_svaddha_za32_u32(svbool_t pn, svbool_t pm, svuint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv4i32(i32 3, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za32_u32_1u10__SVBool_tu10__SVBool_tu12__SVUint32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za32_u32_1u10__SVBool_tS_u12__SVUint32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -62,7 +62,7 @@ void test_svaddha_za32_u32_1(svbool_t pn, svbool_t pm, svuint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv4i32(i32 0, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za32_s32u10__SVBool_tu10__SVBool_tu11__SVInt32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za32_s32u10__SVBool_tS_u11__SVInt32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -82,7 +82,7 @@ void test_svaddha_za32_s32(svbool_t pn, svbool_t pm, svint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv4i32(i32 3, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za32_s32_1u10__SVBool_tu10__SVBool_tu11__SVInt32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za32_s32_1u10__SVBool_tS_u11__SVInt32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -102,7 +102,7 @@ void test_svaddha_za32_s32_1(svbool_t pn, svbool_t pm, svint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv4i32(i32 0, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za32_u32u10__SVBool_tu10__SVBool_tu12__SVUint32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za32_u32u10__SVBool_tS_u12__SVUint32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -122,7 +122,7 @@ void test_svaddva_za32_u32(svbool_t pn, svbool_t pm, svuint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv4i32(i32 3, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za32_u32_1u10__SVBool_tu10__SVBool_tu12__SVUint32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za32_u32_1u10__SVBool_tS_u12__SVUint32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -142,7 +142,7 @@ void test_svaddva_za32_u32_1(svbool_t pn, svbool_t pm, svuint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv4i32(i32 0, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za32_s32u10__SVBool_tu10__SVBool_tu11__SVInt32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za32_s32u10__SVBool_tS_u11__SVInt32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
@@ -162,7 +162,7 @@ void test_svaddva_za32_s32(svbool_t pn, svbool_t pm, svint32_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv4i32(i32 3, <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i1> [[TMP1]], <vscale x 4 x i32> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za32_s32_1u10__SVBool_tu10__SVBool_tu11__SVInt32_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za32_s32_1u10__SVBool_tS_u11__SVInt32_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 4 x i32> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PN]])
diff --git a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c
index fdccafbebf006b2..ce866fc7a090592 100644
--- a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c
+++ b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c
@@ -22,7 +22,7 @@
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv2i64(i32 0, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za64_u64u10__SVBool_tu10__SVBool_tu12__SVUint64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za64_u64u10__SVBool_tS_u12__SVUint64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -42,7 +42,7 @@ void test_svaddha_za64_u64(svbool_t pn, svbool_t pm, svuint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv2i64(i32 7, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za64_u64_1u10__SVBool_tu10__SVBool_tu12__SVUint64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za64_u64_1u10__SVBool_tS_u12__SVUint64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -62,7 +62,7 @@ void test_svaddha_za64_u64_1(svbool_t pn, svbool_t pm, svuint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv2i64(i32 0, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za64_s64u10__SVBool_tu10__SVBool_tu11__SVInt64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddha_za64_s64u10__SVBool_tS_u11__SVInt64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -82,7 +82,7 @@ void test_svaddha_za64_s64(svbool_t pn, svbool_t pm, svint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addha.nxv2i64(i32 7, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za64_s64_1u10__SVBool_tu10__SVBool_tu11__SVInt64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddha_za64_s64_1u10__SVBool_tS_u11__SVInt64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -102,7 +102,7 @@ void test_svaddha_za64_s64_1(svbool_t pn, svbool_t pm, svint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv2i64(i32 0, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za64_u64u10__SVBool_tu10__SVBool_tu12__SVUint64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za64_u64u10__SVBool_tS_u12__SVUint64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -122,7 +122,7 @@ void test_svaddva_za64_u64(svbool_t pn, svbool_t pm, svuint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv2i64(i32 7, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za64_u64_1u10__SVBool_tu10__SVBool_tu12__SVUint64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za64_u64_1u10__SVBool_tS_u12__SVUint64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -142,7 +142,7 @@ void test_svaddva_za64_u64_1(svbool_t pn, svbool_t pm, svuint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv2i64(i32 0, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za64_s64u10__SVBool_tu10__SVBool_tu11__SVInt64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svaddva_za64_s64u10__SVBool_tS_u11__SVInt64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
@@ -162,7 +162,7 @@ void test_svaddva_za64_s64(svbool_t pn, svbool_t pm, svint64_t zn) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.addva.nxv2i64(i32 7, <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i64> [[ZN]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za64_s64_1u10__SVBool_tu10__SVBool_tu11__SVInt64_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z23test_svaddva_za64_s64_1u10__SVBool_tS_u11__SVInt64_t(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 2 x i64> [[ZN:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PN]])
diff --git a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c
index f1382b699f637a8..02ce353291a82ca 100644
--- a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c
+++ b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c
@@ -20,7 +20,7 @@
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.smopa.wide.nxv16i8(i32 0, <vscale x 16 x i1> [[PN]], <vscale x 16 x i1> [[PM]], <vscale x 16 x i8> [[ZN]], <vscale x 16 x i8> [[ZM]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z19test_svmopa_za32_s8u10__SVBool_tu10__SVBool_tu10__SVInt8_tu10__SVInt8_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z19test_svmopa_za32_s8u10__SVBool_tS_u10__SVInt8_tS0_(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 16 x i8> [[ZN:%.*]], <vscale x 16 x i8> [[ZM:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    tail call void @llvm.aarch64.sme.smopa.wide.nxv16i8(i32 0, <vscale x 16 x i1> [[PN]], <vscale x 16 x i1> [[PM]], <vscale x 16 x i8> [[ZN]], <vscale x 16 x i8> [[ZM]])
@@ -36,7 +36,7 @@ void test_svmopa_za32_s8(svbool_t pn, svbool_t pm, svint8_t zn, svint8_t zm) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.umopa.wide.nxv16i8(i32 0, <vscale x 16 x i1> [[PN]], <vscale x 16 x i1> [[PM]], <vscale x 16 x i8> [[ZN]], <vscale x 16 x i8> [[ZM]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z19test_svmopa_za32_u8u10__SVBool_tu10__SVBool_tu11__SVUint8_tu11__SVUint8_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z19test_svmopa_za32_u8u10__SVBool_tS_u11__SVUint8_tS0_(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 16 x i8> [[ZN:%.*]], <vscale x 16 x i8> [[ZM:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    tail call void @llvm.aarch64.sme.umopa.wide.nxv16i8(i32 0, <vscale x 16 x i1> [[PN]], <vscale x 16 x i1> [[PM]], <vscale x 16 x i8> [[ZN]], <vscale x 16 x i8> [[ZM]])
@@ -54,7 +54,7 @@ void test_svmopa_za32_u8(svbool_t pn, svbool_t pm, svuint8_t zn, svuint8_t zm) {
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.mopa.wide.nxv8bf16(i32 0, <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i1> [[TMP1]], <vscale x 8 x bfloat> [[ZN]], <vscale x 8 x bfloat> [[ZM]])
 // CHECK-C-NEXT:    ret void
 //
-// CHECK-CXX-LABEL: define dso_local void @_Z21test_svmopa_za32_bf16u10__SVBool_tu10__SVBool_tu14__SVBFloat16_tu14__SVBFloat16_t(
+// CHECK-CXX-LABEL: define dso_local void @_Z21test_svmopa_za32_bf16u10__SVBool_tS_u14__SVBfloat16_tS0_(
 // CHECK-CXX-SAME: <vscale x 16 x i1> [[PN:%.*]], <vscale x 16 x i1> [[PM:%.*]], <vscale x 8 x bfloat> [[ZN:%.*]], <vscale x 8 x bfloat> [[ZM:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // CHECK-CXX-NEXT:  entry:
 // CHECK-CXX-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PN]])
@@ -74,7 +74,7 @@ void test_svmopa_za32_bf16(svbool_t pn, svbool_t pm, svbfloat16_t zn, svbfloat16
 // CHECK-C-NEXT:    tail call void @llvm.aarch64.sme.mopa.wide.nxv8f16(i32 1, <vscale x 8 x i1> [[TMP0]], <...
[truncated]

@paulwalker-arm
Copy link
Collaborator Author

To aid review I've split the patch into several commits mainly so the mechanical update of 200+ ACLE tests is separate from the much smaller code changes. Given this is an ABI break I'd rather land the series as a single commit.

Copy link
Contributor

@david-arm david-arm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! An outstanding work of art @paulwalker-arm!

@paulwalker-arm
Copy link
Collaborator Author

I've updated the release note to remove bogus references to a function's return type affecting its name mangling.

@paulwalker-arm paulwalker-arm merged commit 72561b3 into llvm:main Oct 24, 2023
3 checks passed
@paulwalker-arm paulwalker-arm deleted the acle-type-mangling branch November 2, 2023 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants