Skip to content

Commit fc35ad0

Browse files
authored
[Clang][SME2] Add single and multi min/max by vector builtins (#71707)
Adds the following SME2 builtins: svminnm_single_f(16|32|64)_x(2|4) svminnm_f(16|32|64)_x(2|4) svmaxnm_single_f(16|32|64)_x(2|4) svmaxnm_f(16|32|64)_x(2|4) See [ARM-software/acle#217](ARM-software/acle#217) Patch by: Kerry McLaughlin <[email protected]>
1 parent 4cf996d commit fc35ad0

File tree

3 files changed

+902
-0
lines changed

3 files changed

+902
-0
lines changed

clang/include/clang/Basic/arm_sve.td

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,6 +2007,20 @@ let TargetGuard = "sme2" in {
20072007
defm MIN_MULTI_X4 : MinMaxIntr<"min", "", "x4", "444">;
20082008
}
20092009

2010+
multiclass SInstMinMaxByVector<string name> {
2011+
def NAME # _SINGLE_X2 : SInst<"sv" # name # "nm[_single_{d}_x2]", "22d", "hfd", MergeNone, "aarch64_sve_f" # name # "nm_single_x2", [IsStreaming], []>;
2012+
def NAME # _SINGLE_X4 : SInst<"sv" # name # "nm[_single_{d}_x4]", "44d", "hfd", MergeNone, "aarch64_sve_f" # name # "nm_single_x4", [IsStreaming], []>;
2013+
2014+
def NAME # _X2 : SInst<"sv" # name # "nm[_{d}_x2]", "222", "hfd", MergeNone, "aarch64_sve_f" # name # "nm_x2", [IsStreaming], []>;
2015+
def NAME # _X4 : SInst<"sv" # name # "nm[_{d}_x4]", "444", "hfd", MergeNone, "aarch64_sve_f" # name # "nm_x4", [IsStreaming], []>;
2016+
}
2017+
2018+
let TargetGuard = "sme2" in {
2019+
// == FMINNM / FMAXNM ==
2020+
defm SVMINNM : SInstMinMaxByVector<"min">;
2021+
defm SVMAXNM : SInstMinMaxByVector<"max">;
2022+
}
2023+
20102024
let TargetGuard = "sme2" in {
20112025
// == ADD (vectors) ==
20122026
def SVADD_SINGLE_X2 : SInst<"svadd[_single_{d}_x2]", "22d", "cUcsUsiUilUl", MergeNone, "aarch64_sve_add_single_x2", [IsStreaming], []>;

0 commit comments

Comments
 (0)