Skip to content

Commit 50e71c0

Browse files
committed
Changed the place where the options are added in order for the options
to be applied to OpenMP too.
1 parent 78a9005 commit 50e71c0

File tree

2 files changed

+47
-46
lines changed

2 files changed

+47
-46
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,40 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
17211721
}
17221722
}
17231723

1724+
static void EmitAccuracyDiag(const Driver &D, const JobAction &JA,
1725+
StringRef AccuracValStr, StringRef TargetPrecStr) {
1726+
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
1727+
D.Diag(clang::diag::warn_acuracy_conflicts_with_explicit_target_prec_option)
1728+
<< AccuracValStr << TargetPrecStr;
1729+
}
1730+
}
1731+
1732+
void Clang::AddSPIRTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
1733+
const JobAction &JA, const Driver &D) const {
1734+
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
1735+
if (Arg *A = Args.getLastArg(options::OPT_ffp_model_EQ)) {
1736+
if (!strcmp(A->getValue(), "fast")) {
1737+
CmdArgs.push_back("-fno-offload-fp32-prec-div");
1738+
CmdArgs.push_back("-fno-offload-fp32-prec-sqrt");
1739+
}
1740+
}
1741+
if (Arg *A = Args.getLastArg(options::OPT_ffp_accuracy_EQ)) {
1742+
if (Args.getLastArg(options::OPT_fno_offload_fp32_prec_div))
1743+
EmitAccuracyDiag(D, JA, A->getValue(), "-fno-offload-fp32-prec-div");
1744+
if (Args.getLastArg(options::OPT_fno_offload_fp32_prec_sqrt))
1745+
EmitAccuracyDiag(D, JA, A->getValue(), "-fno-offload-fp32-prec-sqrt");
1746+
}
1747+
if (Args.getLastArg(options::OPT_fno_offload_fp32_prec_div))
1748+
CmdArgs.push_back("-fno-offload-fp32-prec-div");
1749+
else
1750+
CmdArgs.push_back("-foffload-fp32-prec-div");
1751+
if (Args.getLastArg(options::OPT_fno_offload_fp32_prec_sqrt))
1752+
CmdArgs.push_back("-fno-offload-fp32-prec-sqrt");
1753+
else
1754+
CmdArgs.push_back("-foffload-fp32-prec-sqrt");
1755+
}
1756+
}
1757+
17241758
void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
17251759
ArgStringList &CmdArgs, bool KernelOrKext) const {
17261760
RenderARMABI(getToolChain().getDriver(), Triple, Args, CmdArgs);
@@ -1771,8 +1805,10 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
17711805

17721806
void Clang::RenderTargetOptions(const llvm::Triple &EffectiveTriple,
17731807
const ArgList &Args, bool KernelOrKext,
1774-
ArgStringList &CmdArgs) const {
1808+
ArgStringList &CmdArgs,
1809+
const JobAction &JA) const {
17751810
const ToolChain &TC = getToolChain();
1811+
const Driver &D = TC.getDriver();
17761812

17771813
// Add the target features
17781814
getTargetFeatures(TC.getDriver(), EffectiveTriple, Args, CmdArgs, false);
@@ -1782,6 +1818,10 @@ void Clang::RenderTargetOptions(const llvm::Triple &EffectiveTriple,
17821818
default:
17831819
break;
17841820

1821+
case llvm::Triple::spir:
1822+
case llvm::Triple::spir64:
1823+
AddSPIRTargetArgs(Args, CmdArgs, JA, D);
1824+
break;
17851825
case llvm::Triple::arm:
17861826
case llvm::Triple::armeb:
17871827
case llvm::Triple::thumb:
@@ -2942,14 +2982,6 @@ static void EmitComplexRangeDiag(const Driver &D, std::string str1,
29422982
}
29432983
}
29442984

2945-
static void EmitAccuracyDiag(const Driver &D, const JobAction &JA,
2946-
StringRef AccuracValStr, StringRef TargetPrecStr) {
2947-
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
2948-
D.Diag(clang::diag::warn_acuracy_conflicts_with_explicit_target_prec_option)
2949-
<< AccuracValStr << TargetPrecStr;
2950-
}
2951-
}
2952-
29532985
static std::string
29542986
RenderComplexRangeOption(LangOptions::ComplexRangeKind Range) {
29552987
std::string ComplexRangeStr = ComplexRangeKindToStr(Range);
@@ -3006,8 +3038,6 @@ static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D,
30063038
LangOptions::ComplexRangeKind Range = LangOptions::ComplexRangeKind::CX_None;
30073039
std::string ComplexRangeStr = "";
30083040
std::string GccRangeComplexOption = "";
3009-
bool NoOffloadFp32PrecDiv = false;
3010-
bool NoOffloadFp32PrecSqrt = false;
30113041

30123042
// Lambda to set fast-math options. This is also used by -ffp-model=fast
30133043
auto applyFastMath = [&]() {
@@ -3037,12 +3067,6 @@ static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D,
30373067
: ComplexArithmeticStr(LangOptions::ComplexRangeKind::CX_Basic));
30383068
Range = LangOptions::ComplexRangeKind::CX_Basic;
30393069
SeenUnsafeMathModeOption = true;
3040-
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
3041-
// when fp-model=fast is used the default precision for division and
3042-
// sqrt is not precise.
3043-
NoOffloadFp32PrecDiv = true;
3044-
NoOffloadFp32PrecSqrt = true;
3045-
}
30463070
};
30473071

