Skip to content

[AArch64] Remove SME/SVE uses of FMVDependencies #93695

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

Merged
merged 5 commits into from
Jun 3, 2024

Conversation

tmatheson-arm
Copy link
Contributor

@tmatheson-arm tmatheson-arm commented May 29, 2024

When FMV was added to AArch64, it added a dependency expansion step after the -cc1 command line was parsed but before Sema, in AArch64TargetInfo::initFeatureMap. One effect of this is that -target-features specified on the -cc1 command line had some level of incomplete and broken dependency expansion. Since then, many tests have been added which depend on this behaviour.

The dependency expansion can be considered broken at this stage because dependency expansion is already performed by the driver to generate the -target-feature flags using an ExtensionSet. This class does dependency evaluation and then generates a flattened representation of the dependency graph in the form of -target-features, which are passed to -cc1 in an arbitrary order (determined by the order of bits in the bitset). Any dependency expansion done after -cc1 will be inherently contradictory. It is impossible to accurately treat negative features once the dependency graph has been flattened and the order randomised.

This patch fixes a large number of those tests, specifically ones where only a dependent feature (e.g. -target-feature +sme2p1) was added to the test -cc1 command, and not the necessary dependencies (e.g. -target-feature +sme). Here is an example of the typical error that occurs with such tests when the dependency expansion is removed:

RUN: at line 4: /ssd/llvm/main/build/bin/clang -cc1 -internal-isystem /ssd/llvm/main/build/lib/clang/19/include -nostdsysteminc -fclang-abi-compat=latest -triple aarch64 -target-feature +sve2 -O1 -Werror -Wall -emit-llvm -o - /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c | /ssd/llvm/main/build/bin/FileCheck /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
+ /ssd/llvm/main/build/bin/clang -cc1 -internal-isystem /ssd/llvm/main/build/lib/clang/19/include -nostdsysteminc -fclang-abi-compat=latest -triple aarch64 -target-feature +sve2 -O1 -Werror -Wall -emit-llvm -o - /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
+ /ssd/llvm/main/build/bin/FileCheck /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint8_t' (aka '__SVInt8_t') cannot be used in a target without sve
   28 | svint8_t test_svrsubhnt_s16(svint8_t op1, svint16_t op2, svint16_t op3)
      |          ^
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint8_t' (aka '__SVInt8_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:43:11: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
   43 | svint16_t test_svrsubhnt_s32(svint16_t op1, svint32_t op2, svint32_t op3)
      |           ^

The tests have been updated in a mechanical change with the following script:

#!/usr/bin/env python3

import re


FILES = [
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvtn.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fmlas16.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fp_dots.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_frint.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_int_dots.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_max.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_maxnm.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_min.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_minnm.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mla.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlal.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlall.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mls.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlsl.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mop.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mopa_nonwide.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_read.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_reinterpret_svcount_svbool.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sqdmulh.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sub.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vdot.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_add.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_qrshr.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_rshl.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_write.c",
    "clang/test/CodeGen/aarch64-sme2p1-intrinsics/acle_sme2p1_zero.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aba.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adalp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aese.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesimc.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesmc.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bcax.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bdep.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bext.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bgrp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl1n.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl2n.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cdot.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cmla.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtx.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtxnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eor3.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eorbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eortb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histcnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histseg.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsubr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1ub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_logb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_match.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxnmp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minnmp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mla.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mls.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mul.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nbsl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nmatch.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmul.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb_128.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt_128.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qabs.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qcadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmulh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qneg.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdcmlah.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlah.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlsh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmulh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshlu.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsubr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rax1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_recpe.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_revd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rhadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsqrte.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsra.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sli.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4e.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4ekey.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sqadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sra.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sri.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1b.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1h.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1w.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subltb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_uqadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilege.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilegt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_xar.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfadd.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmax.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmaxnm.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmin.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfminnm.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmlsl.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfsub.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_cntp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dot.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dupq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_extq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fp_reduce.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_int_reduce.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1_single.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ldnt1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_loads.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pext.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pfalse.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pmov_to_pred.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pmov_to_vector.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_psel_svcount.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_psel.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ptrue.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_qcvtn.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_qrshr.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_sclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_set2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_set4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_st1_single.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_st1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_stnt1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_store.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_tblq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_tbxq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_undef_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uzpq1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uzpq2.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_while_pn.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_while_x2.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_zipq1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_zipq2.c",
    "clang/test/CodeGen/arm-vector_type-params-returns.c",
    "clang/test/Sema/aarch64-incompat-sm-builtin-calls.c",
    "clang/test/Sema/aarch64-sme-func-attrs.c",
    "clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_b16b16.cpp",
    "clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_imm.cpp",
    "clang/test/Sema/aarch64-sme2p1-diagnostics.c",
    "clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_bfloat.cpp",
    "clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_n.cpp",
    "clang/test/Sema/aarch64-sve2p1-intrinsics/acle_sve2p1_imm.cpp",
]


