This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, MIPS] Target flag and build option to disable indexed memory OPs.
- From: Doug Gilmore <Doug dot Gilmore at imgtec dot com>
- To: <gcc-patches at gcc dot gnu dot org>, <Matthew dot Fortune at imgtec dot com>
- Date: Fri, 13 Jan 2017 16:25:29 -0800
- Subject: [PATCH, MIPS] Target flag and build option to disable indexed memory OPs.
- Authentication-results: sourceware.org; auth=none
I recently bisected PR78176 to problems introduced with r21650.
Given the short time until the release, we would like to
provide a target flag and build option to avoid the bug until
we are able to resolve the problem with the commit. Note that
as Matthew Fortune has mentioned in the PR:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78176#c5
the problem could also be addressed by updates to the Linux kernel
since the problem is only exposed by running MIPS 32-bit binaries on
64-bit kernels.
Bootstrapped on X86_64, regression tested on X86_64 and MIPS.
OK to commit?
Thanks,
Doug
>From 2a6b11b30ff335ea8e669ae8d3f1bd531ac5b8d3 Mon Sep 17 00:00:00 2001
From: Doug Gilmore <doug.gilmore@imgtec.com>
Date: Wed, 11 Jan 2017 16:49:27 -0800
Subject: [PATCH] [MIPS] PR target/78176 add -mindexed-load-store.
PR target/78176
* config.gcc (supported_defaults): Add indexed-load-store.
(with_indexed_load_store): Add validation.
(all_defaults): Add indexed-load-store.
* config/mips/mips.opt (mindexed-load-store): New option.
* gcc/config/mips/mips.h (OPTION_DEFAULT_SPECS): Add a default for
mindexed-load-store.
ISA_HAS_LXC1_SXC1 gate with mips_indexed_load_store.
* gcc/doc/invoke.texi (-mindexed-load-store): Document the new option.
* doc/install.texi (--with-indexed-load-store): Document the new option.
---
gcc/config.gcc | 19 +++++++++++++++++--
gcc/config/mips/mips.h | 6 ++++--
gcc/config/mips/mips.opt | 4 ++++
gcc/doc/install.texi | 8 ++++++++
gcc/doc/invoke.texi | 6 ++++++
5 files changed, 39 insertions(+), 4 deletions(-)
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 7c27546..e712599 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -3940,7 +3940,7 @@ case "${target}" in
;;
mips*-*-*)
- supported_defaults="abi arch arch_32 arch_64 float fpu nan fp_32 odd_spreg_32 tune tune_32 tune_64 divide llsc mips-plt synci"
+ supported_defaults="abi arch arch_32 arch_64 float fpu nan fp_32 odd_spreg_32 tune tune_32 tune_64 divide llsc mips-plt synci indexed-load-store"
case ${with_float} in
"" | soft | hard)
@@ -4063,6 +4063,21 @@ case "${target}" in
exit 1
;;
esac
+
+ case ${with_indexed_load_store} in
+ yes)
+ with_indexed_load_store=indexed-load-store
+ ;;
+ no)
+ with_indexed_load_store=no-indexed-load-store
+ ;;
+ "")
+ ;;
+ *)
+ echo "Unknown indexed-load-store type used in --with-indexed-load-store" 1>&2
+ exit 1
+ ;;
+ esac
;;
nds32*-*-*)
@@ -4496,7 +4511,7 @@ case ${target} in
esac
t=
-all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls"
+all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls indexed-load-store"
for option in $all_defaults
do
eval "val=\$with_"`echo $option | sed s/-/_/g`
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index f91b43d..6d2aa9a 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -866,7 +866,8 @@ struct mips_cpu_info {
{"divide", "%{!mdivide-traps:%{!mdivide-breaks:-mdivide-%(VALUE)}}" }, \
{"llsc", "%{!mllsc:%{!mno-llsc:-m%(VALUE)}}" }, \
{"mips-plt", "%{!mplt:%{!mno-plt:-m%(VALUE)}}" }, \
- {"synci", "%{!msynci:%{!mno-synci:-m%(VALUE)}}" }
+ {"synci", "%{!msynci:%{!mno-synci:-m%(VALUE)}}" }, \
+ {"indexed-load-store", "%{!mindexed-load-store:%{!mno-indexed-load-store:-m%(VALUE)}}" } \
/* A spec that infers the:
-mnan=2008 setting from a -mips argument,
@@ -1030,7 +1031,8 @@ struct mips_cpu_info {
/* ISA has floating-point indexed load and store instructions
(LWXC1, LDXC1, SWXC1 and SDXC1). */
-#define ISA_HAS_LXC1_SXC1 ISA_HAS_FP4
+#define ISA_HAS_LXC1_SXC1 (ISA_HAS_FP4 \
+ && mips_indexed_load_store)
/* ISA has paired-single instructions. */
#define ISA_HAS_PAIRED_SINGLE ((ISA_MIPS64 \
diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt
index 2559649..ae1e4cf 100644
--- a/gcc/config/mips/mips.opt
+++ b/gcc/config/mips/mips.opt
@@ -388,6 +388,10 @@ mlra
Target Report Var(mips_lra_flag) Init(1) Save
Use LRA instead of reload.
+mindexed-load-store
+Target Report Var(mips_indexed_load_store) Init(1)
+Use index memory Ops where applicable.
+
mtune=
Target RejectNegative Joined Var(mips_tune_option) ToLower Enum(mips_arch_opt_value)
-mtune=PROCESSOR Optimize the output for PROCESSOR.
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 4958773..ff91879 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1371,6 +1371,14 @@ On MIPS targets, make @option{-msynci} the default when no
On MIPS targets, make @option{-mno-synci} the default when no
@option{-msynci} option is passed. This is the default.
+@item --with-indexed-load-store
+On MIPS targets, make @option{-mindexed-load-store} the default when no
+@option{-mno-indexed-load-store} option is passed. This is the default.
+
+@item --without-indexed-load-store
+On MIPS targets, make @option{-mno-indexed-load-store} the default when no
+@option{-mindexed-load-store} option is passed.
+
@item --with-mips-plt
On MIPS targets, make use of copy relocations and PLTs.
These features are extensions to the traditional
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 2bd105a..75e860e 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -19856,6 +19856,12 @@ it is unused.
This optimization is off by default at all optimization levels.
+@item -mindexed-load-store
+@itemx -mno-indexed-load-store
+@opindex mindexed-load-store
+When applicable, enable (disable) the generation of indexed memory
+instructions. Enabled by default.
+
@end table
@node MMIX Options
--
1.9.1