aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2024-08-12 14:39:24 +0200
committerGeorg-Johann Lay <avr@gjlay.de>2024-08-12 14:52:19 +0200
commit68da681e614c2750f648dac2cd0b2595999ca5d9 (patch)
treeec9294de558b62b1006823e249c43a6a3daae1d9 /gcc
parent24df2ab33c5e805054006e7b4b94d4270d82074f (diff)
downloadgcc-68da681e614c2750f648dac2cd0b2595999ca5d9.zip
gcc-68da681e614c2750f648dac2cd0b2595999ca5d9.tar.gz
gcc-68da681e614c2750f648dac2cd0b2595999ca5d9.tar.bz2
AVR: target/85624 - Fix non-matching alignment in clrmem* insns.
The clrmem* patterns don't use the provided alignment information, hence the setmemhi expander can just pass down 0 as alignment to the clrmem* insns. PR target/85624 gcc/ * config/avr/avr.md (setmemhi): Set alignment to 0. gcc/testsuite/ * gcc.target/avr/torture/pr85624.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/avr/avr.md2
-rw-r--r--gcc/testsuite/gcc.target/avr/torture/pr85624.c7
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index 84dfe4c..359343e 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -1355,6 +1355,8 @@
gen_int_mode (INTVAL (operands[1]), mode));
rtx addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
operands[0] = gen_rtx_MEM (BLKmode, addr0);
+ // Alignment is unused; just set it to 0.
+ operands[3] = const0_rtx;
})
diff --git a/gcc/testsuite/gcc.target/avr/torture/pr85624.c b/gcc/testsuite/gcc.target/avr/torture/pr85624.c
new file mode 100644
index 0000000..b183d45
--- /dev/null
+++ b/gcc/testsuite/gcc.target/avr/torture/pr85624.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+int foo (void)
+{
+ volatile int arr[3] __attribute__((aligned(128))) = { 0 };
+ return arr[2];
+}