diff options
Diffstat (limited to 'clang/lib/Driver')
| -rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 24 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/Gnu.cpp | 4 |
2 files changed, 26 insertions, 2 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 30d3e52..e20963a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -8266,6 +8266,30 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, << "/kernel"; } + if (const Arg *A = Args.getLastArg(options::OPT__SLASH_vlen, + options::OPT__SLASH_vlen_EQ_256, + options::OPT__SLASH_vlen_EQ_512)) { + llvm::Triple::ArchType AT = getToolChain().getArch(); + StringRef Default = AT == llvm::Triple::x86 ? "IA32" : "SSE2"; + StringRef Arch = Args.getLastArgValue(options::OPT__SLASH_arch, Default); + + if (A->getOption().matches(options::OPT__SLASH_vlen_EQ_512)) { + if (Arch == "AVX512F" || Arch == "AVX512") + CmdArgs.push_back("-mprefer-vector-width=512"); + else + D.Diag(diag::warn_drv_argument_not_allowed_with) + << "/vlen=512" << std::string("/arch:").append(Arch); + } + + if (A->getOption().matches(options::OPT__SLASH_vlen_EQ_256)) { + if (Arch == "AVX512F" || Arch == "AVX512") + CmdArgs.push_back("-mprefer-vector-width=256"); + else if (Arch != "AVX" && Arch != "AVX2") + D.Diag(diag::warn_drv_argument_not_allowed_with) + << "/vlen=256" << std::string("/arch:").append(Arch); + } + } + Arg *MostGeneralArg = Args.getLastArg(options::OPT__SLASH_vmg); Arg *BestCaseArg = Args.getLastArg(options::OPT__SLASH_vmb); if (MostGeneralArg && BestCaseArg) diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 7616076..2dd8cc8 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -1750,11 +1750,11 @@ static void findRISCVBareMetalMultilibs(const Driver &D, std::string MArch = tools::riscv::getRISCVArch(Args, TargetTriple); for (auto Element : RISCVMultilibSet) { addMultilibFlag(MArch == Element.march, - Twine("-march=", Element.march).str().c_str(), Flags); + Twine("-march=", Element.march).str(), Flags); if (!Added_ABIs.count(Element.mabi)) { Added_ABIs.insert(Element.mabi); addMultilibFlag(ABIName == Element.mabi, - Twine("-mabi=", Element.mabi).str().c_str(), Flags); + Twine("-mabi=", Element.mabi).str(), Flags); } } |