def update_runline(runline: str):
    target_features = re.findall(r"-target-feature ([+-][\w-]+)\b", runline)
    if not target_features:
        # Nothing to do
        return runline

    print(f"Features: {target_features}")
    print(f"old runline: {runline}")

    sme2_dependent = (
        "+sme2p1" in target_features
        or "+sme-f64f64" in target_features
        or "+sme-i16i64" in target_features
    )
    sve2_dependent = (
        "+sve2p1" in target_features
        or "+sve2-aes" in target_features
        or "+sve2-bitperm" in target_features
        or "+sve2-sha3" in target_features
        or "+sve2-sm4" in target_features
    )
    sme2 = "+sme2" in target_features
    sve2 = "+sve2" in target_features
    sme = "+sme" in target_features
    sve = "+sve" in target_features
    bf16 = "+bf16" in target_features

    if sme2_dependent and not sme2:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sme2 ", runline, 1
        )
        sme2 = True

    if sve2_dependent and not sve2:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sve2 ", runline, 1
        )
        sve2 = True

    if sme2 and not sme:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sme ", runline, 1
        )
        sme = True

    if sve2 and not sve:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sve ", runline, 1
        )
        sve = True

    if sme and not bf16:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +bf16 ", runline, 1
        )
        bf16 = True

    print(f"new runline: {runline}")
    return runline


def main():
    for filename in FILES:
        print(f"-------- {filename} --------")
        with open(filename, "r") as input_file:
            lines = input_file.readlines()
        with open(filename, "w") as output_file:
            for line in lines:
                if line.startswith("// RUN: "):
                    line = update_runline(line)
                output_file.write(line)


if __name__ == "__main__":
    main()

The list of erroneous tests was generated by applying c0371ab, which effectively disables dependency expansion at this stage except for FMV attributes (target_versions and target_clonse), and seeing which tests break.

c0371ab is not part of this patch, because it would break tests for the target attribute, which now also depends on the same mechanism to work. To fix this, dependency expansion needs to be added to the handling of the target attribute and removed from initFeatureMap, but that will be a separate PR. Fixing these tests is NFC from a user-perspective and will make future work easier.

Here is a list of tests broken by c0371ab that are not fixed in this PR:

    # These look like tests that can't be fixed automatically like this.
    # diagnostics seen but not expected:
    "clang/test/CodeGen/aarch64-targetattr-crypto.c",
    "clang/test/Sema/aarch64-sme-func-attrs-without-target-feature.cpp",
    "clang/test/Sema/aarch64-sme2-sve2p1-diagnostics.c",
    "clang/test/Sema/aarch64-sve-intrinsics/acle_sve_target.cpp",
    "clang/test/Sema/arm-sve-target.cpp",
    # Tests where the target features string has changed:
    "clang/test/CodeGen/aarch64-cpu-supports-target.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/aarch64-sme-attrs.cpp",
    "clang/test/CodeGen/aarch64-targetattr.c",
    "clang/test/CodeGen/attr-target-clones-aarch64.c",

