@@ -289,7 +289,7 @@ def SPLATQ : WInst<"splat_laneq", ".(!Q)I",
289
289
"UcUsUicsilPcPsfQUcQUsQUiQcQsQiQPcQPsQflUlQlQUlhdQhQdPlQPl"> {
290
290
let isLaneQ = 1;
291
291
}
292
- let TargetGuard = "bf16,neon " in {
292
+ let TargetGuard = "bf16" in {
293
293
def SPLAT_BF : WInst<"splat_lane", ".(!q)I", "bQb">;
294
294
def SPLATQ_BF : WInst<"splat_laneq", ".(!Q)I", "bQb"> {
295
295
let isLaneQ = 1;
@@ -323,7 +323,7 @@ def VMLSL : SOpInst<"vmlsl", "(>Q)(>Q)..", "csiUcUsUi", OP_MLSL>;
323
323
def VQDMULH : SInst<"vqdmulh", "...", "siQsQi">;
324
324
def VQRDMULH : SInst<"vqrdmulh", "...", "siQsQi">;
325
325
326
- let TargetGuard = "v8.1a,neon " in {
326
+ let TargetGuard = "v8.1a" in {
327
327
def VQRDMLAH : SInst<"vqrdmlah", "....", "siQsQi">;
328
328
def VQRDMLSH : SInst<"vqrdmlsh", "....", "siQsQi">;
329
329
}
@@ -614,7 +614,7 @@ def A64_VQDMULH_LANE : SInst<"vqdmulh_lane", "..(!q)I", "siQsQi">;
614
614
def A64_VQRDMULH_LANE : SInst<"vqrdmulh_lane", "..(!q)I", "siQsQi">;
615
615
}
616
616
617
- let TargetGuard = "v8.1a,neon " in {
617
+ let TargetGuard = "v8.1a" in {
618
618
def VQRDMLAH_LANE : SOpInst<"vqrdmlah_lane", "...qI", "siQsQi", OP_QRDMLAH_LN>;
619
619
def VQRDMLSH_LANE : SOpInst<"vqrdmlsh_lane", "...qI", "siQsQi", OP_QRDMLSH_LN>;
620
620
}
@@ -957,7 +957,7 @@ def VQDMLAL_HIGH : SOpInst<"vqdmlal_high", "(>Q)(>Q)QQ", "si", OP_QDMLALHi>;
957
957
def VQDMLAL_HIGH_N : SOpInst<"vqdmlal_high_n", "(>Q)(>Q)Q1", "si", OP_QDMLALHi_N>;
958
958
def VQDMLSL_HIGH : SOpInst<"vqdmlsl_high", "(>Q)(>Q)QQ", "si", OP_QDMLSLHi>;
959
959
def VQDMLSL_HIGH_N : SOpInst<"vqdmlsl_high_n", "(>Q)(>Q)Q1", "si", OP_QDMLSLHi_N>;
960
- let TargetGuard = "aes,neon " in {
960
+ let TargetGuard = "aes" in {
961
961
def VMULL_P64 : SInst<"vmull", "(1>)11", "Pl">;
962
962
def VMULL_HIGH_P64 : SOpInst<"vmull_high", "(1>)..", "HPl", OP_MULLHi_P64>;
963
963
}
@@ -1091,7 +1091,7 @@ let isLaneQ = 1 in {
1091
1091
def VQDMULH_LANEQ : SInst<"vqdmulh_laneq", "..QI", "siQsQi">;
1092
1092
def VQRDMULH_LANEQ : SInst<"vqrdmulh_laneq", "..QI", "siQsQi">;
1093
1093
}
1094
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.1a,neon " in {
1094
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.1a" in {
1095
1095
def VQRDMLAH_LANEQ : SOpInst<"vqrdmlah_laneq", "...QI", "siQsQi", OP_QRDMLAH_LN> {
1096
1096
let isLaneQ = 1;
1097
1097
}
@@ -1122,14 +1122,14 @@ def VEXT_A64 : WInst<"vext", "...I", "dQdPlQPl">;
1122
1122
1123
1123
////////////////////////////////////////////////////////////////////////////////
1124
1124
// Crypto
1125
- let ArchGuard = "__ARM_ARCH >= 8", TargetGuard = "aes,neon " in {
1125
+ let ArchGuard = "__ARM_ARCH >= 8", TargetGuard = "aes" in {
1126
1126
def AESE : SInst<"vaese", "...", "QUc">;
1127
1127
def AESD : SInst<"vaesd", "...", "QUc">;
1128
1128
def AESMC : SInst<"vaesmc", "..", "QUc">;
1129
1129
def AESIMC : SInst<"vaesimc", "..", "QUc">;
1130
1130
}
1131
1131
1132
- let ArchGuard = "__ARM_ARCH >= 8", TargetGuard = "sha2,neon " in {
1132
+ let ArchGuard = "__ARM_ARCH >= 8", TargetGuard = "sha2" in {
1133
1133
def SHA1H : SInst<"vsha1h", "11", "Ui">;
1134
1134
def SHA1SU1 : SInst<"vsha1su1", "...", "QUi">;
1135
1135
def SHA256SU0 : SInst<"vsha256su0", "...", "QUi">;
@@ -1143,7 +1143,7 @@ def SHA256H2 : SInst<"vsha256h2", "....", "QUi">;
1143
1143
def SHA256SU1 : SInst<"vsha256su1", "....", "QUi">;
1144
1144
}
1145
1145
1146
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sha3,neon " in {
1146
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sha3" in {
1147
1147
def BCAX : SInst<"vbcax", "....", "QUcQUsQUiQUlQcQsQiQl">;
1148
1148
def EOR3 : SInst<"veor3", "....", "QUcQUsQUiQUlQcQsQiQl">;
1149
1149
def RAX1 : SInst<"vrax1", "...", "QUl">;
@@ -1153,14 +1153,14 @@ def XAR : SInst<"vxar", "...I", "QUl">;
1153
1153
}
1154
1154
}
1155
1155
1156
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sha3,neon " in {
1156
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sha3" in {
1157
1157
def SHA512SU0 : SInst<"vsha512su0", "...", "QUl">;
1158
1158
def SHA512su1 : SInst<"vsha512su1", "....", "QUl">;
1159
1159
def SHA512H : SInst<"vsha512h", "....", "QUl">;
1160
1160
def SHA512H2 : SInst<"vsha512h2", "....", "QUl">;
1161
1161
}
1162
1162
1163
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sm4,neon " in {
1163
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sm4" in {
1164
1164
def SM3SS1 : SInst<"vsm3ss1", "....", "QUi">;
1165
1165
def SM3TT1A : SInst<"vsm3tt1a", "....I", "QUi">;
1166
1166
def SM3TT1B : SInst<"vsm3tt1b", "....I", "QUi">;
@@ -1170,7 +1170,7 @@ def SM3PARTW1 : SInst<"vsm3partw1", "....", "QUi">;
1170
1170
def SM3PARTW2 : SInst<"vsm3partw2", "....", "QUi">;
1171
1171
}
1172
1172
1173
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sm4,neon " in {
1173
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "sm4" in {
1174
1174
def SM4E : SInst<"vsm4e", "...", "QUi">;
1175
1175
def SM4EKEY : SInst<"vsm4ekey", "...", "QUi">;
1176
1176
}
@@ -1227,7 +1227,7 @@ def FRINTZ_S64 : SInst<"vrnd", "..", "dQd">;
1227
1227
def FRINTI_S64 : SInst<"vrndi", "..", "dQd">;
1228
1228
}
1229
1229
1230
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.5a,neon " in {
1230
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.5a" in {
1231
1231
def FRINT32X_S32 : SInst<"vrnd32x", "..", "fQf">;
1232
1232
def FRINT32Z_S32 : SInst<"vrnd32z", "..", "fQf">;
1233
1233
def FRINT64X_S32 : SInst<"vrnd64x", "..", "fQf">;
@@ -1401,7 +1401,7 @@ def SCALAR_SQDMULH : SInst<"vqdmulh", "111", "SsSi">;
1401
1401
// Scalar Integer Saturating Rounding Doubling Multiply Half High
1402
1402
def SCALAR_SQRDMULH : SInst<"vqrdmulh", "111", "SsSi">;
1403
1403
1404
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.1a,neon " in {
1404
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.1a" in {
1405
1405
////////////////////////////////////////////////////////////////////////////////
1406
1406
// Signed Saturating Rounding Doubling Multiply Accumulate Returning High Half
1407
1407
def SCALAR_SQRDMLAH : SInst<"vqrdmlah", "1111", "SsSi">;
@@ -1632,7 +1632,7 @@ def SCALAR_SQRDMULH_LANEQ : SOpInst<"vqrdmulh_laneq", "11QI", "SsSi", OP_SCALAR_
1632
1632
let isLaneQ = 1;
1633
1633
}
1634
1634
1635
- let TargetGuard = "v8.1a,neon " in {
1635
+ let TargetGuard = "v8.1a" in {
1636
1636
// Signed Saturating Rounding Doubling Multiply Accumulate Returning High Half
1637
1637
def SCALAR_SQRDMLAH_LANE : SOpInst<"vqrdmlah_lane", "111.I", "SsSi", OP_SCALAR_QRDMLAH_LN>;
1638
1638
def SCALAR_SQRDMLAH_LANEQ : SOpInst<"vqrdmlah_laneq", "111QI", "SsSi", OP_SCALAR_QRDMLAH_LN> {
@@ -1654,7 +1654,7 @@ def SCALAR_VDUP_LANEQ : IInst<"vdup_laneq", "1QI", "ScSsSiSlSfSdSUcSUsSUiSUlSPcS
1654
1654
} // ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)"
1655
1655
1656
1656
// ARMv8.2-A FP16 vector intrinsics for A32/A64.
1657
- let TargetGuard = "fullfp16,neon " in {
1657
+ let TargetGuard = "fullfp16" in {
1658
1658
1659
1659
// ARMv8.2-A FP16 one-operand vector intrinsics.
1660
1660
@@ -1679,7 +1679,7 @@ let TargetGuard = "fullfp16,neon" in {
1679
1679
def VCVTP_U16 : SInst<"vcvtp_u16", "U.", "hQh">;
1680
1680
1681
1681
// Vector rounding
1682
- let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING)", TargetGuard = "fullfp16,neon " in {
1682
+ let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_DIRECTED_ROUNDING)", TargetGuard = "fullfp16" in {
1683
1683
def FRINTZH : SInst<"vrnd", "..", "hQh">;
1684
1684
def FRINTNH : SInst<"vrndn", "..", "hQh">;
1685
1685
def FRINTAH : SInst<"vrnda", "..", "hQh">;
@@ -1728,7 +1728,7 @@ let TargetGuard = "fullfp16,neon" in {
1728
1728
// Max/Min
1729
1729
def VMAXH : SInst<"vmax", "...", "hQh">;
1730
1730
def VMINH : SInst<"vmin", "...", "hQh">;
1731
- let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_NUMERIC_MAXMIN)", TargetGuard = "fullfp16,neon " in {
1731
+ let ArchGuard = "__ARM_ARCH >= 8 && defined(__ARM_FEATURE_NUMERIC_MAXMIN)", TargetGuard = "fullfp16" in {
1732
1732
def FMAXNMH : SInst<"vmaxnm", "...", "hQh">;
1733
1733
def FMINNMH : SInst<"vminnm", "...", "hQh">;
1734
1734
}
@@ -1775,7 +1775,7 @@ def VEXTH : WInst<"vext", "...I", "hQh">;
1775
1775
def VREV64H : WOpInst<"vrev64", "..", "hQh", OP_REV64>;
1776
1776
1777
1777
// ARMv8.2-A FP16 vector intrinsics for A64 only.
1778
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "fullfp16,neon " in {
1778
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "fullfp16" in {
1779
1779
1780
1780
// Vector rounding
1781
1781
def FRINTIH : SInst<"vrndi", "..", "hQh">;
@@ -1872,19 +1872,19 @@ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)" in {
1872
1872
}
1873
1873
1874
1874
// v8.2-A dot product instructions.
1875
- let TargetGuard = "dotprod,neon " in {
1875
+ let TargetGuard = "dotprod" in {
1876
1876
def DOT : SInst<"vdot", "..(<<)(<<)", "iQiUiQUi">;
1877
1877
def DOT_LANE : SOpInst<"vdot_lane", "..(<<)(<<q)I", "iUiQiQUi", OP_DOT_LN>;
1878
1878
}
1879
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "dotprod,neon " in {
1879
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "dotprod" in {
1880
1880
// Variants indexing into a 128-bit vector are A64 only.
1881
1881
def UDOT_LANEQ : SOpInst<"vdot_laneq", "..(<<)(<<Q)I", "iUiQiQUi", OP_DOT_LNQ> {
1882
1882
let isLaneQ = 1;
1883
1883
}
1884
1884
}
1885
1885
1886
1886
// v8.2-A FP16 fused multiply-add long instructions.
1887
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "fp16fml,neon " in {
1887
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "fp16fml" in {
1888
1888
def VFMLAL_LOW : SInst<"vfmlal_low", ">>..", "hQh">;
1889
1889
def VFMLSL_LOW : SInst<"vfmlsl_low", ">>..", "hQh">;
1890
1890
def VFMLAL_HIGH : SInst<"vfmlal_high", ">>..", "hQh">;
@@ -1909,7 +1909,7 @@ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "f
1909
1909
}
1910
1910
}
1911
1911
1912
- let TargetGuard = "i8mm,neon " in {
1912
+ let TargetGuard = "i8mm" in {
1913
1913
def VMMLA : SInst<"vmmla", "..(<<)(<<)", "QUiQi">;
1914
1914
def VUSMMLA : SInst<"vusmmla", "..(<<U)(<<)", "Qi">;
1915
1915
@@ -1926,7 +1926,7 @@ let TargetGuard = "i8mm,neon" in {
1926
1926
}
1927
1927
}
1928
1928
1929
- let TargetGuard = "bf16,neon " in {
1929
+ let TargetGuard = "bf16" in {
1930
1930
def VDOT_BF : SInst<"vbfdot", "..BB", "fQf">;
1931
1931
def VDOT_LANE_BF : SOpInst<"vbfdot_lane", "..B(Bq)I", "fQf", OP_BFDOT_LN>;
1932
1932
def VDOT_LANEQ_BF : SOpInst<"vbfdot_laneq", "..B(BQ)I", "fQf", OP_BFDOT_LNQ> {
@@ -1970,31 +1970,31 @@ multiclass VCMLA_ROTS<string type, string lanety, string laneqty> {
1970
1970
}
1971
1971
1972
1972
// v8.3-A Vector complex addition intrinsics
1973
- let TargetGuard = "v8.3a,fullfp16,neon " in {
1973
+ let TargetGuard = "v8.3a,fullfp16" in {
1974
1974
def VCADD_ROT90_FP16 : SInst<"vcadd_rot90", "...", "h">;
1975
1975
def VCADD_ROT270_FP16 : SInst<"vcadd_rot270", "...", "h">;
1976
1976
def VCADDQ_ROT90_FP16 : SInst<"vcaddq_rot90", "QQQ", "h">;
1977
1977
def VCADDQ_ROT270_FP16 : SInst<"vcaddq_rot270", "QQQ", "h">;
1978
1978
1979
1979
defm VCMLA_FP16 : VCMLA_ROTS<"h", "uint32x2_t", "uint32x4_t">;
1980
1980
}
1981
- let TargetGuard = "v8.3a,neon " in {
1981
+ let TargetGuard = "v8.3a" in {
1982
1982
def VCADD_ROT90 : SInst<"vcadd_rot90", "...", "f">;
1983
1983
def VCADD_ROT270 : SInst<"vcadd_rot270", "...", "f">;
1984
1984
def VCADDQ_ROT90 : SInst<"vcaddq_rot90", "QQQ", "f">;
1985
1985
def VCADDQ_ROT270 : SInst<"vcaddq_rot270", "QQQ", "f">;
1986
1986
1987
1987
defm VCMLA_F32 : VCMLA_ROTS<"f", "uint64x1_t", "uint64x2_t">;
1988
1988
}
1989
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.3a,neon " in {
1989
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "v8.3a" in {
1990
1990
def VCADDQ_ROT90_FP64 : SInst<"vcaddq_rot90", "QQQ", "d">;
1991
1991
def VCADDQ_ROT270_FP64 : SInst<"vcaddq_rot270", "QQQ", "d">;
1992
1992
1993
1993
defm VCMLA_FP64 : VCMLA_ROTS<"d", "uint64x2_t", "uint64x2_t">;
1994
1994
}
1995
1995
1996
1996
// V8.2-A BFloat intrinsics
1997
- let TargetGuard = "bf16,neon " in {
1997
+ let TargetGuard = "bf16" in {
1998
1998
def VCREATE_BF : NoTestOpInst<"vcreate", ".(IU>)", "b", OP_CAST> {
1999
1999
let BigEndianSafe = 1;
2000
2000
}
@@ -2058,14 +2058,14 @@ let TargetGuard = "bf16,neon" in {
2058
2058
def SCALAR_CVT_F32_BF16 : SOpInst<"vcvtah_f32", "(1F>)(1!)", "b", OP_CVT_F32_BF16>;
2059
2059
}
2060
2060
2061
- let ArchGuard = "!defined(__aarch64__) && !defined(__arm64ec__)", TargetGuard = "bf16,neon " in {
2061
+ let ArchGuard = "!defined(__aarch64__) && !defined(__arm64ec__)", TargetGuard = "bf16" in {
2062
2062
def VCVT_BF16_F32_A32_INTERNAL : WInst<"__a32_vcvt_bf16", "BQ", "f">;
2063
2063
def VCVT_BF16_F32_A32 : SOpInst<"vcvt_bf16", "BQ", "f", OP_VCVT_BF16_F32_A32>;
2064
2064
def VCVT_LOW_BF16_F32_A32 : SOpInst<"vcvt_low_bf16", "BQ", "Qf", OP_VCVT_BF16_F32_LO_A32>;
2065
2065
def VCVT_HIGH_BF16_F32_A32 : SOpInst<"vcvt_high_bf16", "BBQ", "Qf", OP_VCVT_BF16_F32_HI_A32>;
2066
2066
}
2067
2067
2068
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "bf16,neon " in {
2068
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "bf16" in {
2069
2069
def VCVT_LOW_BF16_F32_A64_INTERNAL : WInst<"__a64_vcvtq_low_bf16", "BQ", "Hf">;
2070
2070
def VCVT_LOW_BF16_F32_A64 : SOpInst<"vcvt_low_bf16", "BQ", "Qf", OP_VCVT_BF16_F32_LO_A64>;
2071
2071
def VCVT_HIGH_BF16_F32_A64 : SInst<"vcvt_high_bf16", "BBQ", "Qf">;
@@ -2077,22 +2077,22 @@ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "b
2077
2077
def COPYQ_LANEQ_BF16 : IOpInst<"vcopy_laneq", "..I.I", "Qb", OP_COPY_LN>;
2078
2078
}
2079
2079
2080
- let ArchGuard = "!defined(__aarch64__) && !defined(__arm64ec__)", TargetGuard = "bf16,neon " in {
2080
+ let ArchGuard = "!defined(__aarch64__) && !defined(__arm64ec__)", TargetGuard = "bf16" in {
2081
2081
let BigEndianSafe = 1 in {
2082
2082
defm VREINTERPRET_BF : REINTERPRET_CROSS_TYPES<
2083
2083
"csilUcUsUiUlhfPcPsPlQcQsQiQlQUcQUsQUiQUlQhQfQPcQPsQPl", "bQb">;
2084
2084
}
2085
2085
}
2086
2086
2087
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "bf16,neon " in {
2087
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "bf16" in {
2088
2088
let BigEndianSafe = 1 in {
2089
2089
defm VVREINTERPRET_BF : REINTERPRET_CROSS_TYPES<
2090
2090
"csilUcUsUiUlhfdPcPsPlQcQsQiQlQUcQUsQUiQUlQhQfQdQPcQPsQPlQPk", "bQb">;
2091
2091
}
2092
2092
}
2093
2093
2094
2094
// v8.9a/v9.4a LRCPC3 intrinsics
2095
- let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "rcpc3,neon " in {
2095
+ let ArchGuard = "defined(__aarch64__) || defined(__arm64ec__)", TargetGuard = "rcpc3" in {
2096
2096
def VLDAP1_LANE : WInst<"vldap1_lane", ".(c*!).I", "QUlQlUlldQdPlQPl">;
2097
2097
def VSTL1_LANE : WInst<"vstl1_lane", "v*(.!)I", "QUlQlUlldQdPlQPl">;
2098
2098
}
0 commit comments