summaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2019-02-06 21:48:45 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2019-02-06 21:48:45 +0000
commitf8dc3fb2023b627e0c45ce0ed255aa77e367ca73 (patch)
treed324efb4c403f7bfa863e2d57ba2fc0507eb5b19 /gcc/lra-constraints.c
parenta4f73f96f182d9aff6ec63c3926a773a2a2c4075 (diff)
re PR rtl-optimization/89225 (LRA hang on ppc64le compiling glibc starting with r268404)
2019-02-06 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/89225 * lra-constaints.c (simplify_operand_subreg): Add subreg mode sizes check. 2019-02-06 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/89225 * gcc.target/powerpc/pr89225.c: New. From-SVN: r268597
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index d581513f33f..3b975cc2c9a 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -1533,9 +1533,12 @@ simplify_operand_subreg (int nop, machine_mode reg_mode)
a word.
If valid memory becomes invalid after subreg elimination
- we still have to reload memory.
+ and address might be different we still have to reload
+ memory.
*/
- if ((! addr_was_valid || addr_is_valid)
+ if ((! addr_was_valid
+ || addr_is_valid
+ || known_eq (GET_MODE_SIZE (mode), GET_MODE_SIZE (innermode)))
&& !(maybe_ne (GET_MODE_PRECISION (mode),
GET_MODE_PRECISION (innermode))
&& known_le (GET_MODE_SIZE (mode), UNITS_PER_WORD)