@tmatheson-arm tmatheson-arm requested a review from labrinea May 29, 2024 14:51
This reverts commit c0371ab.

This was just used to find tests which are broken, it should not be part
of this patch.
@tmatheson-arm tmatheson-arm marked this pull request as ready for review May 30, 2024 14:40
@llvmbot llvmbot added clang Clang issues not falling into any other category backend:AArch64 labels May 30, 2024
@llvmbot
Copy link
Member

llvmbot commented May 30, 2024

@llvm/pr-subscribers-clang

@llvm/pr-subscribers-backend-aarch64

Author: Tomas Matheson (tmatheson-arm)

Changes

When FMV was added to AArch64, it added a dependency expansion step after the -cc1 command line was parsed but before Sema, in AArch64TargetInfo::initFeatureMap. One effect of this is that -target-features specified on the -cc1 command line had some level of incomplete and broken dependency expansion. Since then, many tests have been added which depend on this behaviour.

The dependency expansion can be considered broken at this stage because dependency expansion is already performed by the driver to generate the -target-feature flags using an ExtensionSet. This class does dependency evaluation and then generates a flattened representation of the dependency graph in the form of -target-features, which are passed to -cc1 in an arbitrary order (determined by the order of bits in the bitset). Any dependency expansion done after -cc1 will be inherently contradictory. It is impossible to accurately treat negative features once the dependency graph has been flattened and the order randomised.

This patch fixes a large number of those tests, specifically ones where only a dependent feature (e.g. -target-feature +sme2p1) was added to the test -cc1 command, and not the necessary dependencies (e.g. -target-feature +sme). Here is an example of the typical error that occurs with such tests when the dependency expansion is removed:

RUN: at line 4: /ssd/llvm/main/build/bin/clang -cc1 -internal-isystem /ssd/llvm/main/build/lib/clang/19/include -nostdsysteminc -fclang-abi-compat=latest -triple aarch64 -target-feature +sve2 -O1 -Werror -Wall -emit-llvm -o - /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c | /ssd/llvm/main/build/bin/FileCheck /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
+ /ssd/llvm/main/build/bin/clang -cc1 -internal-isystem /ssd/llvm/main/build/lib/clang/19/include -nostdsysteminc -fclang-abi-compat=latest -triple aarch64 -target-feature +sve2 -O1 -Werror -Wall -emit-llvm -o - /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
+ /ssd/llvm/main/build/bin/FileCheck /ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint8_t' (aka '__SVInt8_t') cannot be used in a target without sve
   28 | svint8_t test_svrsubhnt_s16(svint8_t op1, svint16_t op2, svint16_t op3)
      |          ^
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:28:10: error: SVE vector type 'svint8_t' (aka '__SVInt8_t') cannot be used in a target without sve
/ssd/llvm/main/clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c:43:11: error: SVE vector type 'svint16_t' (aka '__SVInt16_t') cannot be used in a target without sve
   43 | svint16_t test_svrsubhnt_s32(svint16_t op1, svint32_t op2, svint32_t op3)
      |           ^

The tests have been updated in a mechanical change with the following script:

#!/usr/bin/env python3

import re


FILES = [
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvtn.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fmlas16.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fp_dots.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_frint.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_int_dots.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_max.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_maxnm.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_min.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_minnm.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mla.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlal.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlall.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mls.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlsl.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mop.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mopa_nonwide.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_read.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_reinterpret_svcount_svbool.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sqdmulh.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sub.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vdot.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_add.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_qrshr.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_rshl.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx2.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx4.c",
    "clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_write.c",
    "clang/test/CodeGen/aarch64-sme2p1-intrinsics/acle_sme2p1_zero.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set3-bfloat.c",
    "clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set4-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aba.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adalp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adclt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aese.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesimc.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesmc.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bcax.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bdep.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bext.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bgrp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl1n.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl2n.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cdot.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cmla.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtx.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtxnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eor3.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eorbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eortb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histcnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histseg.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsubr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1ub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_logb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_match.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxnmp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minnmp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minp.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mla.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mls.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mul.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nbsl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nmatch.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmul.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb_128.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt_128.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qabs.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qcadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmulh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qneg.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdcmlah.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlah.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlsh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmulh.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshlu.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsub.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsubr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rax1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_recpe.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_revd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rhadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshl.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsqrte.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsra.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sli.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4e.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4ekey.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sqadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sra.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sri.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1b.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1h.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1w.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublbt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subltb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwb.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_uqadd.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilege.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilegt.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr-bfloat.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr.c",
    "clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_xar.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfadd.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmax.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmaxnm.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmin.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfminnm.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmlsl.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul_lane.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfsub.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_cntp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dot.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dupq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_extq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fp_reduce.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_int_reduce.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1_single.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ldnt1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_loads.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pext.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pfalse.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pmov_to_pred.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_pmov_to_vector.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_psel_svcount.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_psel.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ptrue.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_qcvtn.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_qrshr.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_sclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_set2_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_set4_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_st1_single.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_st1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_stnt1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_store.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_tblq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_tbxq.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uclamp.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_undef_bool.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uzpq1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_uzpq2.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_while_pn.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_while_x2.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_zipq1.c",
    "clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_zipq2.c",
    "clang/test/CodeGen/arm-vector_type-params-returns.c",
    "clang/test/Sema/aarch64-incompat-sm-builtin-calls.c",
    "clang/test/Sema/aarch64-sme-func-attrs.c",
    "clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_b16b16.cpp",
    "clang/test/Sema/aarch64-sme2-intrinsics/acle_sme2_imm.cpp",
    "clang/test/Sema/aarch64-sme2p1-diagnostics.c",
    "clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_bfloat.cpp",
    "clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_n.cpp",
    "clang/test/Sema/aarch64-sve2p1-intrinsics/acle_sve2p1_imm.cpp",
]


def update_runline(runline: str):
    target_features = re.findall(r"-target-feature ([+-][\w-]+)\b", runline)
    if not target_features:
        # Nothing to do
        return runline

    print(f"Features: {target_features}")
    print(f"old runline: {runline}")

    sme2_dependent = (
        "+sme2p1" in target_features
        or "+sme-f64f64" in target_features
        or "+sme-i16i64" in target_features
    )
    sve2_dependent = (
        "+sve2p1" in target_features
        or "+sve2-aes" in target_features
        or "+sve2-bitperm" in target_features
        or "+sve2-sha3" in target_features
        or "+sve2-sm4" in target_features
    )
    sme2 = "+sme2" in target_features
    sve2 = "+sve2" in target_features
    sme = "+sme" in target_features
    sve = "+sve" in target_features
    bf16 = "+bf16" in target_features

    if sme2_dependent and not sme2:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sme2 ", runline, 1
        )
        sme2 = True

    if sve2_dependent and not sve2:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sve2 ", runline, 1
        )
        sve2 = True

    if sme2 and not sme:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sme ", runline, 1
        )
        sme = True

    if sve2 and not sve:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +sve ", runline, 1
        )
        sve = True

    if sme and not bf16:
        runline = re.sub(
            r"(?=-target-feature \+[\w-]+\b)", "-target-feature +bf16 ", runline, 1
        )
        bf16 = True

    print(f"new runline: {runline}")
    return runline


def main():
    for filename in FILES:
        print(f"-------- {filename} --------")
        with open(filename, "r") as input_file:
            lines = input_file.readlines()
        with open(filename, "w") as output_file:
            for line in lines:
                if line.startswith("// RUN: "):
                    line = update_runline(line)
                output_file.write(line)


if __name__ == "__main__":
    main()

The list of erroneous tests was generated by applying c0371ab, which effectively disables dependency expansion at this stage except for FMV attributes (target_versions and target_clonse), and seeing which tests break.

c0371ab is not part of this patch, because it would break tests for the target attribute, which now also depends on the same mechanism to work. To fix this, dependency expansion needs to be added to the handling of the target attribute and removed from initFeatureMap, but that will be a separate PR. Fixing these tests is NFC from a user-perspective and will make future work easier.

Here is a list of tests broken by c0371ab that are not fixed in this PR:

    # These look like tests that can't be fixed automatically like this.
    # diagnostics seen but not expected:
    "clang/test/CodeGen/aarch64-targetattr-crypto.c",
    "clang/test/Sema/aarch64-sme-func-attrs-without-target-feature.cpp",
    "clang/test/Sema/aarch64-sme2-sve2p1-diagnostics.c",
    "clang/test/Sema/aarch64-sve-intrinsics/acle_sve_target.cpp",
    "clang/test/Sema/arm-sve-target.cpp",
    # Tests where the target features string has changed:
    "clang/test/CodeGen/aarch64-cpu-supports-target.c",
    "clang/test/CodeGen/aarch64-sme-intrinsics/aarch64-sme-attrs.cpp",
    "clang/test/CodeGen/aarch64-targetattr.c",
    "clang/test/CodeGen/attr-target-clones-aarch64.c",

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

280 Files Affected:

  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvtn.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fmlas16.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_fp_dots.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_frint.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_int_dots.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x2.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti2_lane_zt_x4.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x2.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_luti4_lane_zt_x4.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_max.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_maxnm.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_min.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_minnm.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mla.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlal.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlall.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mls.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mlsl.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mop.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_mopa_nonwide.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_read.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_reinterpret_svcount_svbool.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sqdmulh.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_sub.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx2.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_unpkx4.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vdot.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_add.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_qrshr.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_rshl.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx2.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_selx4.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx2.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_uzpx4.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx2.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_vector_zipx4.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_write.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sme2p1-intrinsics/acle_sme2p1_zero.c (+3-3)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create3-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_create4-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get3-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_get4-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set2-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set3-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_set4-bfloat.c (+1-1)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aba.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abalt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_abdlt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_adalp.c (+4-4)
  • (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 (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addhnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlbt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addlt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_addwt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aese.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesimc.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_aesmc.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bcax.c (+4-4)
  • (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 (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl1n.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_bsl2n.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cdot.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cmla.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtlt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtx.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_cvtxnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eor3.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eorbt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_eortb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histcnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_histseg.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsub.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_hsubr.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1sw.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1ub.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_ldnt1uw.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_logb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_match.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxnmp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_maxp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minnmp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_minp.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mla.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlalt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mls.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mlslt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_movlt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mul.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_mullt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nbsl.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_nmatch.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_pmul.c (+4-4)
  • (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 (+4-4)
  • (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 (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qabs.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qcadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalbt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlalt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslbt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmlslt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmulh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qdmullt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qneg.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdcmlah.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlah.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmlsh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrdmulh.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshl.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qrshrunt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshl.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshlu.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qshrunt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsub.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qsubr.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_qxtunt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_raddhnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rax1.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_recpe.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_revd.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rhadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshl.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshr.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rshrnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsqrte.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsra.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_rsubhnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sbclt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shllt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_shrnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sli.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4e.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sm4ekey.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sqadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sra.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sri.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1b.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1h.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_stnt1w.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subhnt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublbt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_sublt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subltb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwb.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_subwt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2-bfloat.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbl2.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx-bfloat.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_tbx.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_uqadd.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilege.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilegt.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw-bfloat.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilerw.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr-bfloat.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_whilewr.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2-intrinsics/acle_sve2_xar.c (+4-4)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfadd.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfclamp.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmax.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmaxnm.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmin.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfminnm.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmla_lane.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmls_lane.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmlsl.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfmul_lane.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_bfsub.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_cntp.c (+7-7)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create2_bool.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_create4_bool.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dot.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_dupq.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_extq.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fclamp.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_fp_reduce.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get2_bool.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_get4_bool.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_int_reduce.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1.c (+8-8)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ld1_single.c (+5-5)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_ldnt1.c (+6-6)
  • (modified) clang/test/CodeGen/aarch64-sve2p1-intrinsics/acle_sve2p1_loads.c (+5-5)
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 b911c27914414..c341ff9bb29e6 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
@@ -1,10 +1,10 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-i16i64 -S -O1 -Werror -o /dev/null %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -S -O1 -Werror -o /dev/null %s
 
 #include <arm_sme.h>
 
diff --git a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c
index 37d5d73e97a6b..61c41450d6457 100644
--- a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c
+++ b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c
@@ -1,10 +1,10 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -S -O1 -Werror -o /dev/null %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -S -O1 -Werror -o /dev/null %s
 
 #include <arm_sme.h>
 
diff --git a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c
index 72c63bc3389a7..9d205beb05f28 100644
--- a/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c
+++ b/clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c
@@ -1,10 +1,10 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -S -O1 -Werror -o /dev/null %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - %s | FileCheck %s -check-prefixes=CHECK,CHECK-C
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSME_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -O1 -Werror -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefixes=CHECK,CHECK-CXX
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +sme2 -target-feature +sme-f64f64 -target-feature +sme-i16i64 -target-feature +bf16 -S -O1 -Werror -o /dev/null %s
 
 #include <arm_sme.h>
 
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp b/clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp
index ccf05de7f4e90..15b9ac42cbcf3 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/aarch64-sme2-attrs.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 \
+// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 \
 // RUN:   -disable-O0-optnone -Werror -emit-llvm -o - %s \
 // RUN: | opt -S -passes=mem2reg \
 // RUN: | opt -S -passes=inline \
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c
index 1dec2d6957a5f..135bcf743e5e6 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add.c
@@ -2,11 +2,11 @@
 
 // REQUIRES: aarch64-registered-target
 
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
+// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
+// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-i16i64 -target-feature +sme-f64f64 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
 
 #include <arm_sme.h>
 
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c
index 9a8aa448d3780..6336f435b8687 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_add_sub_za16.c
@@ -1,10 +1,10 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
-// RUN: %clang_cc1                               -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1                        -x c++ -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature  +sme-f8f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-CXX
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS        -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature  +sme-f8f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -x c++ -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-CXX
+// RUN: %clang_cc1                               -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1                        -x c++ -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature  +sme-f8f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-CXX
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS        -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature  +sme-f8f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -x c++ -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -Werror -Wall -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK-CXX
 
-// RUN: %clang_cc1                               -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -S -Werror -Wall -o /dev/null
+// RUN: %clang_cc1                               -fclang-abi-compat=latest -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +sme-f16f16 -target-feature +b16b16 -O2 -S -Werror -Wall -o /dev/null
 
 // REQUIRES: aarch64-registered-target
 
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c
index 47ff02eb9fb5a..84521e7e47644 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_bmop.c
@@ -2,11 +2,11 @@
 
 // REQUIRES: aarch64-registered-target
 
-// RUN: %clang_cc1 -triple aarch64 -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -triple aarch64 -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -triple aarch64 -target-feature +sme2 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
+// RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
+// RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
+// RUN: %clang_cc1 -triple aarch64 -target-feature +bf16 -target-feature +sme -target-feature +sme2 -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
 
 #include <arm_sme.h>
 
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c
index 21a8229bbf244..30d963d5425c4 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_clamp.c
@@ -1,14 +1,14 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +b16b16 \
+// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +b16b16 \
 // RUN:  -Werror -emit-llvm -disable-O0-optnone -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +b16b16 \
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +b16b16 \
 // RUN:  -Werror -emit-llvm -disable-O0-optnone -o - %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s
-// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +b16b16 \
+// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +b16b16 \
 // RUN:  -Werror -emit-llvm -disable-O0-optnone -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +b16b16 \
+// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +b16b16 \
 // RUN:  -Werror -emit-llvm -disable-O0-optnone -o - -x c++ %s | opt -S -p mem2reg,instcombine,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
-// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sme2 -target-feature +b16b16 \
+// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +bf16 -target-feature +sme -target-feature +sme2 -target-feature +b16b16 \
 // RUN:  -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
 
 #include <arm_sme.h>
diff --git a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c
index e26499d3a63cc..686e4f4f99afe 100644
--- a/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c
+++ b/clang/test/CodeGen/aarch64-sme2-intrinsics/acle_sme2_cvt.c
@@ -2,11 +2,11 @...
[truncated]

Copy link
Contributor

@pratlucas pratlucas left a comment

Choose a reason for hiding this comment

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

The changes look good to me. Good catch spotting the inconsistency in the dependency expansion after the extension set is flattened.

This reverts commit 55d3820.

The target attribute still depends on these, in particular for +sve2p1.
Copy link
Collaborator

@labrinea labrinea left a comment

Choose a reason for hiding this comment

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

I am also supporting this change. We have been trying to refactor attribute parsing for target/target_clones/target_version, as well as the target-feature expansion which happens due to these attributes. It's a huge mess. Sorting such test inconsistencies will help make the next steps.

@tmatheson-arm tmatheson-arm merged commit 875e911 into llvm:main Jun 3, 2024
7 checks passed
@tmatheson-arm tmatheson-arm deleted the fix_sme_sve_tests branch June 3, 2024 13:53
labrinea added a commit to labrinea/llvm-project that referenced this pull request Jun 3, 2024
The dependency expansion step which was introduced by FMV has been
erroneously used for non-FMV features, for example when parsing the
target attribute. The PR llvm#93695 has rectified most of the tests which
were relying on dependency expansion of target features specified on
the -cc1 command line. In this patch I am decoupling the dependency
expansion of features specified on the target attribute from FMV.

To do that first I am expanding FMV dependencies before passing the
list of target features to initFeatureMap(). Similarly when parsing
the target attribute I am reconstructing an ExtensionSet from the
list of target features which was created during the command line
option parsing. The attribute parsing may toggle bits of that
ExtensionSet and at the end it is converted to a list of target
features. Those are passed to initFeatureMap(), which no longer
requires an override.

A side effect of this refactoring is that features specified on the
target_version attribute now supersede the command line options,
which is what should be happening in the first place.
labrinea added a commit to labrinea/llvm-project that referenced this pull request Jun 3, 2024
The dependency expansion step which was introduced by FMV has been
erroneously used for non-FMV features, for example when parsing the
target attribute. The PR llvm#93695 has rectified most of the tests which
were relying on dependency expansion of target features specified on
the -cc1 command line. In this patch I am decoupling the dependency
expansion of features specified on the target attribute from FMV.

To do that first I am expanding FMV dependencies before passing the
list of target features to initFeatureMap(). Similarly when parsing
the target attribute I am reconstructing an ExtensionSet from the
list of target features which was created during the command line
option parsing. The attribute parsing may toggle bits of that
ExtensionSet and at the end it is converted to a list of target
features. Those are passed to initFeatureMap(), which no longer
requires an override.

A side effect of this refactoring is that features specified on the
target_version attribute now supersede the command line options,
which is what should be happening in the first place.
labrinea added a commit that referenced this pull request Jun 10, 2024
The dependency expansion step which was introduced by FMV has been
erroneously used for non-FMV features, for example when parsing the
target attribute. The PR #93695 has rectified most of the tests which
were relying on dependency expansion of target features specified on the
-cc1 command line. In this patch I am decoupling the dependency
expansion of features specified on the target attribute from FMV.

To do that first I am expanding FMV dependencies before passing the list
of target features to initFeatureMap(). Similarly when parsing the
target attribute I am reconstructing an ExtensionSet from the list of
target features which was created during the command line option
parsing. The attribute parsing may toggle bits of that ExtensionSet and
at the end it is converted to a list of target features. Those are
passed to initFeatureMap(), which no longer requires an override.

A side effect of this refactoring is that features specified on the
target_version attribute now supersede the command line options, which
is what should be happening in the first place.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:AArch64 clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants