[gcc(refs/vendors/redhat/heads/gcc-8-branch)] aarch64: Fix another bug in aarch64_add_offset_1 [PR94121]
Jakub Jelinek
jakub@gcc.gnu.org
Thu Sep 17 17:20:12 GMT 2020
https://gcc.gnu.org/g:701d28c8f4d9694c683d617a1d2ba0985b7d92ac
commit 701d28c8f4d9694c683d617a1d2ba0985b7d92ac
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri Mar 13 11:33:16 2020 +0100
aarch64: Fix another bug in aarch64_add_offset_1 [PR94121]
> I'm getting this ICE with -mabi=ilp32:
>
> during RTL pass: fwprop1
> /opt/gcc/gcc-20200312/gcc/testsuite/gcc.dg/pr94121.c: In function 'bar':
> /opt/gcc/gcc-20200312/gcc/testsuite/gcc.dg/pr94121.c:16:1: internal compiler error: in decompose, at rtl.h:2279
That is a preexisting issue, caused by another bug in the same function.
When mode is SImode and moffset is 0x80000000 (or anything else with the
bit 31 set), we need to sign-extend it.
2020-03-13 Jakub Jelinek <jakub@redhat.com>
PR target/94121
* config/aarch64/aarch64.c (aarch64_add_offset_1): Use gen_int_mode
instead of GEN_INT.
(cherry picked from commit c2f836c413b1e9ae45598338b4a2ecd33bd926fb)
Diff:
---
gcc/config/aarch64/aarch64.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 7e16b6c59c3..e20a4ccc6dc 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -2585,7 +2585,8 @@ aarch64_add_offset_1 (scalar_int_mode mode, rtx dest,
if (emit_move_imm)
{
gcc_assert (temp1 != NULL_RTX || can_create_pseudo_p ());
- temp1 = aarch64_force_temporary (mode, temp1, GEN_INT (moffset));
+ temp1 = aarch64_force_temporary (mode, temp1,
+ gen_int_mode (moffset, mode));
}
insn = emit_insn (offset < 0
? gen_sub3_insn (dest, src, temp1)
More information about the Gcc-cvs
mailing list