forked from OSchip/llvm-project
Unified logic for computing target ABI in backend and front end by moving this common code to Support/TargetParser.
Modeled Triple::GNU after front end code (aapcs abi) and updated tests that expect apcs abi. Patch by Ana Pazos! llvm-svn: 306769
This commit is contained in:
parent
ee837a59f7
commit
53b2cb77cc
clang
lib/Driver/ToolChains
test/CodeGen
|
@ -35,6 +35,7 @@
|
|||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/Process.h"
|
||||
#include "llvm/Support/TargetParser.h"
|
||||
#include "llvm/Support/YAMLParser.h"
|
||||
|
||||
#ifdef LLVM_ON_UNIX
|
||||
|
@ -1315,43 +1316,13 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
|
|||
// FIXME: Support -meabi.
|
||||
// FIXME: Parts of this are duplicated in the backend, unify this somehow.
|
||||
const char *ABIName = nullptr;
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {
|
||||
if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ))
|
||||
ABIName = A->getValue();
|
||||
} else if (Triple.isOSBinFormatMachO()) {
|
||||
if (arm::useAAPCSForMachO(Triple)) {
|
||||
ABIName = "aapcs";
|
||||
} else if (Triple.isWatchABI()) {
|
||||
ABIName = "aapcs16";
|
||||
} else {
|
||||
ABIName = "apcs-gnu";
|
||||
}
|
||||
} else if (Triple.isOSWindows()) {
|
||||
// FIXME: this is invalid for WindowsCE
|
||||
ABIName = "aapcs";
|
||||
} else {
|
||||
// Select the default based on the platform.
|
||||
switch (Triple.getEnvironment()) {
|
||||
case llvm::Triple::Android:
|
||||
case llvm::Triple::GNUEABI:
|
||||
case llvm::Triple::GNUEABIHF:
|
||||
case llvm::Triple::MuslEABI:
|
||||
case llvm::Triple::MuslEABIHF:
|
||||
ABIName = "aapcs-linux";
|
||||
break;
|
||||
case llvm::Triple::EABIHF:
|
||||
case llvm::Triple::EABI:
|
||||
ABIName = "aapcs";
|
||||
break;
|
||||
default:
|
||||
if (Triple.getOS() == llvm::Triple::NetBSD)
|
||||
ABIName = "apcs-gnu";
|
||||
else if (Triple.getOS() == llvm::Triple::OpenBSD)
|
||||
ABIName = "aapcs-linux";
|
||||
else
|
||||
ABIName = "aapcs";
|
||||
break;
|
||||
}
|
||||
else {
|
||||
StringRef CPU = getCPUName(Args, Triple, /*FromAs*/ false);
|
||||
ABIName = llvm::ARM::computeDefaultTargetABI(Triple, CPU).data();
|
||||
}
|
||||
|
||||
CmdArgs.push_back("-target-abi");
|
||||
CmdArgs.push_back(ABIName);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -triple armv8.1a-linux-gnu -target-feature +neon \
|
||||
// RUN: %clang_cc1 -triple armv8.1a-linux-gnu -target-abi apcs-gnu -target-feature +neon \
|
||||
// RUN: -S -emit-llvm -o - %s \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-linux-gnu -S -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-X86-64
|
||||
// RUN: %clang_cc1 -triple arm64-linux-gnu -S -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM
|
||||
// RUN: %clang_cc1 -triple armv7-linux-gnu -S -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM
|
||||
// RUN: %clang_cc1 -triple armv7-linux-gnu -target-abi apcs-gnu -S -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM
|
||||
|
||||
// CHECK-NOT: @sp = common global
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -triple armv7s-linux-gnu -emit-llvm -o - %s \
|
||||
// RUN: %clang_cc1 -triple armv7s-linux-gnu -target-abi apcs-gnu -emit-llvm -o - %s \
|
||||
// RUN: -target-feature +neon -target-cpu cortex-a8 \
|
||||
// RUN: -fsanitize=signed-integer-overflow \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=ARMV7
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple x86_64-unknown-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple arm-unknown-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple arm-unknown-linux-gnu -target-abi apcs-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple mips-unknown-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple mipsel-unknown-linux-gnu | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -fxray-instrument -std=c++11 -x c++ -emit-llvm -o - -triple mips64-unknown-linux-gnu | FileCheck %s
|
||||
|
|
Loading…
Reference in New Issue