forked from OSchip/llvm-project
[clang][driver][ARM] Clean up ARM target & feature checking in clang driver.
Summary: - Similar to other targets, instead of passing a toolchain, a driver argument should be passed into `arm::getARMTargetFeatures`. Aslo, that routine should honor the specified triple. Refactor `arm::getARMFloatABI` with 2 separate interfaces. One has the original parameters and the other uses the driver and the specified triple. - That fixes an issue when target & features are queried during the offload compilation, where the specified triple should be checked instead of a effective triple. A previously failed test is re-enabled. Subscribers: kristof.beyls, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D74020
This commit is contained in:
parent
7603778922
commit
09a88120c9
|
@ -137,9 +137,8 @@ bool arm::useAAPCSForMachO(const llvm::Triple &T) {
|
|||
}
|
||||
|
||||
// Select mode for reading thread pointer (-mtp=soft/cp15).
|
||||
arm::ReadTPMode arm::getReadTPMode(const ToolChain &TC, const ArgList &Args) {
|
||||
arm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args) {
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {
|
||||
const Driver &D = TC.getDriver();
|
||||
arm::ReadTPMode ThreadPointer =
|
||||
llvm::StringSwitch<arm::ReadTPMode>(A->getValue())
|
||||
.Case("cp15", ReadTPMode::Cp15)
|
||||
|
@ -156,11 +155,14 @@ arm::ReadTPMode arm::getReadTPMode(const ToolChain &TC, const ArgList &Args) {
|
|||
return ReadTPMode::Soft;
|
||||
}
|
||||
|
||||
arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
|
||||
return arm::getARMFloatABI(TC.getDriver(), TC.getEffectiveTriple(), Args);
|
||||
}
|
||||
|
||||
// Select the float ABI as determined by -msoft-float, -mhard-float, and
|
||||
// -mfloat-abi=.
|
||||
arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
|
||||
const Driver &D = TC.getDriver();
|
||||
const llvm::Triple &Triple = TC.getEffectiveTriple();
|
||||
arm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple,
|
||||
const ArgList &Args) {
|
||||
auto SubArch = getARMSubArchVersionNumber(Triple);
|
||||
arm::FloatABI ABI = FloatABI::Invalid;
|
||||
if (Arg *A =
|
||||
|
@ -276,18 +278,13 @@ arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
|
|||
return ABI;
|
||||
}
|
||||
|
||||
void arm::getARMTargetFeatures(const ToolChain &TC,
|
||||
const llvm::Triple &Triple,
|
||||
const ArgList &Args,
|
||||
ArgStringList &CmdArgs,
|
||||
std::vector<StringRef> &Features,
|
||||
bool ForAS) {
|
||||
const Driver &D = TC.getDriver();
|
||||
|
||||
void arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||
const ArgList &Args, ArgStringList &CmdArgs,
|
||||
std::vector<StringRef> &Features, bool ForAS) {
|
||||
bool KernelOrKext =
|
||||
Args.hasArg(options::OPT_mkernel, options::OPT_fapple_kext);
|
||||
arm::FloatABI ABI = arm::getARMFloatABI(TC, Args);
|
||||
arm::ReadTPMode ThreadPointer = arm::getReadTPMode(TC, Args);
|
||||
arm::FloatABI ABI = arm::getARMFloatABI(D, Triple, Args);
|
||||
arm::ReadTPMode ThreadPointer = arm::getReadTPMode(D, Args);
|
||||
const Arg *WaCPU = nullptr, *WaFPU = nullptr;
|
||||
const Arg *WaHDiv = nullptr, *WaArch = nullptr;
|
||||
|
||||
|
|
|
@ -48,13 +48,15 @@ enum class FloatABI {
|
|||
};
|
||||
|
||||
FloatABI getARMFloatABI(const ToolChain &TC, const llvm::opt::ArgList &Args);
|
||||
ReadTPMode getReadTPMode(const ToolChain &TC, const llvm::opt::ArgList &Args);
|
||||
FloatABI getARMFloatABI(const Driver &D, const llvm::Triple &Triple,
|
||||
const llvm::opt::ArgList &Args);
|
||||
ReadTPMode getReadTPMode(const Driver &D, const llvm::opt::ArgList &Args);
|
||||
|
||||
bool useAAPCSForMachO(const llvm::Triple &T);
|
||||
void getARMArchCPUFromArgs(const llvm::opt::ArgList &Args,
|
||||
llvm::StringRef &Arch, llvm::StringRef &CPU,
|
||||
bool FromAs = false);
|
||||
void getARMTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple,
|
||||
void getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||
const llvm::opt::ArgList &Args,
|
||||
llvm::opt::ArgStringList &CmdArgs,
|
||||
std::vector<llvm::StringRef> &Features, bool ForAS);
|
||||
|
|
|
@ -326,7 +326,7 @@ static void getTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple,
|
|||
case llvm::Triple::armeb:
|
||||
case llvm::Triple::thumb:
|
||||
case llvm::Triple::thumbeb:
|
||||
arm::getARMTargetFeatures(TC, Triple, Args, CmdArgs, Features, ForAS);
|
||||
arm::getARMTargetFeatures(D, Triple, Args, CmdArgs, Features, ForAS);
|
||||
break;
|
||||
|
||||
case llvm::Triple::ppc:
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Verify that we can parse a simple CUDA file with or without -save-temps
|
||||
// http://llvm.org/PR22936
|
||||
// RUN: %clang -nocudainc -nocudalib -Werror -fsyntax-only -c %s
|
||||
// XFAIL: arm
|
||||
//
|
||||
// Verify that we pass -x cuda-cpp-output to compiler after
|
||||
// preprocessing a CUDA file
|
||||
|
|
Loading…
Reference in New Issue