llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver Author: Matt Arsenault (arsenm) <details> <summary>Changes</summary> Change BoundArch arguments in the clang driver from StringRef (or sometimes const char*) to a dedicated struct type that contains both the architecture string and a parsed OffloadArch enum field. In the future it may be useful to contain other feature bits here. Co-Authored-By: Claude Opus 4.6 <noreply@<!-- -->anthropic.com> --- Patch is 190.73 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/204748.diff 90 Files Affected: - (modified) clang/include/clang/Driver/Action.h (+23-23) - (added) clang/include/clang/Driver/BoundArch.h (+49) - (modified) clang/include/clang/Driver/Compilation.h (+11-10) - (modified) clang/include/clang/Driver/Driver.h (+11-11) - (modified) clang/include/clang/Driver/Job.h (+5-2) - (modified) clang/include/clang/Driver/SanitizerArgs.h (+2-1) - (modified) clang/include/clang/Driver/ToolChain.h (+14-13) - (modified) clang/lib/Driver/Action.cpp (+12-14) - (modified) clang/lib/Driver/Compilation.cpp (+7-7) - (modified) clang/lib/Driver/Driver.cpp (+132-140) - (modified) clang/lib/Driver/SanitizerArgs.cpp (+7-8) - (modified) clang/lib/Driver/ToolChain.cpp (+12-15) - (modified) clang/lib/Driver/ToolChains/AIX.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/AIX.h (+1-2) - (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+23-22) - (modified) clang/lib/Driver/ToolChains/AMDGPU.h (+6-8) - (modified) clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp (+6-7) - (modified) clang/lib/Driver/ToolChains/AMDGPUOpenMP.h (+2-3) - (modified) clang/lib/Driver/ToolChains/AVR.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/AVR.h (+1-2) - (modified) clang/lib/Driver/ToolChains/BareMetal.cpp (+3-5) - (modified) clang/lib/Driver/ToolChains/BareMetal.h (+2-3) - (modified) clang/lib/Driver/ToolChains/CSKYToolChain.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/CSKYToolChain.h (+1-2) - (modified) clang/lib/Driver/ToolChains/Clang.cpp (+19-20) - (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/CrossWindows.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/CrossWindows.h (+1-1) - (modified) clang/lib/Driver/ToolChains/Cuda.cpp (+22-25) - (modified) clang/lib/Driver/ToolChains/Cuda.h (+5-7) - (modified) clang/lib/Driver/ToolChains/Darwin.cpp (+18-24) - (modified) clang/lib/Driver/ToolChains/Darwin.h (+7-10) - (modified) clang/lib/Driver/ToolChains/Flang.cpp (+6-6) - (modified) clang/lib/Driver/ToolChains/Flang.h (+3-6) - (modified) clang/lib/Driver/ToolChains/FreeBSD.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/FreeBSD.h (+1-1) - (modified) clang/lib/Driver/ToolChains/Fuchsia.cpp (+5-6) - (modified) clang/lib/Driver/ToolChains/Fuchsia.h (+3-4) - (modified) clang/lib/Driver/ToolChains/Gnu.cpp (+4-6) - (modified) clang/lib/Driver/ToolChains/Gnu.h (+2-3) - (modified) clang/lib/Driver/ToolChains/HIPAMD.cpp (+8-9) - (modified) clang/lib/Driver/ToolChains/HIPAMD.h (+3-4) - (modified) clang/lib/Driver/ToolChains/HIPSPV.cpp (+7-8) - (modified) clang/lib/Driver/ToolChains/HIPSPV.h (+3-4) - (modified) clang/lib/Driver/ToolChains/HIPUtility.cpp (+5-5) - (modified) clang/lib/Driver/ToolChains/HLSL.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/HLSL.h (+1-1) - (modified) clang/lib/Driver/ToolChains/Haiku.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/Haiku.h (+1-1) - (modified) clang/lib/Driver/ToolChains/Hexagon.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/Hexagon.h (+1-2) - (modified) clang/lib/Driver/ToolChains/Linux.cpp (+6-7) - (modified) clang/lib/Driver/ToolChains/Linux.h (+3-4) - (modified) clang/lib/Driver/ToolChains/MSP430.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/MSP430.h (+1-2) - (modified) clang/lib/Driver/ToolChains/MSVC.cpp (+8-9) - (modified) clang/lib/Driver/ToolChains/MSVC.h (+4-5) - (modified) clang/lib/Driver/ToolChains/Managarm.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/Managarm.h (+1-1) - (modified) clang/lib/Driver/ToolChains/MinGW.cpp (+3-4) - (modified) clang/lib/Driver/ToolChains/MinGW.h (+2-3) - (modified) clang/lib/Driver/ToolChains/NetBSD.cpp (+3-4) - (modified) clang/lib/Driver/ToolChains/NetBSD.h (+2-3) - (modified) clang/lib/Driver/ToolChains/OHOS.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/OHOS.h (+1-1) - (modified) clang/lib/Driver/ToolChains/OpenBSD.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/OpenBSD.h (+1-1) - (modified) clang/lib/Driver/ToolChains/PS4CPU.cpp (+5-7) - (modified) clang/lib/Driver/ToolChains/PS4CPU.h (+3-4) - (modified) clang/lib/Driver/ToolChains/SPIRVOpenMP.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/SPIRVOpenMP.h (+1-2) - (modified) clang/lib/Driver/ToolChains/SYCL.cpp (+6-8) - (modified) clang/lib/Driver/ToolChains/SYCL.h (+2-3) - (modified) clang/lib/Driver/ToolChains/Serenity.cpp (+2-2) - (modified) clang/lib/Driver/ToolChains/Serenity.h (+1-1) - (modified) clang/lib/Driver/ToolChains/Solaris.cpp (+2-3) - (modified) clang/lib/Driver/ToolChains/Solaris.h (+1-1) - (modified) clang/lib/Driver/ToolChains/VEToolchain.cpp (+1-2) - (modified) clang/lib/Driver/ToolChains/VEToolchain.h (+1-2) - (modified) clang/lib/Driver/ToolChains/WebAssembly.cpp (+3-5) - (modified) clang/lib/Driver/ToolChains/WebAssembly.h (+2-3) - (modified) clang/lib/Driver/ToolChains/XCore.cpp (+1-2) - (modified) clang/lib/Driver/ToolChains/XCore.h (+1-2) - (modified) clang/lib/Driver/ToolChains/ZOS.cpp (+1-1) - (modified) clang/lib/Driver/ToolChains/ZOS.h (+1-2) - (modified) clang/test/Driver/hip-link-bundle-archive.hip (+6-6) - (modified) clang/test/Driver/hip-phases.hip (+12-12) - (modified) clang/test/Driver/hip-target-id.hip (+1-1) - (modified) clang/test/Driver/hip-toolchain-no-rdc.hip (+4-4) - (modified) clang/unittests/Driver/DXCModeTest.cpp (+6-5) ``````````diff diff --git a/clang/include/clang/Driver/Action.h b/clang/include/clang/Driver/Action.h index 67937b00f6bcf..16e598f0b63b3 100644 --- a/clang/include/clang/Driver/Action.h +++ b/clang/include/clang/Driver/Action.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_DRIVER_ACTION_H #include "clang/Basic/LLVM.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/Types.h" #include "clang/Driver/Util.h" #include "llvm/ADT/ArrayRef.h" @@ -131,7 +132,7 @@ class Action { OffloadKind OffloadingDeviceKind = OFK_None; /// The Offloading architecture associated with this action. - const char *OffloadingArch = nullptr; + BoundArch OffloadingArch; /// The Offloading toolchain associated with this device action. const ToolChain *OffloadingToolChain = nullptr; @@ -192,14 +193,14 @@ class Action { /// Set the device offload info of this action and propagate it to its /// dependences. - void propagateDeviceOffloadInfo(OffloadKind OKind, const char *OArch, + void propagateDeviceOffloadInfo(OffloadKind OKind, BoundArch OArch, const ToolChain *OToolChain); /// Append the host offload info of this action and propagate it to its /// dependences. - void propagateHostOffloadInfo(unsigned OKinds, const char *OArch); + void propagateHostOffloadInfo(unsigned OKinds, BoundArch OArch); - void setHostOffloadInfo(unsigned OKinds, const char *OArch) { + void setHostOffloadInfo(unsigned OKinds, BoundArch OArch) { ActiveOffloadKindMask |= OKinds; OffloadingArch = OArch; } @@ -213,7 +214,7 @@ class Action { } OffloadKind getOffloadingDeviceKind() const { return OffloadingDeviceKind; } - const char *getOffloadingArch() const { return OffloadingArch; } + BoundArch getOffloadingArch() const { return OffloadingArch; } const ToolChain *getOffloadingToolChain() const { return OffloadingToolChain; } @@ -253,14 +254,14 @@ class InputAction : public Action { class BindArchAction : public Action { virtual void anchor(); - /// The architecture to bind, or 0 if the default architecture + /// The architecture to bind, or empty if the default architecture /// should be bound. - StringRef ArchName; + BoundArch ArchName; public: - BindArchAction(Action *Input, StringRef ArchName); + BindArchAction(Action *Input, BoundArch ArchName); - StringRef getArchName() const { return ArchName; } + BoundArch getArch() const { return ArchName; } static bool classof(const Action *A) { return A->getKind() == BindArchClass; @@ -279,7 +280,7 @@ class OffloadAction final : public Action { class DeviceDependences final { public: using ToolChainList = SmallVector<const ToolChain *, 3>; - using BoundArchList = SmallVector<const char *, 3>; + using BoundArchList = SmallVector<BoundArch, 3>; using OffloadKindList = SmallVector<OffloadKind, 3>; private: @@ -303,12 +304,11 @@ class OffloadAction final : public Action { public: /// Add an action along with the associated toolchain, bound arch, and /// offload kind. - void add(Action &A, const ToolChain &TC, const char *BoundArch, - OffloadKind OKind); + void add(Action &A, const ToolChain &TC, BoundArch BA, OffloadKind OKind); /// Add an action along with the associated toolchain, bound arch, and /// offload kinds. - void add(Action &A, const ToolChain &TC, const char *BoundArch, + void add(Action &A, const ToolChain &TC, BoundArch BA, unsigned OffloadKindMask); /// Get each of the individual arrays. @@ -330,29 +330,29 @@ class OffloadAction final : public Action { const ToolChain &HostToolChain; /// The architectures that should be used with this action. - const char *HostBoundArch = nullptr; + BoundArch HostBoundArch; /// The offload kind of each dependence. unsigned HostOffloadKinds = 0u; public: - HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, + HostDependence(Action &A, const ToolChain &TC, BoundArch BA, const unsigned OffloadKinds) - : HostAction(A), HostToolChain(TC), HostBoundArch(BoundArch), + : HostAction(A), HostToolChain(TC), HostBoundArch(BA), HostOffloadKinds(OffloadKinds) {} /// Constructor version that obtains the offload kinds from the device /// dependencies. - HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, + HostDependence(Action &A, const ToolChain &TC, BoundArch BoundArch, const DeviceDependences &DDeps); Action *getAction() const { return &HostAction; } const ToolChain *getToolChain() const { return &HostToolChain; } - const char *getBoundArch() const { return HostBoundArch; } + BoundArch getBoundArch() const { return HostBoundArch; } unsigned getOffloadKinds() const { return HostOffloadKinds; } }; using OffloadActionWorkTy = - llvm::function_ref<void(Action *, const ToolChain *, const char *)>; + llvm::function_ref<void(Action *, const ToolChain *, BoundArch)>; private: /// The host offloading toolchain that should be used with the action. @@ -598,13 +598,13 @@ class OffloadUnbundlingJobAction final : public JobAction { const ToolChain *DependentToolChain = nullptr; /// The bound architecture of the dependent action. - StringRef DependentBoundArch; + BoundArch DependentBoundArch; /// The offload kind of the dependent action. const OffloadKind DependentOffloadKind = OFK_None; DependentActionInfo(const ToolChain *DependentToolChain, - StringRef DependentBoundArch, + BoundArch DependentBoundArch, const OffloadKind DependentOffloadKind) : DependentToolChain(DependentToolChain), DependentBoundArch(DependentBoundArch), @@ -621,9 +621,9 @@ class OffloadUnbundlingJobAction final : public JobAction { OffloadUnbundlingJobAction(Action *Input); /// Register information about a dependent action. - void registerDependentActionInfo(const ToolChain *TC, StringRef BoundArch, + void registerDependentActionInfo(const ToolChain *TC, BoundArch BA, OffloadKind Kind) { - DependentActionInfoArray.push_back({TC, BoundArch, Kind}); + DependentActionInfoArray.push_back({TC, BA, Kind}); } /// Return the information about all depending actions. diff --git a/clang/include/clang/Driver/BoundArch.h b/clang/include/clang/Driver/BoundArch.h new file mode 100644 index 0000000000000..7c1f730586289 --- /dev/null +++ b/clang/include/clang/Driver/BoundArch.h @@ -0,0 +1,49 @@ +//===--- BoundArch.h - Bound Architecture struct ----------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_DRIVER_BOUNDARCH_H +#define LLVM_CLANG_DRIVER_BOUNDARCH_H + +#include "clang/Basic/OffloadArch.h" +#include "llvm/ADT/StringRef.h" + +namespace clang { +namespace driver { + +/// Represents a bound architecture for offload / multiple architecture +/// compilation. +struct BoundArch { + llvm::StringRef ArchName; + + /// The parsed offload architecture enum. + /// Will be OffloadArch::Unknown if ArchName not recognized. + OffloadArch Arch = OffloadArch::Unused; + + BoundArch() = default; + explicit BoundArch(llvm::StringRef Name) + : ArchName(Name), + Arch(Name.empty() ? OffloadArch::Unknown : StringToOffloadArch(Name)) {} + + BoundArch(llvm::StringRef Name, OffloadArch A) : ArchName(Name), Arch(A) {} + + bool empty() const { return ArchName.empty(); } + explicit operator bool() const { return Arch != OffloadArch::Unused; } + + bool operator==(const BoundArch &Other) const { + return Arch == Other.Arch && ArchName == Other.ArchName; + } + + bool operator<(const BoundArch &Other) const { + return std::tie(Arch, ArchName) < std::tie(Other.Arch, Other.ArchName); + } +}; + +} // namespace driver +} // namespace clang + +#endif // LLVM_CLANG_DRIVER_BOUNDARCH_H diff --git a/clang/include/clang/Driver/Compilation.h b/clang/include/clang/Driver/Compilation.h index 4ad2dc34a1f85..aa0c3de574edc 100644 --- a/clang/include/clang/Driver/Compilation.h +++ b/clang/include/clang/Driver/Compilation.h @@ -11,6 +11,7 @@ #include "clang/Basic/LLVM.h" #include "clang/Driver/Action.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/Job.h" #include "clang/Driver/Util.h" #include "llvm/ADT/ArrayRef.h" @@ -82,16 +83,16 @@ class Compilation { /// architecture, and device offload kind. struct TCArgsKey final { const ToolChain *TC = nullptr; - StringRef BoundArch; + BoundArch BoundArchitecture; Action::OffloadKind DeviceOffloadKind = Action::OFK_None; - TCArgsKey(const ToolChain *TC, StringRef BoundArch, + TCArgsKey(const ToolChain *TC, BoundArch BA, Action::OffloadKind DeviceOffloadKind) - : TC(TC), BoundArch(BoundArch), DeviceOffloadKind(DeviceOffloadKind) {} + : TC(TC), BoundArchitecture(BA), DeviceOffloadKind(DeviceOffloadKind) {} bool operator<(const TCArgsKey &K) const { - return std::tie(TC, BoundArch, DeviceOffloadKind) < - std::tie(K.TC, K.BoundArch, K.DeviceOffloadKind); + return std::tie(TC, BoundArchitecture, DeviceOffloadKind) < + std::tie(K.TC, K.BoundArchitecture, K.DeviceOffloadKind); } }; std::map<TCArgsKey, llvm::opt::DerivedArgList *> TCArgs; @@ -128,7 +129,7 @@ class Compilation { /// The bound architecture currently being built, if any. Set around /// ConstructJob calls so addCommand can stamp it onto each new Command. - StringRef CurrentBoundArch; + BoundArch CurrentBoundArch; public: Compilation(const Driver &D, const ToolChain &DefaultToolChain, @@ -220,8 +221,8 @@ class Compilation { Jobs.addJob(std::move(Cmd)); } - StringRef getCurrentBoundArch() const { return CurrentBoundArch; } - void setCurrentBoundArch(StringRef Arch) { CurrentBoundArch = Arch; } + BoundArch getCurrentBoundArch() const { return CurrentBoundArch; } + void setCurrentBoundArch(BoundArch BA) { CurrentBoundArch = BA; } llvm::opt::ArgStringList &getTempFiles() { return TempFiles; } const llvm::opt::ArgStringList &getTempFiles() const { return TempFiles; } @@ -248,11 +249,11 @@ class Compilation { /// If a device offloading kind is specified, a translation specific for that /// kind is performed, if any. /// - /// \param BoundArch - The bound architecture name, or 0. + /// \param BA - The bound architecture. /// \param DeviceOffloadKind - The offload device kind that should be used in /// the translation, if any. const llvm::opt::DerivedArgList & - getArgsForToolChain(const ToolChain *TC, StringRef BoundArch, + getArgsForToolChain(const ToolChain *TC, BoundArch BA, Action::OffloadKind DeviceOffloadKind); /// addTempFile - Add a file to remove on exit, and returns its diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 19a371163f050..81848cf587286 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -13,6 +13,7 @@ #include "clang/Basic/HeaderInclude.h" #include "clang/Basic/LLVM.h" #include "clang/Driver/Action.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Phases.h" @@ -523,7 +524,7 @@ class Driver { /// Returns the set of bound architectures active for this offload kind. /// If there are no bound architctures we return a set containing only the /// empty string. - llvm::SmallVector<StringRef> + llvm::SmallVector<BoundArch> getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, Action::OffloadKind Kind, const ToolChain &TC) const; @@ -658,7 +659,7 @@ class Driver { /// return an InputInfo for the result of running \p A. Will only construct /// jobs for a given (Action, ToolChain, BoundArch, DeviceKind) tuple once. InputInfoList BuildJobsForAction( - Compilation &C, const Action *A, const ToolChain *TC, StringRef BoundArch, + Compilation &C, const Action *A, const ToolChain *TC, BoundArch BA, bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput, std::map<std::pair<const Action *, std::string>, InputInfoList> &CachedResults, @@ -668,17 +669,16 @@ class Driver { const char *getDefaultImageName() const; /// Creates a temp file. - /// 1. If \p MultipleArch is false or \p BoundArch is empty, the temp file is + /// 1. If \p MultipleArch is false or \p BA is empty, the temp file is /// in the temporary directory with name $Prefix-%%%%%%.$Suffix. - /// 2. If \p MultipleArch is true and \p BoundArch is not empty, + /// 2. If \p MultipleArch is true and \p BA is not empty, /// 2a. If \p NeedUniqueDirectory is false, the temp file is in the - /// temporary directory with name $Prefix-$BoundArch-%%%%%.$Suffix. + /// temporary directory with name $Prefix-$BA-%%%%%.$Suffix. /// 2b. If \p NeedUniqueDirectory is true, the temp file is in a unique /// subdiretory with random name under the temporary directory, and - /// the temp file itself has name $Prefix-$BoundArch.$Suffix. + /// the temp file itself has name $Prefix-$BA.$Suffix. const char *CreateTempFile(Compilation &C, StringRef Prefix, StringRef Suffix, - bool MultipleArchs = false, - StringRef BoundArch = {}, + bool MultipleArchs = false, BoundArch BA = {}, bool NeedUniqueDirectory = false) const; /// GetNamedOutputPath - Return the name to use for the output of @@ -689,12 +689,12 @@ class Driver { /// \param JA - The action of interest. /// \param BaseInput - The original input file that this action was /// triggered by. - /// \param BoundArch - The bound architecture. + /// \param BA - The bound architecture. /// \param AtTopLevel - Whether this is a "top-level" action. /// \param MultipleArchs - Whether multiple -arch options were supplied. /// \param NormalizedTriple - The normalized triple of the relevant target. const char *GetNamedOutputPath(Compilation &C, const JobAction &JA, - const char *BaseInput, StringRef BoundArch, + const char *BaseInput, BoundArch BA, bool AtTopLevel, bool MultipleArchs, StringRef NormalizedTriple) const; @@ -785,7 +785,7 @@ class Driver { /// jobs specifically for the given action, but will use the cache when /// building jobs for the Action's inputs. InputInfoList BuildJobsForActionNoCache( - Compilation &C, const Action *A, const ToolChain *TC, StringRef BoundArch, + Compilation &C, const Action *A, const ToolChain *TC, BoundArch BA, bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput, std::map<std::pair<const Action *, std::string>, InputInfoList> &CachedResults, diff --git a/clang/include/clang/Driver/Job.h b/clang/include/clang/Driver/Job.h index 116254f79ae6f..a600064fe0a9e 100644 --- a/clang/include/clang/Driver/Job.h +++ b/clang/include/clang/Driver/Job.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_DRIVER_JOB_H #include "clang/Basic/LLVM.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/InputInfo.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" @@ -195,8 +196,10 @@ class Command { const Tool &getCreator() const { return Creator; } /// Return the bound architecture for this command, if any. - StringRef getBoundArch() const { return BoundArch; } - void setBoundArch(StringRef Arch) { BoundArch = std::string(Arch); } + driver::BoundArch getBoundArch() const { + return driver::BoundArch(BoundArch); + } + void setBoundArch(driver::BoundArch BA) { BoundArch = BA.ArchName.str(); } /// Returns the kind of response file supported by the current invocation. const ResponseFileSupport &getResponseFileSupport() { diff --git a/clang/include/clang/Driver/SanitizerArgs.h b/clang/include/clang/Driver/SanitizerArgs.h index d4ee17802fd8e..702209fbdbe72 100644 --- a/clang/include/clang/Driver/SanitizerArgs.h +++ b/clang/include/clang/Driver/SanitizerArgs.h @@ -10,6 +10,7 @@ #include "clang/Basic/Sanitizers.h" #include "clang/Driver/Action.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/Types.h" #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" @@ -87,7 +88,7 @@ class SanitizerArgs { /// Parses the sanitizer arguments from an argument list. SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors = true, bool DiagnoseBoundArchErrors = true, - StringRef BoundArch = "", + BoundArch BA = {}, Action::OffloadKind DeviceOffloadKind = Action::OFK_None); bool needsSharedRt() const { return SharedRuntime; } diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 8953c299268df..50e2752b5e16d 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -13,6 +13,7 @@ #include "clang/Basic/LangOptions.h" #include "clang/Basic/Sanitizers.h" #include "clang/Driver/Action.h" +#include "clang/Driver/BoundArch.h" #include "clang/Driver/Multilib.h" #include "clang/Driver/Types.h" #include "llvm/ADT/APFloat.h" @@ -347,7 +348,7 @@ class ToolChain { Multilib::flags_list getMultilibFlags(const llvm::opt::ArgList &) const; SanitizerArgs getSanitizerArgs( - const llvm::opt::ArgList &JobArgs, StringRef BoundArch = "", + const llvm::opt::ArgList &JobArgs, BoundArch BA = {}, Action::OffloadKind DeviceOffloadKind = Action::OFK_None) const; /// Returns the feature requirement for a sanitizer on a specific arch for @@ -355,7 +356,7 @@ class ToolChain { /// the sanitizer is generally supported but requires a specific feature for /// the given BoundArch, or an empty StringRef otherwise. virtual StringRef getSanitizerRequirement(SanitizerMask Kinds, - StringRef BoundArch) const { + BoundArch BA) const { return {}; } @@ -393,11 +394,11 @@ class ToolChain { /// specific translations are needed. If \p DeviceOffloadKind is specified /// the translation specific for that offload kind is performed. /// - /// \param BoundArch - The bound architecture name, or 0. + /// \param BA - The bound architecture. /// \param DeviceOffloadKind - The device offload kind used for the /// translation. virtual llvm::opt::DerivedArgList * - TranslateArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, + TranslateArgs(const llvm::opt::DerivedArgList &Args, BoundArch BA, Action::OffloadKind DeviceOffloadKind) const { return nullptr; } @@ -421,7 +422,7 @@ class ToolChain { /// a null pointer, otherwise return a DerivedArgList containing the /// translated arguments. virtual llvm::opt::DerivedArgList * - TranslateXarchArgs(const llvm::opt::DerivedArgList &Args, StringRef BoundArch, + TranslateXarchArgs(const llvm::opt::DerivedArgList &Args, BoundArch BA, Action::OffloadKind DeviceOffloadKind, SmallVectorImpl<llvm::opt::Arg *> *AllocatedArgs) const; @@ -715,7 +716,7 @@ class ToolChain { /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking /// command line arguments into account. virtual std::string - ComputeLLVMTriple(const llvm::opt::ArgList &Args, StringRef BoundArch = {}, + ComputeLLVMTriple(const llvm::opt::ArgList &Args, BoundArch BA = {}, types::ID InputType = types::TY_INVALID) const; /// ComputeEffectiveClangTriple - Return the Clang triple to use for this @@ -724,8 +725,7 @@ class ToolChain { /// sets the deployment target) determines the version in the... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/204748 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
