aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@gcc.gnu.org>2019-04-17 20:49:50 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2019-04-17 20:49:50 +0200
commit46786144dd77505a5e06c8ac9fd353e84eb38d89 (patch)
treea9135598ac7b19904ab741739d69e18de52a9832
parentf64e89775fc23fc57b1631f0c0e80a96150e3cd8 (diff)
downloadgcc-46786144dd77505a5e06c8ac9fd353e84eb38d89.zip
gcc-46786144dd77505a5e06c8ac9fd353e84eb38d89.tar.gz
gcc-46786144dd77505a5e06c8ac9fd353e84eb38d89.tar.bz2
auto-inc-dec: Set alignment properly
When auto-inc-dec creates a new mem to compute the cost of doing some transform, it forgets to copy over the alignment of the original mem. This gives wrong costs, for example, for rs6000 a floating point load or store is hugely expensive if unaligned. This patch fixes it. * auto-inc-dec.c (attempt_change): Set the alignment of the temporary memory to that of the original. From-SVN: r270419
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/auto-inc-dec.c2
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d184621..2138006 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
-2019-04-10 Joao Moreira <jmoreira@suse.de>
+2019-04-17 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * auto-inc-dec.c (attempt_change): Set the alignment of the
+ temporary memory to that of the original.
+
+2019-04-17 Joao Moreira <jmoreira@suse.de>
* targhooks.c (default_print_patchable_function_entry): Emit
__patchable_function_entries section with writable flags to allow
@@ -6,7 +11,7 @@
2019-04-17 Jonny Grant <jg@jguk.org>
- * collect2.c (main): Change gcc.gnu.org URL to HTTPS.
+ * collect2.c (main): Change gcc.gnu.org URL to HTTPS.
2019-04-17 Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/auto-inc-dec.c b/gcc/auto-inc-dec.c
index 43400cc..bdb6efa 100644
--- a/gcc/auto-inc-dec.c
+++ b/gcc/auto-inc-dec.c
@@ -471,6 +471,7 @@ attempt_change (rtx new_addr, rtx inc_reg)
int regno;
rtx mem = *mem_insn.mem_loc;
machine_mode mode = GET_MODE (mem);
+ int align = MEM_ALIGN (mem);
rtx new_mem;
int old_cost = 0;
int new_cost = 0;
@@ -478,6 +479,7 @@ attempt_change (rtx new_addr, rtx inc_reg)
PUT_MODE (mem_tmp, mode);
XEXP (mem_tmp, 0) = new_addr;
+ set_mem_align (mem_tmp, align);
old_cost = (set_src_cost (mem, mode, speed)
+ set_rtx_cost (PATTERN (inc_insn.insn), speed));