aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-10-01 19:14:09 +0930
committerAlan Modra <amodra@gmail.com>2020-10-02 08:36:25 +0930
commit4c69e61f4307865b95151006e480ae2022b30454 (patch)
treeefcf3a1081fe6d6ad8d3080f989a7148e8e04dad /gcc
parentd26cc5885a491dedad0bdf3468a7b91c1f75a868 (diff)
downloadgcc-4c69e61f4307865b95151006e480ae2022b30454.zip
gcc-4c69e61f4307865b95151006e480ae2022b30454.tar.gz
gcc-4c69e61f4307865b95151006e480ae2022b30454.tar.bz2
[RS6000] ICE in decompose, at rtl.h:2282
during RTL pass: fwprop1 gcc.dg/pr82596.c: In function 'test_cststring': gcc.dg/pr82596.c:27:1: internal compiler error: in decompose, at rtl.h:2282 -m32 gcc/testsuite/gcc.dg/pr82596.c fails along with other tests after applying rtx_cost patches, which exposed a backend bug. legitimize_address when presented with the following address (plus (reg) (const_int 0x7ffffffff)) attempts to rewrite it as a high/low sum. The low part is 0xffff, or -1, making the high part 0x80000000. But this is no longer canonical for SImode. * config/rs6000/rs6000.c (rs6000_legitimize_address): Use gen_int_mode for high part of address constant.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 1b5b8e2..69c4f36 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -8455,7 +8455,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
low_int = 0;
high_int = INTVAL (XEXP (x, 1)) - low_int;
sum = force_operand (gen_rtx_PLUS (Pmode, XEXP (x, 0),
- GEN_INT (high_int)), 0);
+ gen_int_mode (high_int, Pmode)), 0);
return plus_constant (Pmode, sum, low_int);
}
else if (GET_CODE (x) == PLUS