@@ -2011,6 +2011,87 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
20112011 CmdArgs.push_back (" -mllvm" );
20122012 CmdArgs.push_back (" -mips-ssection-threshold=0" );
20132013 }
2014+
2015+ // In the case of NanoMips, warn about using all MIPS legacy options that are
2016+ // supported by LLVM.
2017+ if (Triple.isNanoMips ()) {
2018+ // -mabicalls option.
2019+ if (auto *A = Args.getLastArg (options::OPT_mabicalls,
2020+ options::OPT_mno_abicalls)) {
2021+ if (A->getOption ().matches (options::OPT_mabicalls)) {
2022+ D.Diag (diag::err_opt_not_valid_on_target)
2023+ << A->getOption ().getName () << CPUName;
2024+ }
2025+ }
2026+
2027+ // -mbranch-likely option.
2028+ if (auto *A = Args.getLastArg (options::OPT_mbranch_likely,
2029+ options::OPT_mno_branch_likely)) {
2030+ if (A->getOption ().matches (options::OPT_mbranch_likely)) {
2031+ D.Diag (diag::err_opt_not_valid_on_target)
2032+ << A->getOption ().getName () << CPUName;
2033+ }
2034+ }
2035+
2036+ // -mfp32, mfpxx and mfp64 options.
2037+ if (auto *A = Args.getLastArg (options::OPT_mfp32, options::OPT_mfpxx,
2038+ options::OPT_mfp64)) {
2039+ D.Diag (diag::err_opt_not_valid_on_target)
2040+ << A->getOption ().getName () << CPUName;
2041+ }
2042+
2043+ // -mabs= option.
2044+ if (auto *A = Args.getLastArg (options::OPT_mabs_EQ)) {
2045+ D.Diag (diag::err_opt_not_valid_on_target)
2046+ << A->getOption ().getName () << CPUName;
2047+ }
2048+
2049+ // -mnan= option.
2050+ if (auto *A = Args.getLastArg (options::OPT_mnan_EQ)) {
2051+ D.Diag (diag::err_opt_not_valid_on_target)
2052+ << A->getOption ().getName () << CPUName;
2053+ }
2054+
2055+ // -mips16 option.
2056+ if (auto *A =
2057+ Args.getLastArg (options::OPT_mips16, options::OPT_mno_mips16)) {
2058+ D.Diag (diag::err_opt_not_valid_on_target)
2059+ << A->getOption ().getName () << CPUName;
2060+ }
2061+
2062+ // -mmicromips option.
2063+ if (auto *A = Args.getLastArg (options::OPT_mmicromips,
2064+ options::OPT_mno_micromips)) {
2065+ D.Diag (diag::err_opt_not_valid_on_target)
2066+ << A->getOption ().getName () << CPUName;
2067+ }
2068+
2069+ // -mrelax-pic-calls option.
2070+ if (auto *A = Args.getLastArg (options::OPT_mrelax_pic_calls,
2071+ options::OPT_mno_relax_pic_calls)) {
2072+ D.Diag (diag::err_opt_not_valid_on_target)
2073+ << A->getOption ().getName () << CPUName;
2074+ }
2075+
2076+ // -mxgot option.
2077+ if (auto *A = Args.getLastArg (options::OPT_mxgot, options::OPT_mno_xgot)) {
2078+ D.Diag (diag::err_opt_not_valid_on_target)
2079+ << A->getOption ().getName () << CPUName;
2080+ }
2081+
2082+ // -modd-spreg option.
2083+ if (auto *A = Args.getLastArg (options::OPT_modd_spreg,
2084+ options::OPT_mno_odd_spreg)) {
2085+ D.Diag (diag::err_opt_not_valid_on_target)
2086+ << A->getOption ().getName () << CPUName;
2087+ }
2088+
2089+ // -mcompact-branches= option.
2090+ if (auto *A = Args.getLastArg (options::OPT_mcompact_branches_EQ)) {
2091+ D.Diag (diag::err_opt_not_valid_on_target)
2092+ << A->getOption ().getName () << CPUName;
2093+ }
2094+ }
20142095}
20152096
20162097void Clang::AddPPCTargetArgs (const ArgList &Args,
0 commit comments