30483072
// Lambda to consolidate common handling for fp-contract
@@ -3076,19 +3100,6 @@ static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D,
30763100
// If this isn't an FP option skip the claim below
30773101
default: continue;
30783102

3079-
case options::OPT_foffload_fp32_prec_div:
3080-
case options::OPT_foffload_fp32_prec_sqrt:
3081-
break;
3082-
case options::OPT_fno_offload_fp32_prec_sqrt:
3083-
if (!FPAccuracy.empty())
3084-
EmitAccuracyDiag(D, JA, FPAccuracy, "-fno-offload-fp32-prec-sqrt");
3085-
NoOffloadFp32PrecSqrt = true;
3086-
break;
3087-
case options::OPT_fno_offload_fp32_prec_div:
3088-
if (!FPAccuracy.empty())
3089-
EmitAccuracyDiag(D, JA, FPAccuracy, "-fno-offload-fp32-prec-div");
3090-
NoOffloadFp32PrecDiv = true;
3091-
break;
30923103
case options::OPT_fcx_limited_range:
30933104
if (GccRangeComplexOption.empty()) {
30943105
if (Range != LangOptions::ComplexRangeKind::CX_Basic)
@@ -3173,10 +3184,6 @@ static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D,
31733184
case options::OPT_ffp_accuracy_EQ: {
31743185
StringRef Val = A->getValue();
31753186
FPAccuracy = Val;
3176-
if (NoOffloadFp32PrecDiv)
3177-
EmitAccuracyDiag(D, JA, FPAccuracy, "-fno-offload-fp32-prec-div");
3178-
if (NoOffloadFp32PrecSqrt)
3179-
EmitAccuracyDiag(D, JA, FPAccuracy, "-fno-offload-fp32-prec-sqrt");
31803187
break;
31813188
}
31823189
case options::OPT_ffp_model_EQ: {
@@ -3590,16 +3597,6 @@ static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D,
35903597
CmdArgs.push_back("-fno-cx-limited-range");
35913598
if (Args.hasArg(options::OPT_fno_cx_fortran_rules))
35923599
CmdArgs.push_back("-fno-cx-fortran-rules");
3593-
if (JA.isDeviceOffloading(Action::OFK_SYCL)) {
3594-
if (NoOffloadFp32PrecDiv)
3595-
CmdArgs.push_back("-fno-offload-fp32-prec-div");
3596-
else
3597-
CmdArgs.push_back("-foffload-fp32-prec-div");
3598-
if (NoOffloadFp32PrecSqrt)
3599-
CmdArgs.push_back("-fno-offload-fp32-prec-sqrt");
3600-
else
3601-
CmdArgs.push_back("-foffload-fp32-prec-sqrt");
3602-
}
36033600
}
36043601

36053602
static void RenderAnalyzerOptions(const ArgList &Args, ArgStringList &CmdArgs,
@@ -6849,7 +6846,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
68496846
CmdArgs.push_back(Args.MakeArgString(CPU));
68506847
}
68516848

6852-
RenderTargetOptions(Triple, Args, KernelOrKext, CmdArgs);
6849+
RenderTargetOptions(Triple, Args, KernelOrKext, CmdArgs, JA);
68536850

68546851
// Add clang-cl arguments.
68556852
types::ID InputType = Input.getType();

clang/lib/Driver/ToolChains/Clang.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,18 @@ class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
4747

4848
void RenderTargetOptions(const llvm::Triple &EffectiveTriple,
4949
const llvm::opt::ArgList &Args, bool KernelOrKext,
50-
llvm::opt::ArgStringList &CmdArgs) const;
50+
llvm::opt::ArgStringList &CmdArgs,
51+
const JobAction &JA) const;
5152

5253
void AddAArch64TargetArgs(const llvm::opt::ArgList &Args,
5354
llvm::opt::ArgStringList &CmdArgs) const;
5455
void AddARMTargetArgs(const llvm::Triple &Triple,
5556
const llvm::opt::ArgList &Args,
5657
llvm::opt::ArgStringList &CmdArgs,
5758
bool KernelOrKext) const;
59+
void AddSPIRTargetArgs(const llvm::opt::ArgList &Args,
60+
llvm::opt::ArgStringList &CmdArgs,
61+
const JobAction &JA, const Driver &D) const;
5862
void AddARM64TargetArgs(const llvm::opt::ArgList &Args,
5963
llvm::opt::ArgStringList &CmdArgs) const;
6064
void AddLoongArchTargetArgs(const llvm::opt::ArgList &Args,

0 commit comments

Comments
 (0)