[clang] [clang] Adjust -mlarge-data-threshold handling (PR #77958)
Fangrui Song via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 12 10:29:42 PST 2024
================
@@ -5752,20 +5752,29 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
}
}
- if (Arg *A = Args.getLastArg(options::OPT_mlarge_data_threshold_EQ)) {
- if (!Triple.isX86()) {
- D.Diag(diag::err_drv_unsupported_opt_for_target)
- << A->getOption().getName() << TripleStr;
- } else {
- bool IsMediumCM = false;
- if (Arg *A = Args.getLastArg(options::OPT_mcmodel_EQ))
- IsMediumCM = StringRef(A->getValue()) == "medium";
- if (!IsMediumCM) {
+ if (Triple.getArch() == llvm::Triple::x86_64) {
+ bool IsMediumCM = false;
+ bool IsLargeCM = false;
+ if (Arg *A = Args.getLastArg(options::OPT_mcmodel_EQ)) {
+ IsMediumCM = StringRef(A->getValue()) == "medium";
+ IsLargeCM = StringRef(A->getValue()) == "large";
+ }
+ if (Arg *A = Args.getLastArg(options::OPT_mlarge_data_threshold_EQ)) {
+ if (!IsMediumCM && !IsLargeCM) {
D.Diag(diag::warn_drv_large_data_threshold_invalid_code_model)
<< A->getOption().getRenderName();
} else {
A->render(Args, CmdArgs);
}
+ } else if (IsMediumCM) {
+ CmdArgs.push_back("-mlarge-data-threshold=65536");
+ } else if (IsLargeCM) {
+ CmdArgs.push_back("-mlarge-data-threshold=0");
+ }
+ } else {
+ if (Arg *A = Args.getLastArg(options::OPT_mlarge_data_threshold_EQ)) {
----------------
MaskRay wrote:
You can remove `err_drv_unsupported_opt_for_target` here in favor of `TargetSpecific` at `def mlarge_data_threshold_EQ`
https://github.com/llvm/llvm-project/pull/77958
More information about the cfe-commits
mailing list