Author: chenglin.bi Date: 2022-10-03T21:20:51+08:00 New Revision: b0fff3db6ada11e42a28389bb2b0c48181e2f719
URL: https://github.com/llvm/llvm-project/commit/b0fff3db6ada11e42a28389bb2b0c48181e2f719 DIFF: https://github.com/llvm/llvm-project/commit/b0fff3db6ada11e42a28389bb2b0c48181e2f719.diff LOG: [ARM64EC][clang-cl] Add /arm64EC flag Reviewed By: DavidSpickett Differential Revision: https://reviews.llvm.org/D134788 Added: Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/include/clang/Driver/Options.td clang/lib/Driver/Driver.cpp clang/test/Driver/cl-options.c Removed: ################################################################################ diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 282ecdbed4ce..e8a301ee6018 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -655,6 +655,10 @@ def warn_drv_fjmc_for_elf_only : Warning< "-fjmc works only for ELF; option ignored">, InGroup<OptionIgnored>; +def warn_target_override_arm64ec : Warning< + "/arm64EC has been overridden by specified target: %0; option ignored">, + InGroup<OptionIgnored>; + def err_drv_target_variant_invalid : Error< "unsupported '%0' value '%1'; use 'ios-macabi' instead">; diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f7744a109f9a..fb3bc378a44d 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6695,6 +6695,8 @@ def _SLASH_tune : CLCompileJoined<"tune:">, def _SLASH_QIntel_jcc_erratum : CLFlag<"QIntel-jcc-erratum">, HelpText<"Align branches within 32-byte boundaries to mitigate the performance impact of the Intel JCC erratum.">, Alias<mbranches_within_32B_boundaries>; +def _SLASH_arm64EC : CLFlag<"arm64EC">, + HelpText<"Set build target to arm64ec">; // Non-aliases: diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index a4bd2ded3c17..be62ce5de4b3 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -1256,6 +1256,8 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { T.setVendor(llvm::Triple::PC); T.setEnvironment(llvm::Triple::MSVC); T.setObjectFormat(llvm::Triple::COFF); + if (Args.hasArg(options::OPT__SLASH_arm64EC)) + T.setArch(llvm::Triple::aarch64, llvm::Triple::AArch64SubArch_arm64ec); TargetTriple = T.str(); } else if (IsDXCMode()) { // Build TargetTriple from target_profile option for clang-dxc. @@ -1380,6 +1382,14 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { const ToolChain &TC = getToolChain( *UArgs, computeTargetTriple(*this, TargetTriple, *UArgs)); + // Report warning when arm64EC option is overridden by specified target + if ((TC.getTriple().getArch() != llvm::Triple::aarch64 || + TC.getTriple().getSubArch() != llvm::Triple::AArch64SubArch_arm64ec) && + UArgs->hasArg(options::OPT__SLASH_arm64EC)) { + getDiags().Report(clang::diag::warn_target_override_arm64ec) + << TC.getTriple().str(); + } + // The compilation takes ownership of Args. Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs, ContainsError); diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c index 3d4a154af59f..6c768fbb7100 100644 --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c @@ -782,4 +782,8 @@ // EXTERNAL_W0: "-Wno-system-headers" // EXTERNAL_Wn: "-Wsystem-headers" +// RUN: %clang_cl -vctoolsdir "" /arm64EC /c -### -- %s 2>&1 | FileCheck %s --check-prefix ARM64EC +// ARM64EC: "-triple" "arm64ec-pc-windows-msvc19.20.0" +// ARM64EC-NOT: /arm64EC has been overridden by specified target + void f(void) { } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits