Skip to content

Commit 377be5e

Browse files
[WIP] fix up feature flags
1 parent c3929fb commit 377be5e

File tree

7 files changed

+55
-39
lines changed

7 files changed

+55
-39
lines changed

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ include "AArch64SystemOperands.td"
5858

5959
class AArch64Unsupported { list<Predicate> F; }
6060

61-
let F = [HasSVE2p1, HasSVE2p1_or_SME2, HasSVE2p1_or_SME2p1] in
61+
let F = [HasSVE2p1, HasSVE2p1_or_SME2, HasSVE2p1_or_SME2p1, HasSVE2p1_or_StreamingSME2] in
6262
def SVE2p1Unsupported : AArch64Unsupported;
6363

6464
def SVE2Unsupported : AArch64Unsupported {
65-
let F = !listconcat([HasSVE2, HasSVE2_or_SME, HasSVE2_or_SME2, HasSSVE_FP8FMA, HasSMEF8F16,
65+
let F = !listconcat([HasSVE2, HasSVE2_or_SME, HasNonStreamingSVE2_or_SME2, HasSSVE_FP8FMA, HasSMEF8F16,
6666
HasSMEF8F32, HasSVEAES, HasSVE2SHA3, HasSVE2SM4, HasSVEBitPerm,
6767
HasSVEB16B16],
6868
SVE2p1Unsupported.F);
@@ -80,14 +80,14 @@ def SME2p2Unsupported : AArch64Unsupported;
8080
def SME2p1Unsupported : AArch64Unsupported {
8181
let F = !listconcat([HasSME2p1, HasSVE2p1_or_SME2p1,
8282
HasSME_MOP4, HasSME_TMOP, HasNonStreamingSVE_or_SSVE_FEXPA,
83-
HasNonStreamingSVE2_or_SSVE_BitPerm],
83+
HasNonStreamingSVEBitPerm_or_SSVE_BitPerm],
8484
SME2p2Unsupported.F);
8585
}
8686

8787
def SME2Unsupported : AArch64Unsupported {
88-
let F = !listconcat([HasSME2, HasSVE2_or_SME2, HasSVE2p1_or_SME2, HasSSVE_FP8FMA,
88+
let F = !listconcat([HasSME2, HasNonStreamingSVE2_or_SME2, HasSVE2p1_or_SME2, HasSSVE_FP8FMA,
8989
HasSMEF8F16, HasSMEF8F32, HasSMEF16F16_or_SMEF8F16, HasSMEB16B16,
90-
HasNonStreamingSVE2_or_SSVE_AES],
90+
HasNonStreamingSVE2_or_SSVE_AES, HasSVE2p1_or_StreamingSME2],
9191
SME2p1Unsupported.F);
9292
}
9393

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -249,22 +249,23 @@ def HasSVE_or_SME
249249
AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSME),
250250
"sve or sme">;
251251
def HasNonStreamingSVE_or_SME2p2
252-
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE()) ||"
252+
: Predicate<"Subtarget->isSVEAvailable() ||"
253253
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSME2p2())">,
254254
AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSME2p2),
255255
"sve or sme2p2">;
256256
def HasNonStreamingSVE_or_SSVE_FEXPA
257-
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE()) ||"
257+
: Predicate<"Subtarget->isSVEAvailable() ||"
258258
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_FEXPA())">,
259259
AssemblerPredicateWithAll<(any_of FeatureSVE, FeatureSSVE_FEXPA),
260260
"sve or ssve-fexpa">;
261261

262262
def HasSVE2_or_SME
263-
: Predicate<"Subtarget->hasSVE2() || (Subtarget->isStreaming() && Subtarget->hasSME())">,
263+
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable() && (Subtarget->hasSVE2() || Subtarget->hasSME())">,
264264
AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSME),
265265
"sve2 or sme">;
266-
def HasSVE2_or_SME2
267-
: Predicate<"Subtarget->hasSVE2() || (Subtarget->isStreaming() && Subtarget->hasSME2())">,
266+
def HasNonStreamingSVE2_or_SME2
267+
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE2()) ||"
268+
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSME2())">,
268269
AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSME2),
269270
"sve2 or sme2">;
270271
def HasNonStreamingSVE2_or_SSVE_AES
@@ -274,17 +275,22 @@ def HasNonStreamingSVE2_or_SSVE_AES
274275
"sve2 or ssve-aes">;
275276

