Re: r351579 - [mips] Add '-mrelax-pic-calls', '-mno-relax-pic-calls'

2019-01-24 Thread Hans Wennborg via cfe-commits
Merged to 8.0 in r352139.

On Fri, Jan 18, 2019 at 11:58 AM Vladimir Stefanovic via cfe-commits
 wrote:
>
> Author: vstefanovic
> Date: Fri Jan 18 11:54:51 2019
> New Revision: 351579
>
> URL: http://llvm.org/viewvc/llvm-project?rev=351579=rev
> Log:
> [mips] Add '-mrelax-pic-calls', '-mno-relax-pic-calls'
>
> These two options enable/disable emission of R_{MICRO}MIPS_JALR fixups along
> with PIC calls. The linker may then try to turn PIC calls into direct jumps.
> By default, these fixups do get emitted by the backend, use
> '-mno-relax-pic-calls' to omit them.
>
> Differential revision: https://reviews.llvm.org/D56878
>
> Modified:
> cfe/trunk/include/clang/Driver/Options.td
> cfe/trunk/lib/Driver/ToolChains/Clang.cpp
> cfe/trunk/test/Driver/mips-features.c
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=351579=351578=351579=diff
> ==
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 18 11:54:51 2019
> @@ -2418,6 +2418,14 @@ def modd_spreg : Flag<["-"], "modd-spreg
>  def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, 
> Group,
>HelpText<"Disable odd single-precision floating point registers">,
>Flags<[HelpHidden]>;
> +def mrelax_pic_calls : Flag<["-"], "mrelax-pic-calls">,
> +  Group,
> +  HelpText<"Try turning PIC calls (j{al}r{c} $25) into direct calls "
> +  "(MIPS only)">, Flags<[HelpHidden]>;
> +def mno_relax_pic_calls : Flag<["-"], "mno-relax-pic-calls">,
> +  Group,
> +  HelpText<"Do not try turning PIC calls (j{al}r{c} $25) into direct calls "
> +  "(MIPS only)">, Flags<[HelpHidden]>;
>  def mglibc : Flag<["-"], "mglibc">, Group, Flags<[HelpHidden]>;
>  def muclibc : Flag<["-"], "muclibc">, Group, 
> Flags<[HelpHidden]>;
>  def module_file_info : Flag<["-"], "module-file-info">, 
> Flags<[DriverOption,CC1Option]>, Group,
>
> Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=351579=351578=351579=diff
> ==
> --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
> +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Fri Jan 18 11:54:51 2019
> @@ -1716,6 +1716,14 @@ void Clang::AddMIPSTargetArgs(const ArgL
>  } else
>D.Diag(diag::warn_target_unsupported_compact_branches) << CPUName;
>}
> +
> +  if (Arg *A = Args.getLastArg(options::OPT_mrelax_pic_calls,
> +   options::OPT_mno_relax_pic_calls)) {
> +if (A->getOption().matches(options::OPT_mno_relax_pic_calls)) {
> +  CmdArgs.push_back("-mllvm");
> +  CmdArgs.push_back("-mips-jalr-reloc=0");
> +}
> +  }
>  }
>
>  void Clang::AddPPCTargetArgs(const ArgList ,
>
> Modified: cfe/trunk/test/Driver/mips-features.c
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=351579=351578=351579=diff
> ==
> --- cfe/trunk/test/Driver/mips-features.c (original)
> +++ cfe/trunk/test/Driver/mips-features.c Fri Jan 18 11:54:51 2019
> @@ -444,3 +444,15 @@
>  // RUN: -mginv -mno-ginv 2>&1 \
>  // RUN:   | FileCheck --check-prefix=CHECK-NO-GINV %s
>  // CHECK-NO-GINV: "-target-feature" "-ginv"
> +//
> +// -mrelax-pic-calls
> +// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
> +// RUN: -mno-relax-pic-calls -mrelax-pic-calls 2>&1 \
> +// RUN:   | FileCheck --check-prefix=CHECK-RELAX-PIC-CALLS %s
> +// CHECK-RELAX-PIC-CALLS-NOT: "-mllvm" "-mips-jalr-reloc=0"
> +//
> +// -mno-relax-pic-calls
> +// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
> +// RUN: -mrelax-pic-calls -mno-relax-pic-calls 2>&1 \
> +// RUN:   | FileCheck --check-prefix=CHECK-NO-RELAX-PIC-CALLS %s
> +// CHECK-NO-RELAX-PIC-CALLS: "-mllvm" "-mips-jalr-reloc=0"
>
>
> ___
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r351579 - [mips] Add '-mrelax-pic-calls', '-mno-relax-pic-calls'

2019-01-18 Thread Vladimir Stefanovic via cfe-commits
Author: vstefanovic
Date: Fri Jan 18 11:54:51 2019
New Revision: 351579

URL: http://llvm.org/viewvc/llvm-project?rev=351579=rev
Log:
[mips] Add '-mrelax-pic-calls', '-mno-relax-pic-calls'

These two options enable/disable emission of R_{MICRO}MIPS_JALR fixups along
with PIC calls. The linker may then try to turn PIC calls into direct jumps.
By default, these fixups do get emitted by the backend, use
'-mno-relax-pic-calls' to omit them.

Differential revision: https://reviews.llvm.org/D56878

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/lib/Driver/ToolChains/Clang.cpp
cfe/trunk/test/Driver/mips-features.c

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=351579=351578=351579=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Fri Jan 18 11:54:51 2019
@@ -2418,6 +2418,14 @@ def modd_spreg : Flag<["-"], "modd-spreg
 def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group,
   HelpText<"Disable odd single-precision floating point registers">,
   Flags<[HelpHidden]>;
+def mrelax_pic_calls : Flag<["-"], "mrelax-pic-calls">,
+  Group,
+  HelpText<"Try turning PIC calls (j{al}r{c} $25) into direct calls "
+  "(MIPS only)">, Flags<[HelpHidden]>;
+def mno_relax_pic_calls : Flag<["-"], "mno-relax-pic-calls">,
+  Group,
+  HelpText<"Do not try turning PIC calls (j{al}r{c} $25) into direct calls "
+  "(MIPS only)">, Flags<[HelpHidden]>;
 def mglibc : Flag<["-"], "mglibc">, Group, Flags<[HelpHidden]>;
 def muclibc : Flag<["-"], "muclibc">, Group, Flags<[HelpHidden]>;
 def module_file_info : Flag<["-"], "module-file-info">, 
Flags<[DriverOption,CC1Option]>, Group,

Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=351579=351578=351579=diff
==
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Fri Jan 18 11:54:51 2019
@@ -1716,6 +1716,14 @@ void Clang::AddMIPSTargetArgs(const ArgL
 } else
   D.Diag(diag::warn_target_unsupported_compact_branches) << CPUName;
   }
+
+  if (Arg *A = Args.getLastArg(options::OPT_mrelax_pic_calls,
+   options::OPT_mno_relax_pic_calls)) {
+if (A->getOption().matches(options::OPT_mno_relax_pic_calls)) {
+  CmdArgs.push_back("-mllvm");
+  CmdArgs.push_back("-mips-jalr-reloc=0");
+}
+  }
 }
 
 void Clang::AddPPCTargetArgs(const ArgList ,

Modified: cfe/trunk/test/Driver/mips-features.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/mips-features.c?rev=351579=351578=351579=diff
==
--- cfe/trunk/test/Driver/mips-features.c (original)
+++ cfe/trunk/test/Driver/mips-features.c Fri Jan 18 11:54:51 2019
@@ -444,3 +444,15 @@
 // RUN: -mginv -mno-ginv 2>&1 \
 // RUN:   | FileCheck --check-prefix=CHECK-NO-GINV %s
 // CHECK-NO-GINV: "-target-feature" "-ginv"
+//
+// -mrelax-pic-calls
+// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
+// RUN: -mno-relax-pic-calls -mrelax-pic-calls 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-RELAX-PIC-CALLS %s
+// CHECK-RELAX-PIC-CALLS-NOT: "-mllvm" "-mips-jalr-reloc=0"
+//
+// -mno-relax-pic-calls
+// RUN: %clang -target mips-unknown-linux-gnu -### -c %s \
+// RUN: -mrelax-pic-calls -mno-relax-pic-calls 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-RELAX-PIC-CALLS %s
+// CHECK-NO-RELAX-PIC-CALLS: "-mllvm" "-mips-jalr-reloc=0"


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits