forked from OSchip/llvm-project
[mips] Support implicit gpopt with N64 when using -fno-pic
As clang defaults to -mno-abicalls when using -fno-pic for N64, implicitly use -mgpopt in that case. Reviewers: atanasyan Differential Revision: https://reviews.llvm.org/D36315 llvm-svn: 310714
This commit is contained in:
parent
ae5b53e7cd
commit
ad9d05de8f
|
@ -1473,8 +1473,21 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
|
|||
// NOTE: We need a warning here or in the backend to warn when -mgpopt is
|
||||
// passed explicitly when compiling something with -mabicalls
|
||||
// (implictly) in affect. Currently the warning is in the backend.
|
||||
//
|
||||
// When the ABI in use is N64, we also need to determine the PIC mode that
|
||||
// is in use, as -fno-pic for N64 implies -mno-abicalls.
|
||||
bool NoABICalls =
|
||||
ABICalls && ABICalls->getOption().matches(options::OPT_mno_abicalls);
|
||||
|
||||
llvm::Reloc::Model RelocationModel;
|
||||
unsigned PICLevel;
|
||||
bool IsPIE;
|
||||
std::tie(RelocationModel, PICLevel, IsPIE) =
|
||||
ParsePICArgs(getToolChain(), Args);
|
||||
|
||||
NoABICalls = NoABICalls ||
|
||||
(RelocationModel == llvm::Reloc::Static && ABIName == "n64");
|
||||
|
||||
bool WantGPOpt = GPOpt && GPOpt->getOption().matches(options::OPT_mgpopt);
|
||||
// We quietly ignore -mno-gpopt as the backend defaults to -mno-gpopt.
|
||||
if (NoABICalls && (!GPOpt || WantGPOpt)) {
|
||||
|
|
|
@ -85,6 +85,24 @@
|
|||
// RUN: | FileCheck --check-prefix=CHECK-MEMBEDDEDDATADEF %s
|
||||
// CHECK-MEMBEDDEDDATADEF-NOT: "-mllvm" "-membedded-data"
|
||||
//
|
||||
// MIPS64 + N64: -fno-pic -> -mno-abicalls -mgpopt
|
||||
// RUN: %clang -target mips64-mti-elf -mabi=64 -### -c %s -fno-pic 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-N64-GPOPT %s
|
||||
// CHECK-N64-GPOPT: "-target-feature" "+noabicalls"
|
||||
// CHECK-N64-GPOPT: "-mllvm" "-mgpopt"
|
||||
//
|
||||
// MIPS64 + N64: -fno-pic -mno-gpopt
|
||||
// RUN: %clang -target mips64-mti-elf -mabi=64 -### -c %s -fno-pic -mno-gpopt 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-N64-MNO-GPOPT %s
|
||||
// CHECK-N64-MNO-GPOPT: "-target-feature" "+noabicalls"
|
||||
// CHECK-N64-MNO-GPOPT-NOT: "-mllvm" "-mgpopt"
|
||||
//
|
||||
// MIPS64 + N64: -mgpopt (-fpic is implicit)
|
||||
// RUN: %clang -target mips64-mti-linux-gnu -mabi=64 -### -c %s -mgpopt 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-N64-PIC-GPOPT %s
|
||||
// CHECK-N64-PIC-GPOPT-NOT: "-mllvm" "-mgpopt"
|
||||
// CHECK-N64-PIC-GPOPT: ignoring '-mgpopt' option as it cannot be used with the implicit usage of -mabicalls
|
||||
//
|
||||
// -mips16
|
||||
// RUN: %clang -target mips-linux-gnu -### -c %s \
|
||||
// RUN: -mno-mips16 -mips16 2>&1 \
|
||||
|
|
Loading…
Reference in New Issue