================ @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits