Author: sdardis Date: Fri Aug 11 08:01:34 2017 New Revision: 310714 URL: http://llvm.org/viewvc/llvm-project?rev=310714&view=rev Log: [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 Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/test/Driver/mips-features.c Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=310714&r1=310713&r2=310714&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Fri Aug 11 08:01:34 2017 @@ -1473,8 +1473,21 @@ void Clang::AddMIPSTargetArgs(const ArgL // 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)) { Modified: cfe/trunk/test/Driver/mips-features.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=310714&r1=310713&r2=310714&view=diff ============================================================================== --- cfe/trunk/test/Driver/mips-features.c (original) +++ cfe/trunk/test/Driver/mips-features.c Fri Aug 11 08:01:34 2017 @@ -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 \ _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits