aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2019-09-07 04:38:58 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2019-09-07 04:38:58 +0000
commitd405dc23021fee4b6e1cd30650e0168b29918f61 (patch)
treef279cf44e5b7520e26216d1c2eb4343648f37b26
parent739748850246fb630bb76412bf288b5365d7b58c (diff)
downloadgcc-d405dc23021fee4b6e1cd30650e0168b29918f61.zip
gcc-d405dc23021fee4b6e1cd30650e0168b29918f61.tar.gz
gcc-d405dc23021fee4b6e1cd30650e0168b29918f61.tar.bz2
arm.c (arm_block_set_aligned_non_vect): Use gen_unaligned_storedi for 4-byte aligned addresses.
2019-09-07 Bernd Edlinger <bernd.edlinger@hotmail.de> * config/arm/arm.c (arm_block_set_aligned_non_vect): Use gen_unaligned_storedi for 4-byte aligned addresses. testsuite: 2019-09-07 Bernd Edlinger <bernd.edlinger@hotmail.de> * gcc.target/arm/pr91684.c: New test. From-SVN: r275483
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/arm.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/pr91684.c15
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 46c1b50..c6925e2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-09-07 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * config/arm/arm.c (arm_block_set_aligned_non_vect): Use
+ gen_unaligned_storedi for 4-byte aligned addresses.
+
2019-09-06 Jim Wilson <jimw@sifive.com>
* config/riscv/riscv.c (riscv_option_override): Revert 2019-08-30
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index eb8bf13..8576431 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -30352,7 +30352,10 @@ arm_block_set_aligned_non_vect (rtx dstbase,
{
addr = plus_constant (Pmode, dst, i);
mem = adjust_automodify_address (dstbase, DImode, addr, i);
- emit_move_insn (mem, reg);
+ if (MEM_ALIGN (mem) >= 2 * BITS_PER_WORD)
+ emit_move_insn (mem, reg);
+ else
+ emit_insn (gen_unaligned_storedi (mem, reg));
}
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c910555..c2e23be 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-09-07 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * gcc.target/arm/pr91684.c: New test.
+
2019-09-06 Ian Lance Taylor <iant@golang.org>
* go.test/test/fixedbugs/bug369.go: Update to match libgo update
diff --git a/gcc/testsuite/gcc.target/arm/pr91684.c b/gcc/testsuite/gcc.target/arm/pr91684.c
new file mode 100644
index 0000000..619c30f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr91684.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_ldrd_strd_ok } */
+/* { dg-options "-O3" } */
+
+typedef struct { int a, b, c; } S;
+
+void g (S *s);
+void bug1 (void)
+{
+ S s;
+ __builtin_memset (&s, 0, sizeof (S));
+ g (&s);
+}
+
+/* { dg-final { scan-assembler-times "strd" 1 } } */