@@ -1728,6 +1728,10 @@ void Clang::RenderTargetOptions(const llvm::Triple &EffectiveTriple,
17281728 case llvm::Triple::ve:
17291729 AddVETargetArgs (Args, CmdArgs);
17301730 break ;
1731+
1732+ case llvm::Triple::xtensa:
1733+ AddXtensaTargetArgs (Args, CmdArgs);
1734+ break ;
17311735 }
17321736}
17331737
@@ -2276,6 +2280,34 @@ void Clang::AddVETargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {
22762280 CmdArgs.push_back (" hard" );
22772281}
22782282
2283+ void Clang::AddXtensaTargetArgs (const ArgList &Args,
2284+ ArgStringList &CmdArgs) const {
2285+ const Driver &D = getToolChain ().getDriver ();
2286+
2287+ if (Args.getLastArg (options::OPT_malways_memw) != nullptr ) {
2288+ CmdArgs.push_back (" -mllvm" );
2289+ CmdArgs.push_back (" -malways-memw" );
2290+ }
2291+
2292+ if (Args.getLastArg (options::OPT_mfix_esp32_psram_cache_issue) != nullptr ) {
2293+ CmdArgs.push_back (" -mllvm" );
2294+ CmdArgs.push_back (" -mfix-esp32-psram-cache-issue" );
2295+
2296+ if (Arg *A =
2297+ Args.getLastArg (options::OPT_mfix_esp32_psram_cache_strategy_EQ)) {
2298+ StringRef Value = A->getValue ();
2299+ if (Value == " memw" || Value == " nops" ) {
2300+ CmdArgs.push_back (" -mllvm" );
2301+ CmdArgs.push_back (
2302+ Args.MakeArgString (" -mfix-esp32-psram-cache-strategy=" + Value));
2303+ } else {
2304+ D.Diag (diag::err_drv_unsupported_option_argument)
2305+ << A->getOption ().getName () << Value;
2306+ }
2307+ }
2308+ }
2309+ }
2310+
22792311void Clang::DumpCompilationDatabase (Compilation &C, StringRef Filename,
22802312 StringRef Target, const InputInfo &Output,
22812313 const InputInfo &Input, const ArgList &Args) const {
0 commit comments