276277
def HasSVE2p1_or_SME
277-
: Predicate<"Subtarget->hasSVE2p1() || (Subtarget->isStreaming() && Subtarget->hasSME())">,
278+
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable() && (Subtarget->hasSVE2p1() || Subtarget->hasSME())">,
278279
AssemblerPredicateWithAll<(any_of FeatureSME, FeatureSVE2p1),
279280
"sme or sve2p1">;
280281
def HasSVE2p1_or_SME2
281-
: Predicate<"Subtarget->hasSVE2p1() || (Subtarget->isStreaming() && Subtarget->hasSME2())">,
282+
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable() && (Subtarget->hasSVE2p1() || Subtarget->hasSME2())">,
282283
AssemblerPredicateWithAll<(any_of FeatureSME2, FeatureSVE2p1),
283284
"sme2 or sve2p1">;
284285
def HasSVE2p1_or_SME2p1
285-
: Predicate<"Subtarget->hasSVE2p1() || (Subtarget->isStreaming() && Subtarget->hasSME2p1())">,
286+
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable() && (Subtarget->hasSVE2p1() || Subtarget->hasSME2p1())">,
286287
AssemblerPredicateWithAll<(any_of FeatureSME2p1, FeatureSVE2p1),
287288
"sme2p1 or sve2p1">;
289+
def HasSVE2p1_or_StreamingSME2
290+
: Predicate<"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSVE2p1()) ||"
291+
"(Subtarget->isStreaming() && Subtarget->hasSME2())">,
292+
AssemblerPredicateWithAll<(any_of FeatureSME2, FeatureSVE2p1),
293+
"sme2 or sve2p1">;
288294

289295
def HasSVE2p2_or_SME2p2
290296
: Predicate<"Subtarget->isSVEorStreamingSVEAvailable() && (Subtarget->hasSVE2p2() || Subtarget->hasSME2p2())">,
@@ -300,8 +306,8 @@ def HasSMEF16F16_or_SMEF8F16
300306
: Predicate<"Subtarget->isStreaming() && (Subtarget->hasSMEF16F16() || Subtarget->hasSMEF8F16())">,
301307
AssemblerPredicateWithAll<(any_of FeatureSMEF16F16, FeatureSMEF8F16),
302308
"sme-f16f16 or sme-f8f16">;
303-
def HasNonStreamingSVE2_or_SSVE_BitPerm
304-
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVE2()) ||"
309+
def HasNonStreamingSVEBitPerm_or_SSVE_BitPerm
310+
: Predicate<"(Subtarget->isSVEAvailable() && Subtarget->hasSVEBitPerm()) ||"
305311
"(Subtarget->isSVEorStreamingSVEAvailable() && Subtarget->hasSSVE_BitPerm())">,
306312
AssemblerPredicateWithAll<(any_of FeatureSVE2, FeatureSSVE_BitPerm),
307313
"sve2 or ssve-bitperm">;

llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,13 +930,16 @@ defm FMLS_VG4_M4ZZ_H : sme2_dot_mla_add_sub_array_vg4_single<"fmls", 0b0111101,
930930
defm FMLS_VG2_M2Z2Z_H : sme2_dot_mla_add_sub_array_vg2_multi<"fmls", 0b0100011, MatrixOp16, ZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmls_vg1x2>;
931931
defm FMLS_VG4_M4Z4Z_H : sme2_dot_mla_add_sub_array_vg4_multi<"fmls", 0b0100011, MatrixOp16, ZZZZ_h_mul_r, nxv8f16, int_aarch64_sme_fmls_vg1x4>;
932932

933-
defm FCVT_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvt", 0b0>;
934-
defm FCVTL_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvtl", 0b1>;
935933

936934
defm FMOPA_MPPZZ_H : sme2p1_fmop_tile_fp16<"fmopa", 0b0, 0b0, nxv8f16, int_aarch64_sme_mopa>;
937935
defm FMOPS_MPPZZ_H : sme2p1_fmop_tile_fp16<"fmops", 0b0, 0b1, nxv8f16, int_aarch64_sme_mops>;
938936
}
939937

938+
let Predicates = [HasSMEF16F16] in {
939+
defm FCVT_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvt", 0b0>;
940+
defm FCVTL_2ZZ_H : sme2p1_fp_cvt_vector_vg2_single<"fcvtl", 0b1>;
941+
}
942+
940943
// SME2 ZA-targeting non-widening BFloat16 instructions
941944
let Predicates = [HasSMEB16B16] in {
942945
defm BFADD_VG2_M2Z_H : sme2_multivec_accum_add_sub_vg2<"bfadd", 0b1100, MatrixOp16, ZZ_h_mul_r, nxv8bf16, int_aarch64_sme_add_za16_vg1x2>;

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4092,7 +4092,7 @@ let Predicates = [HasSVE2SHA3] in {
40924092
defm RAX1_ZZZ_D : sve2_crypto_cons_bin_op<0b1, "rax1", ZPR64, int_aarch64_sve_rax1, nxv2i64>;
40934093
} // End HasSVE2SHA3
40944094

4095-
let Predicates = [HasSVEBitPerm, HasNonStreamingSVE2_or_SSVE_BitPerm] in {
4095+
let Predicates = [HasSVEBitPerm, HasNonStreamingSVEBitPerm_or_SSVE_BitPerm] in {
40964096
// SVE2 bitwise permute
40974097
defm BEXT_ZZZ : sve2_misc_bitwise<0b1100, "bext", int_aarch64_sve_bext_x>;
40984098
defm BDEP_ZZZ : sve2_misc_bitwise<0b1101, "bdep", int_aarch64_sve_bdep_x>;
@@ -4154,18 +4154,29 @@ defm UDOT_ZZZ_HtoS : sve2p1_two_way_dot_vv<"udot", 0b1, int_aarch64_sve_udot_x2
41544154
defm SDOT_ZZZI_HtoS : sve2p1_two_way_dot_vvi<"sdot", 0b0, int_aarch64_sve_sdot_lane_x2>;
41554155
defm UDOT_ZZZI_HtoS : sve2p1_two_way_dot_vvi<"udot", 0b1, int_aarch64_sve_udot_lane_x2>;
41564156

4157-
defm CNTP_XCI : sve2p1_pcount_pn<"cntp", 0b000>;
4158-
defm PEXT_PCI : sve2p1_pred_as_ctr_to_mask<"pext", int_aarch64_sve_pext>;
4159-
defm PEXT_2PCI : sve2p1_pred_as_ctr_to_mask_pair<"pext">;
4160-
defm PTRUE_C : sve2p1_ptrue_pn<"ptrue">;
4161-
41624157
defm SQCVTN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"sqcvtn", 0b00, int_aarch64_sve_sqcvtn_x2>;
41634158
defm UQCVTN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"uqcvtn", 0b01, int_aarch64_sve_uqcvtn_x2>;
41644159
defm SQCVTUN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"sqcvtun", 0b10, int_aarch64_sve_sqcvtun_x2>;
41654160
defm SQRSHRN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"sqrshrn", 0b101, int_aarch64_sve_sqrshrn_x2>;
41664161
defm UQRSHRN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"uqrshrn", 0b111, int_aarch64_sve_uqrshrn_x2>;
41674162
defm SQRSHRUN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"sqrshrun", 0b001, int_aarch64_sve_sqrshrun_x2>;
41684163

4164+
defm WHILEGE_2PXX : sve2p1_int_while_rr_pair<"whilege", 0b000>;
4165+
defm WHILEGT_2PXX : sve2p1_int_while_rr_pair<"whilegt", 0b001>;
4166+
defm WHILELT_2PXX : sve2p1_int_while_rr_pair<"whilelt", 0b010>;
4167+
defm WHILELE_2PXX : sve2p1_int_while_rr_pair<"whilele", 0b011>;
4168+
defm WHILEHS_2PXX : sve2p1_int_while_rr_pair<"whilehs", 0b100>;
4169+
defm WHILEHI_2PXX : sve2p1_int_while_rr_pair<"whilehi", 0b101>;
4170+
defm WHILELO_2PXX : sve2p1_int_while_rr_pair<"whilelo", 0b110>;
4171+
defm WHILELS_2PXX : sve2p1_int_while_rr_pair<"whilels", 0b111>;
4172+
} // End HasSVE2p1_or_SME2
4173+
4174+
let Predicates = [HasSVE2p1_or_StreamingSME2] in {
4175+
defm CNTP_XCI : sve2p1_pcount_pn<"cntp", 0b000>;
4176+
defm PEXT_PCI : sve2p1_pred_as_ctr_to_mask<"pext", int_aarch64_sve_pext>;
4177+
defm PEXT_2PCI : sve2p1_pred_as_ctr_to_mask_pair<"pext">;
4178+
defm PTRUE_C : sve2p1_ptrue_pn<"ptrue">;
4179+
41694180
// Load to two registers
41704181
defm LD1B_2Z : sve2p1_mem_cld_ss_2z<"ld1b", 0b00, 0b0, ZZ_b_mul_r, GPR64shifted8, ZZ_b_strided_and_contiguous>;
41714182
defm LD1H_2Z : sve2p1_mem_cld_ss_2z<"ld1h", 0b01, 0b0, ZZ_h_mul_r, GPR64shifted16, ZZ_h_strided_and_contiguous>;
@@ -4289,14 +4300,6 @@ defm : store_pn_x4<nxv8bf16, int_aarch64_sve_stnt1_pn_x4, STNT1H_4Z_IMM>;
42894300
defm : store_pn_x4<nxv4f32, int_aarch64_sve_stnt1_pn_x4, STNT1W_4Z_IMM>;
42904301
defm : store_pn_x4<nxv2f64, int_aarch64_sve_stnt1_pn_x4, STNT1D_4Z_IMM>;
42914302

4292-
defm WHILEGE_2PXX : sve2p1_int_while_rr_pair<"whilege", 0b000>;
4293-
defm WHILEGT_2PXX : sve2p1_int_while_rr_pair<"whilegt", 0b001>;
4294-
defm WHILELT_2PXX : sve2p1_int_while_rr_pair<"whilelt", 0b010>;
4295-
defm WHILELE_2PXX : sve2p1_int_while_rr_pair<"whilele", 0b011>;
4296-
defm WHILEHS_2PXX : sve2p1_int_while_rr_pair<"whilehs", 0b100>;
4297-
defm WHILEHI_2PXX : sve2p1_int_while_rr_pair<"whilehi", 0b101>;
4298-
defm WHILELO_2PXX : sve2p1_int_while_rr_pair<"whilelo", 0b110>;
4299-
defm WHILELS_2PXX : sve2p1_int_while_rr_pair<"whilels", 0b111>;
43004303
defm WHILEGE_CXX : sve2p1_int_while_rr_pn<"whilege", 0b000>;
43014304
defm WHILEGT_CXX : sve2p1_int_while_rr_pn<"whilegt", 0b001>;
43024305
defm WHILELT_CXX : sve2p1_int_while_rr_pn<"whilelt", 0b010>;
@@ -4305,7 +4308,7 @@ defm WHILEHS_CXX : sve2p1_int_while_rr_pn<"whilehs", 0b100>;
43054308
defm WHILEHI_CXX : sve2p1_int_while_rr_pn<"whilehi", 0b101>;
43064309
defm WHILELO_CXX : sve2p1_int_while_rr_pn<"whilelo", 0b110>;
43074310
defm WHILELS_CXX : sve2p1_int_while_rr_pn<"whilels", 0b111>;
4308-
} // End HasSVE2p1_or_SME2
4311+
} // End HasSVE2p1_or_StreamingSME2
43094312

43104313
let Predicates = [HasSVE_or_SME] in {
43114314

@@ -4510,7 +4513,7 @@ let Predicates = [HasNonStreamingSVE2p2_or_SME2p2] in {
45104513
//===----------------------------------------------------------------------===//
45114514
// SVE2 FP8 instructions
45124515
//===----------------------------------------------------------------------===//
4513-
let Predicates = [HasSVE2_or_SME2, HasFP8] in {
4516+
let Predicates = [HasNonStreamingSVE2_or_SME2, HasFP8] in {
45144517
// FP8 upconvert
45154518
defm F1CVT_ZZ : sve2_fp8_cvt_single<0b0, 0b00, "f1cvt", nxv8f16, int_aarch64_sve_fp8_cvt1>;
45164519
defm F2CVT_ZZ : sve2_fp8_cvt_single<0b0, 0b01, "f2cvt", nxv8f16, int_aarch64_sve_fp8_cvt2>;
@@ -4527,15 +4530,15 @@ defm FCVTNB_Z2Z_StoB : sve2_fp8_down_cvt_single<0b01, "fcvtnb", ZZ_s_mul_r, nxv4
45274530
defm BFCVTN_Z2Z_HtoB : sve2_fp8_down_cvt_single<0b10, "bfcvtn", ZZ_h_mul_r, nxv8bf16, int_aarch64_sve_fp8_cvtn>;
45284531

45294532
defm FCVTNT_Z2Z_StoB : sve2_fp8_down_cvt_single_top<0b11, "fcvtnt", ZZ_s_mul_r, nxv4f32, int_aarch64_sve_fp8_cvtnt>;
4530-
} // End HasSVE2_or_SME2, HasFP8
4533+
} // End HasNonStreamingSVE2_or_SME2, HasFP8
45314534

4532-
let Predicates = [HasSVE2_or_SME2, HasFAMINMAX] in {
4535+
let Predicates = [HasNonStreamingSVE2_or_SME2, HasFAMINMAX] in {
45334536
defm FAMIN_ZPmZ : sve_fp_2op_p_zds<0b1111, "famin", "FAMIN_ZPZZ", int_aarch64_sve_famin, DestructiveBinaryComm>;
45344537
defm FAMAX_ZPmZ : sve_fp_2op_p_zds<0b1110, "famax", "FAMAX_ZPZZ", int_aarch64_sve_famax, DestructiveBinaryComm>;
45354538

45364539
defm FAMAX_ZPZZ : sve_fp_bin_pred_hfd<AArch64famax_p>;
45374540
defm FAMIN_ZPZZ : sve_fp_bin_pred_hfd<AArch64famin_p>;
4538-
} // End HasSVE2_or_SME2, HasFAMINMAX
4541+
} // End HasNonStreamingSVE2_or_SME2, HasFAMINMAX
45394542

45404543
let Predicates = [HasSSVE_FP8FMA] in {
45414544
// FP8 Widening Multiply-Add Long - Indexed Group
@@ -4579,14 +4582,14 @@ defm FDOT_ZZZI_BtoS : sve2_fp8_dot_indexed_s<"fdot", int_aarch64_sve_fp8_fdot_la
45794582
defm FDOT_ZZZ_BtoS : sve_fp8_dot<0b1, ZPR32, "fdot", nxv4f32, int_aarch64_sve_fp8_fdot>;
45804583
}
45814584

4582-
let Predicates = [HasSVE2_or_SME2, HasLUT] in {
4585+
let Predicates = [HasNonStreamingSVE2_or_SME2, HasLUT] in {
45834586
// LUTI2
45844587
defm LUTI2_ZZZI : sve2_luti2_vector_index<"luti2">;
45854588
// LUTI4
45864589
defm LUTI4_ZZZI : sve2_luti4_vector_index<"luti4">;
45874590
// LUTI4 (two contiguous registers)
45884591
defm LUTI4_Z2ZZI : sve2_luti4_vector_vg2_index<"luti4">;
4589-
} // End HasSVE2_or_SME2, HasLUT
4592+
} // End HasNonStreamingSVE2_or_SME2, HasLUT
45904593

45914594
//===----------------------------------------------------------------------===//
45924595
// Checked Pointer Arithmetic (FEAT_CPA)

llvm/test/CodeGen/AArch64/fp8-sve-cvtn.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
22
; RUN: llc -mattr=+sve2,+fp8 < %s | FileCheck %s
3+
; RUN: llc -mattr=+sve,+sme2,+fp8 < %s | FileCheck %s
34
; RUN: llc -mattr=+sme2,+fp8 --force-streaming < %s | FileCheck %s
45

56
target triple = "aarch64-linux"

llvm/test/CodeGen/AArch64/sve2-intrinsics-faminmax.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
22
; RUN: llc -mattr=+sve2 < %s | FileCheck %s
3+
; RUN: llc -mattr=+sve,+sme2 < %s | FileCheck %s
34
; RUN: llc -mattr=+sme2 -force-streaming < %s | FileCheck %s
45

56
target triple = "aarch64-linux"

llvm/test/CodeGen/AArch64/sve2-intrinsics-luti.ll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2-
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sve2,+lut,+bf16 | FileCheck %s
2+
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sve2,+lut | FileCheck %s
3+
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sve,+sme2,+lut | FileCheck %s
4+
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+sme2,+lut --force-streaming | FileCheck %s
35

46
define <vscale x 16 x i8> @test_luti2_lane_i8(<vscale x 16 x i8> %table, <vscale x 16 x i8> %indices){
57
; CHECK-LABEL: test_luti2_lane_i8:

0 commit comments

Comments
 (0)