74
74
// l: int64_t
75
75
// m: uint32_t
76
76
// n: uint64_t
77
- //
78
- // I: Predicate Pattern (sv_pattern)
79
77
80
- // l: int64_t
78
+ // t: svint32_t
79
+ // z: svuint32_t
80
+ // g: svuint64_t
81
+ // O: svfloat16_t
82
+ // M: svfloat32_t
83
+ // N: svfloat64_t
81
84
82
85
// A: pointer to int8_t
83
86
// B: pointer to int16_t
@@ -173,7 +176,6 @@ def IsOverloadWhileRW : FlagType<0x00400000>; // Use {pred(default type)
173
176
def IsOverloadCvt : FlagType<0x00800000>; // Use {typeof(operand0), typeof(last operand)} as overloaded types.
174
177
def OverloadKindMask : FlagType<0x00E00000>; // When the masked values are all '0', the default type is used as overload type.
175
178
def IsByteIndexed : FlagType<0x01000000>;
176
- def IsFPConvert : FlagType<0x02000000>;
177
179
178
180
// These must be kept in sync with the flags in include/clang/Basic/TargetBuiltins.h
179
181
class ImmCheckType<int val> {
@@ -558,15 +560,15 @@ def SVCMLA_LANE : SInst<"svcmla_lane[_{d}]", "ddddii", "hf", MergeNone, "aarch6
558
560
559
561
multiclass SInstCvtMXZ<
560
562
string name, string m_types, string xz_types, string types,
561
- string intrinsic, list<FlagType> flags = [IsFPConvert, IsOverloadNone]> {
563
+ string intrinsic, list<FlagType> flags = [IsOverloadNone]> {
562
564
def _M : SInst<name, m_types, types, MergeOp1, intrinsic, flags>;
563
565
def _X : SInst<name, xz_types, types, MergeAnyExp, intrinsic, flags>;
564
566
def _Z : SInst<name, xz_types, types, MergeZeroExp, intrinsic, flags>;
565
567
}
566
568
567
569
multiclass SInstCvtMX<string name, string m_types, string xz_types,
568
570
string types, string intrinsic,
569
- list<FlagType> flags = [IsFPConvert, IsOverloadNone]> {
571
+ list<FlagType> flags = [IsOverloadNone]> {
570
572
def _M : SInst<name, m_types, types, MergeOp1, intrinsic, flags>;
571
573
def _X : SInst<name, xz_types, types, MergeAnyExp, intrinsic, flags>;
572
574
}
@@ -581,7 +583,7 @@ defm SVFCVTZS_S32_F32 : SInstCvtMXZ<"svcvt_s32[_f32]", "ddPM", "dPM", "i", "aar
581
583
defm SVFCVTZS_S64_F32 : SInstCvtMXZ<"svcvt_s64[_f32]", "ddPM", "dPM", "l", "aarch64_sve_fcvtzs_i64f32">;
582
584
583
585
// svcvt_s##_f64
584
- defm SVFCVTZS_S32_F64 : SInstCvtMXZ<"svcvt_s32[_f64]", "ddPN ", "dPN ", "i ", "aarch64_sve_fcvtzs_i32f64">;
586
+ defm SVFCVTZS_S32_F64 : SInstCvtMXZ<"svcvt_s32[_f64]", "ttPd ", "tPd ", "d ", "aarch64_sve_fcvtzs_i32f64">;
585
587
defm SVFCVTZS_S64_F64 : SInstCvtMXZ<"svcvt_s64[_f64]", "ddPN", "dPN", "l", "aarch64_sve_fcvtzs", [IsOverloadCvt]>;
586
588
587
589
// svcvt_u##_f16
@@ -594,7 +596,7 @@ defm SVFCVTZU_U32_F32 : SInstCvtMXZ<"svcvt_u32[_f32]", "ddPM", "dPM", "Ui", "aar
594
596
defm SVFCVTZU_U64_F32 : SInstCvtMXZ<"svcvt_u64[_f32]", "ddPM", "dPM", "Ul", "aarch64_sve_fcvtzu_i64f32">;
595
597
596
598
// svcvt_u##_f64
597
- defm SVFCVTZU_U32_F64 : SInstCvtMXZ<"svcvt_u32[_f64]", "ddPN ", "dPN ", "Ui", "aarch64_sve_fcvtzu_i32f64">;
599
+ defm SVFCVTZU_U32_F64 : SInstCvtMXZ<"svcvt_u32[_f64]", "zzPd ", "zPd ", "d", "aarch64_sve_fcvtzu_i32f64">;
598
600
defm SVFCVTZU_U64_F64 : SInstCvtMXZ<"svcvt_u64[_f64]", "ddPN", "dPN", "Ul", "aarch64_sve_fcvtzu", [IsOverloadCvt]>;
599
601
600
602
// svcvt_f16_s##
@@ -607,7 +609,7 @@ defm SVFCVTZS_F32_S32 : SInstCvtMXZ<"svcvt_f32[_s32]", "MMPd", "MPd", "i", "aar
607
609
defm SVFCVTZS_F32_S64 : SInstCvtMXZ<"svcvt_f32[_s64]", "MMPd", "MPd", "l", "aarch64_sve_scvtf_f32i64">;
608
610
609
611
// svcvt_f64_s##
610
- defm SVFCVTZS_F64_S32 : SInstCvtMXZ<"svcvt_f64[_s32]", "NNPd ", "NPd ", "i ", "aarch64_sve_scvtf_f64i32">;
612
+ defm SVFCVTZS_F64_S32 : SInstCvtMXZ<"svcvt_f64[_s32]", "ddPt ", "dPt ", "d ", "aarch64_sve_scvtf_f64i32">;
611
613
defm SVFCVTZS_F64_S64 : SInstCvtMXZ<"svcvt_f64[_s64]", "NNPd", "NPd", "l", "aarch64_sve_scvtf", [IsOverloadCvt]>;
612
614
613
615
// svcvt_f16_u##
@@ -620,32 +622,32 @@ defm SVFCVTZU_F32_U32 : SInstCvtMXZ<"svcvt_f32[_u32]", "MMPd", "MPd", "Ui", "aar
620
622
defm SVFCVTZU_F32_U64 : SInstCvtMXZ<"svcvt_f32[_u64]", "MMPd", "MPd", "Ul", "aarch64_sve_ucvtf_f32i64">;
621
623
622
624
// svcvt_f64_u##
623
- defm SVFCVTZU_F64_U32 : SInstCvtMXZ<"svcvt_f64[_u32]", "NNPd ", "NPd ", "Ui", "aarch64_sve_ucvtf_f64i32">;
625
+ defm SVFCVTZU_F64_U32 : SInstCvtMXZ<"svcvt_f64[_u32]", "ddPz ", "dPz ", "d", "aarch64_sve_ucvtf_f64i32">;
624
626
defm SVFCVTZU_F64_U64 : SInstCvtMXZ<"svcvt_f64[_u64]", "NNPd", "NPd", "Ul", "aarch64_sve_ucvtf", [IsOverloadCvt]>;
625
627
626
628
// svcvt_f16_f##
627
629
defm SVFCVT_F16_F32 : SInstCvtMXZ<"svcvt_f16[_f32]", "OOPd", "OPd", "f", "aarch64_sve_fcvt_f16f32">;
628
630
defm SVFCVT_F16_F64 : SInstCvtMXZ<"svcvt_f16[_f64]", "OOPd", "OPd", "d", "aarch64_sve_fcvt_f16f64">;
629
631
630
632
// svcvt_f32_f##
631
- defm SVFCVT_F32_F16 : SInstCvtMXZ<"svcvt_f32[_f16]", "MMPd ", "MPd ", "h ", "aarch64_sve_fcvt_f32f16">;
633
+ defm SVFCVT_F32_F16 : SInstCvtMXZ<"svcvt_f32[_f16]", "ddPO ", "dPO ", "f ", "aarch64_sve_fcvt_f32f16">;
632
634
defm SVFCVT_F32_F64 : SInstCvtMXZ<"svcvt_f32[_f64]", "MMPd", "MPd", "d", "aarch64_sve_fcvt_f32f64">;
633
635
634
636
// svcvt_f64_f##
635
- defm SVFCVT_F64_F16 : SInstCvtMXZ<"svcvt_f64[_f16]", "NNPd ", "NPd ", "h ", "aarch64_sve_fcvt_f64f16">;
636
- defm SVFCVT_F64_F32 : SInstCvtMXZ<"svcvt_f64[_f32]", "NNPd ", "NPd ", "f ", "aarch64_sve_fcvt_f64f32">;
637
+ defm SVFCVT_F64_F16 : SInstCvtMXZ<"svcvt_f64[_f16]", "ddPO ", "dPO ", "d ", "aarch64_sve_fcvt_f64f16">;
638
+ defm SVFCVT_F64_F32 : SInstCvtMXZ<"svcvt_f64[_f32]", "ddPM ", "dPM ", "d ", "aarch64_sve_fcvt_f64f32">;
637
639
638
640
let ArchGuard = "defined(__ARM_FEATURE_SVE2)" in {
639
641
defm SVCVTLT_F32 : SInstCvtMX<"svcvtlt_f32[_f16]", "ddPh", "dPh", "f", "aarch64_sve_fcvtlt_f32f16">;
640
642
defm SVCVTLT_F64 : SInstCvtMX<"svcvtlt_f64[_f32]", "ddPh", "dPh", "d", "aarch64_sve_fcvtlt_f64f32">;
641
643
642
644
defm SVCVTX_F32 : SInstCvtMXZ<"svcvtx_f32[_f64]", "MMPd", "MPd", "d", "aarch64_sve_fcvtx_f32f64">;
643
645
644
- def SVCVTNT_F32 : SInst<"svcvtnt_f16[_f32]", "hhPd", "f", MergeOp1, "aarch64_sve_fcvtnt_f16f32">;
645
- def SVCVTNT_F64 : SInst<"svcvtnt_f32[_f64]", "hhPd", "d", MergeOp1, "aarch64_sve_fcvtnt_f32f64">;
646
+ def SVCVTNT_F32 : SInst<"svcvtnt_f16[_f32]", "hhPd", "f", MergeOp1, "aarch64_sve_fcvtnt_f16f32", [IsOverloadNone] >;
647
+ def SVCVTNT_F64 : SInst<"svcvtnt_f32[_f64]", "hhPd", "d", MergeOp1, "aarch64_sve_fcvtnt_f32f64", [IsOverloadNone] >;
646
648
// SVCVTNT_X : Implemented as macro by SveEmitter.cpp
647
649
648
- def SVCVTXNT_F32 : SInst<"svcvtxnt_f32[_f64]", "MMPd", "d", MergeOp1, "aarch64_sve_fcvtxnt_f32f64">;
650
+ def SVCVTXNT_F32 : SInst<"svcvtxnt_f32[_f64]", "MMPd", "d", MergeOp1, "aarch64_sve_fcvtxnt_f32f64", [IsOverloadNone] >;
649
651
// SVCVTXNT_X_F32 : Implemented as macro by SveEmitter.cpp
650
652
651
653
}
0 commit comments