]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/patches/patch-31-clang-r227062-fixes-x18.diff
Merge xz 5.2.0.
[FreeBSD/FreeBSD.git] / contrib / llvm / patches / patch-31-clang-r227062-fixes-x18.diff
1 Pull in r227062 from upstream clang trunk (by Renato Golin):
2
3   Allows Clang to use LLVM's fixes-x18 option
4
5   This patch allows clang to have llvm reserve the x18
6   platform register on AArch64. FreeBSD will use this in the kernel for
7   per-cpu data but has no need to reserve this register in userland so
8   will need this flag to reserve it.
9
10   This uses llvm r226664 to allow this register to be reserved.
11
12   Patch by Andrew Turner.
13
14 Introduced here: http://svnweb.freebsd.org/changeset/base/277775
15
16 Index: tools/clang/include/clang/Driver/Options.td
17 ===================================================================
18 --- tools/clang/include/clang/Driver/Options.td
19 +++ tools/clang/include/clang/Driver/Options.td
20 @@ -1141,6 +1141,9 @@ def mno_long_calls : Flag<["-"], "mno-long-calls">
21  def mgeneral_regs_only : Flag<["-"], "mgeneral-regs-only">, Group<m_aarch64_Features_Group>,
22    HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">;
23  
24 +def ffixed_x18 : Flag<["-"], "ffixed-x18">, Group<m_aarch64_Features_Group>,
25 +  HelpText<"Reserve the x18 register (AArch64 only)">;
26 +
27  def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
28  def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
29  def mfprnd : Flag<["-"], "mfprnd">, Group<m_ppc_Features_Group>;
30 Index: tools/clang/lib/Driver/Tools.cpp
31 ===================================================================
32 --- tools/clang/lib/Driver/Tools.cpp
33 +++ tools/clang/lib/Driver/Tools.cpp
34 @@ -887,6 +887,11 @@ void Clang::AddAArch64TargetArgs(const ArgList &Ar
35      if (A->getOption().matches(options::OPT_mno_global_merge))
36        CmdArgs.push_back("-mno-global-merge");
37    }
38 +
39 +  if (Args.hasArg(options::OPT_ffixed_x18)) {
40 +    CmdArgs.push_back("-backend-option");
41 +    CmdArgs.push_back("-aarch64-reserve-x18");
42 +  }
43  }
44  
45  // Get CPU and ABI names. They are not independent
46 Index: tools/clang/test/Driver/aarch64-fixed-x18.c
47 ===================================================================
48 --- tools/clang/test/Driver/aarch64-fixed-x18.c
49 +++ tools/clang/test/Driver/aarch64-fixed-x18.c
50 @@ -0,0 +1,4 @@
51 +// RUN: %clang -target aarch64-none-gnu -ffixed-x18 -### %s 2> %t
52 +// RUN: FileCheck --check-prefix=CHECK-FIXED-X18 < %t %s
53 +
54 +// CHECK-FIXED-X18: "-backend-option" "-aarch64-reserve-x18"