Skip to content

Commit 3aea96f

Browse files
pawosm-armbryanpkc
authored andcommitted
[driver] Pass msve-vector-bits to flang as vscale range
Signed-off-by: Paul Osmialowski <[email protected]>
1 parent 1a59a57 commit 3aea96f

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

clang/lib/Driver/ToolChains/ClassicFlang.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,40 @@ void ClassicFlang::ConstructJob(Compilation &C, const JobAction &JA,
999999
LowerCmdArgs.push_back(Args.MakeArgString(FeatureList));
10001000
}
10011001

1002+
// Add vscale range
1003+
unsigned vscaleMin = 1U;
1004+
unsigned vscaleMax = 16U;
1005+
bool hasVscaleRange = false;
1006+
if (Arg *A = Args.getLastArg(options::OPT_msve_vector_bits_EQ)) {
1007+
StringRef Val = A->getValue();
1008+
1009+
if (Val == "scalable")
1010+
hasVscaleRange = true;
1011+
else {
1012+
unsigned bits = (std::stoul(Val.str()) >> 7U);
1013+
1014+
if ((bits < vscaleMin) || (bits > vscaleMax)) {
1015+
D.Diag(diag::warn_drv_clang_unsupported) << A->getAsString(Args);
1016+
hasVscaleRange = false;
1017+
} else {
1018+
vscaleMin = vscaleMax = bits;
1019+
hasVscaleRange = true;
1020+
}
1021+
}
1022+
}
1023+
for (auto Feature : unifyTargetFeatures(Features)) {
1024+
if (Feature.starts_with("+sve")) {
1025+
hasVscaleRange = true;
1026+
break;
1027+
}
1028+
}
1029+
if (hasVscaleRange) {
1030+
LowerCmdArgs.push_back("-vscale_range_min");
1031+
LowerCmdArgs.push_back(Args.MakeArgString(std::to_string(vscaleMin)));
1032+
LowerCmdArgs.push_back("-vscale_range_max");
1033+
LowerCmdArgs.push_back(Args.MakeArgString(std::to_string(vscaleMax)));
1034+
}
1035+
10021036
// Set a -x flag for second part of Fortran frontend
10031037
for (Arg *A : Args.filtered(options::OPT_Mx_EQ)) {
10041038
A->claim();

0 commit comments

Comments
 (0)