Skip to content

Commit 8424bf2

Browse files
committed
[SystemZ] Add support for new cpu architecture - arch15
This patch adds support for the next-generation arch15 CPU architecture to the SystemZ backend. This includes: - Basic support for the new processor and its features. - Detection of arch15 as host processor. - Assembler/disassembler support for new instructions. - Exploitation of new instructions for code generation. - New vector (signed|unsigned|bool) __int128 data types. - New LLVM intrinsics for certain new instructions. - Support for low-level builtins mapped to new LLVM intrinsics. - New high-level intrinsics in vecintrin.h. - Indicate support by defining __VEC__ == 10305. Note: No currently available Z system supports the arch15 architecture. Once new systems become available, the official system name will be added as supported -march name.
1 parent 64edde6 commit 8424bf2

File tree

84 files changed

+16479
-304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+16479
-304
lines changed

clang/include/clang/Basic/BuiltinsSystemZ.def

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ TARGET_BUILTIN(__builtin_s390_vstrszf, "V16UcV4UiV4UiV16Uci*", "nc", "vector-enh
286286
TARGET_BUILTIN(__builtin_s390_vlbrh, "V8UsV8Us", "nc", "vector")
287287
TARGET_BUILTIN(__builtin_s390_vlbrf, "V4UiV4Ui", "nc", "vector")
288288
TARGET_BUILTIN(__builtin_s390_vlbrg, "V2ULLiV2ULLi", "nc", "vector")
289+
TARGET_BUILTIN(__builtin_s390_vlbrq, "ULLLiULLLi", "nc", "vector")
289290

290291
// NNP-assist facility intrinsics.
291292
TARGET_BUILTIN(__builtin_s390_vclfnhs, "V4fV8UsIi", "nc", "nnp-assist")
@@ -294,5 +295,44 @@ TARGET_BUILTIN(__builtin_s390_vcrnfs, "V8UsV4fV4fIi", "nc", "nnp-assist")
294295
TARGET_BUILTIN(__builtin_s390_vcfn, "V8UsV8UsIi", "nc", "nnp-assist")
295296
TARGET_BUILTIN(__builtin_s390_vcnf, "V8UsV8UsIi", "nc", "nnp-assist")
296297

298+
// Miscellaneous instruction extensions facility 4 intrinsics.
299+
TARGET_BUILTIN(__builtin_s390_bdepg, "ULiULiULi", "nc", "miscellaneous-extensions-4")
300+
TARGET_BUILTIN(__builtin_s390_bextg, "ULiULiULi", "nc", "miscellaneous-extensions-4")
301+
302+
// Vector-enhancements facility 3 intrinsics.
303+
TARGET_BUILTIN(__builtin_s390_vgemb, "V16UcV8Us", "nc", "vector-enhancements-3")
304+
TARGET_BUILTIN(__builtin_s390_vgemh, "V8UsV16Uc", "nc", "vector-enhancements-3")
305+
TARGET_BUILTIN(__builtin_s390_vgemf, "V4UiV16Uc", "nc", "vector-enhancements-3")
306+
TARGET_BUILTIN(__builtin_s390_vgemg, "V2ULLiV16Uc", "nc", "vector-enhancements-3")
307+
TARGET_BUILTIN(__builtin_s390_vgemq, "ULLLiV16Uc", "nc", "vector-enhancements-3")
308+
TARGET_BUILTIN(__builtin_s390_vuplg, "SLLLiV2SLLi", "nc", "vector-enhancements-3")
309+
TARGET_BUILTIN(__builtin_s390_vupllg, "ULLLiV2ULLi", "nc", "vector-enhancements-3")
310+
TARGET_BUILTIN(__builtin_s390_vuphg, "SLLLiV2SLLi", "nc", "vector-enhancements-3")
311+
TARGET_BUILTIN(__builtin_s390_vuplhg, "ULLLiV2ULLi", "nc", "vector-enhancements-3")
312+
TARGET_BUILTIN(__builtin_s390_vavgq, "SLLLiSLLLiSLLLi", "nc", "vector-enhancements-3")
313+
TARGET_BUILTIN(__builtin_s390_vavglq, "ULLLiULLLiULLLi", "nc", "vector-enhancements-3")
314+
TARGET_BUILTIN(__builtin_s390_veval, "V16UcV16UcV16UcV16UcIi", "nc", "vector-enhancements-3")
315+
TARGET_BUILTIN(__builtin_s390_vmahg, "V2SLLiV2SLLiV2SLLiV2SLLi", "nc", "vector-enhancements-3")
316+
TARGET_BUILTIN(__builtin_s390_vmahq, "SLLLiSLLLiSLLLiSLLLi", "nc", "vector-enhancements-3")
317+
TARGET_BUILTIN(__builtin_s390_vmalhg, "V2ULLiV2ULLiV2ULLiV2ULLi", "nc", "vector-enhancements-3")
318+
TARGET_BUILTIN(__builtin_s390_vmalhq, "ULLLiULLLiULLLiULLLi", "nc", "vector-enhancements-3")
319+
TARGET_BUILTIN(__builtin_s390_vmaeg, "SLLLiV2SLLiV2SLLiSLLLi", "nc", "vector-enhancements-3")
320+
TARGET_BUILTIN(__builtin_s390_vmaleg, "ULLLiV2ULLiV2ULLiULLLi", "nc", "vector-enhancements-3")
321+
TARGET_BUILTIN(__builtin_s390_vmaog, "SLLLiV2SLLiV2SLLiSLLLi", "nc", "vector-enhancements-3")
322+
TARGET_BUILTIN(__builtin_s390_vmalog, "ULLLiV2ULLiV2ULLiULLLi", "nc", "vector-enhancements-3")
323+
TARGET_BUILTIN(__builtin_s390_vmhg, "V2SLLiV2SLLiV2SLLi", "nc", "vector-enhancements-3")
324+
TARGET_BUILTIN(__builtin_s390_vmhq, "SLLLiSLLLiSLLLi", "nc", "vector-enhancements-3")
325+
TARGET_BUILTIN(__builtin_s390_vmlhg, "V2ULLiV2ULLiV2ULLi", "nc", "vector-enhancements-3")
326+
TARGET_BUILTIN(__builtin_s390_vmlhq, "ULLLiULLLiULLLi", "nc", "vector-enhancements-3")
327+
TARGET_BUILTIN(__builtin_s390_vmeg, "SLLLiV2SLLiV2SLLi", "nc", "vector-enhancements-3")
328+
TARGET_BUILTIN(__builtin_s390_vmleg, "ULLLiV2ULLiV2ULLi", "nc", "vector-enhancements-3")
329+
TARGET_BUILTIN(__builtin_s390_vmog, "SLLLiV2SLLiV2SLLi", "nc", "vector-enhancements-3")
330+
TARGET_BUILTIN(__builtin_s390_vmlog, "ULLLiV2ULLiV2ULLi", "nc", "vector-enhancements-3")
331+
TARGET_BUILTIN(__builtin_s390_vceqqs, "SLLLiULLLiULLLii*", "nc", "vector-enhancements-3")
332+
TARGET_BUILTIN(__builtin_s390_vchqs, "SLLLiSLLLiSLLLii*", "nc", "vector-enhancements-3")
333+
TARGET_BUILTIN(__builtin_s390_vchlqs, "SLLLiULLLiULLLii*", "nc", "vector-enhancements-3")
334+
TARGET_BUILTIN(__builtin_s390_vclzq, "ULLLiULLLi", "nc", "vector-enhancements-3")
335+
TARGET_BUILTIN(__builtin_s390_vctzq, "ULLLiULLLi", "nc", "vector-enhancements-3")
336+
297337
#undef BUILTIN
298338
#undef TARGET_BUILTIN

clang/lib/Basic/Targets/SystemZ.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ static constexpr ISANameRevision ISARevisions[] = {
105105
{{"arch12"}, 12}, {{"z14"}, 12},
106106
{{"arch13"}, 13}, {{"z15"}, 13},
107107
{{"arch14"}, 14}, {{"z16"}, 14},
108+
{{"arch15"}, 15},
108109
};
109110

110111
int SystemZTargetInfo::getISARevision(StringRef Name) const {
@@ -133,6 +134,7 @@ bool SystemZTargetInfo::hasFeature(StringRef Feature) const {
133134
.Case("arch12", ISARevision >= 12)
134135
.Case("arch13", ISARevision >= 13)
135136
.Case("arch14", ISARevision >= 14)
137+
.Case("arch15", ISARevision >= 15)
136138
.Case("htm", HasTransactionalExecution)
137139
.Case("vx", HasVector)
138140
.Default(false);
@@ -167,7 +169,7 @@ void SystemZTargetInfo::getTargetDefines(const LangOptions &Opts,
167169
if (HasVector)
168170
Builder.defineMacro("__VX__");
169171
if (Opts.ZVector)
170-
Builder.defineMacro("__VEC__", "10304");
172+
Builder.defineMacro("__VEC__", "10305");
171173
}
172174

173175
ArrayRef<Builtin::Info> SystemZTargetInfo::getTargetBuiltins() const {

clang/lib/Basic/Targets/SystemZ.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
186186
Features["vector-enhancements-2"] = true;
187187
if (ISARevision >= 14)
188188
Features["nnp-assist"] = true;
189+
if (ISARevision >= 15) {
190+
Features["miscellaneous-extensions-4"] = true;
191+
Features["vector-enhancements-3"] = true;
192+
}
189193
return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
190194
}
191195

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20601,7 +20601,8 @@ Value *CodeGenFunction::EmitSystemZBuiltinExpr(unsigned BuiltinID,
2060120601
case SystemZ::BI__builtin_s390_vclzb:
2060220602
case SystemZ::BI__builtin_s390_vclzh:
2060320603
case SystemZ::BI__builtin_s390_vclzf:
20604-
case SystemZ::BI__builtin_s390_vclzg: {
20604+
case SystemZ::BI__builtin_s390_vclzg:
20605+
case SystemZ::BI__builtin_s390_vclzq: {
2060520606
llvm::Type *ResultType = ConvertType(E->getType());
2060620607
Value *X = EmitScalarExpr(E->getArg(0));
2060720608
Value *Undef = ConstantInt::get(Builder.getInt1Ty(), false);
@@ -20612,7 +20613,8 @@ Value *CodeGenFunction::EmitSystemZBuiltinExpr(unsigned BuiltinID,
2061220613
case SystemZ::BI__builtin_s390_vctzb:
2061320614
case SystemZ::BI__builtin_s390_vctzh:
2061420615
case SystemZ::BI__builtin_s390_vctzf:
20615-
case SystemZ::BI__builtin_s390_vctzg: {
20616+
case SystemZ::BI__builtin_s390_vctzg:
20617+
case SystemZ::BI__builtin_s390_vctzq: {
2061620618
llvm::Type *ResultType = ConvertType(E->getType());
2061720619
Value *X = EmitScalarExpr(E->getArg(0));
2061820620
Value *Undef = ConstantInt::get(Builder.getInt1Ty(), false);
@@ -20856,7 +20858,8 @@ Value *CodeGenFunction::EmitSystemZBuiltinExpr(unsigned BuiltinID,
2085620858

2085720859
case SystemZ::BI__builtin_s390_vlbrh:
2085820860
case SystemZ::BI__builtin_s390_vlbrf:
20859-
case SystemZ::BI__builtin_s390_vlbrg: {
20861+
case SystemZ::BI__builtin_s390_vlbrg:
20862+
case SystemZ::BI__builtin_s390_vlbrq: {
2086020863
llvm::Type *ResultType = ConvertType(E->getType());
2086120864
Value *X = EmitScalarExpr(E->getArg(0));
2086220865
Function *F = CGM.getIntrinsic(Intrinsic::bswap, ResultType);
@@ -20881,16 +20884,19 @@ Value *CodeGenFunction::EmitSystemZBuiltinExpr(unsigned BuiltinID,
2088120884
INTRINSIC_WITH_CC(s390_vceqhs);
2088220885
INTRINSIC_WITH_CC(s390_vceqfs);
2088320886
INTRINSIC_WITH_CC(s390_vceqgs);
20887+
INTRINSIC_WITH_CC(s390_vceqqs);
2088420888

2088520889
INTRINSIC_WITH_CC(s390_vchbs);
2088620890
INTRINSIC_WITH_CC(s390_vchhs);
2088720891
INTRINSIC_WITH_CC(s390_vchfs);
2088820892
INTRINSIC_WITH_CC(s390_vchgs);
20893+
INTRINSIC_WITH_CC(s390_vchqs);
2088920894

2089020895
INTRINSIC_WITH_CC(s390_vchlbs);
2089120896
INTRINSIC_WITH_CC(s390_vchlhs);
2089220897
INTRINSIC_WITH_CC(s390_vchlfs);
2089320898
INTRINSIC_WITH_CC(s390_vchlgs);
20899+
INTRINSIC_WITH_CC(s390_vchlqs);
2089420900

2089520901
INTRINSIC_WITH_CC(s390_vfaebs);
2089620902
INTRINSIC_WITH_CC(s390_vfaehs);

0 commit comments

Comments
 (0)