aboutsummaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-05-29 17:37:23 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-05-29 17:37:23 +0000
commitcc8849a1597bb12c16a990bfed6a3b685952d493 (patch)
tree5655e5962c0abad946b13ad9235bc659e50a60b5 /gcc/lra-constraints.c
parente4c03722c501d01f0ba75e72318377e5a85b06ce (diff)
downloadgcc-cc8849a1597bb12c16a990bfed6a3b685952d493.zip
gcc-cc8849a1597bb12c16a990bfed6a3b685952d493.tar.gz
gcc-cc8849a1597bb12c16a990bfed6a3b685952d493.tar.bz2
re PR rtl-optimization/61325 (aarch64_be build fails)
2014-05-29 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/61325 * lra-constraints.c (process_address): Rename to process_address_1. (process_address): New function. 2014-05-29 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/61325 * gcc.target/aarch64/pr61325.c: New. From-SVN: r211061
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r--gcc/lra-constraints.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 2df841a..69ffdcd 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -2784,9 +2784,14 @@ equiv_address_substitution (struct address_info *ad)
Add reloads to the lists *BEFORE and *AFTER. We might need to add
reloads to *AFTER because of inc/dec, {pre, post} modify in the
- address. Return true for any RTL change. */
+ address. Return true for any RTL change.
+
+ The function is a helper function which does not produce all
+ transformations which can be necessary. It does just basic steps.
+ To do all necessary transformations use function
+ process_address. */
static bool
-process_address (int nop, rtx *before, rtx *after)
+process_address_1 (int nop, rtx *before, rtx *after)
{
struct address_info ad;
rtx new_reg;
@@ -2986,6 +2991,18 @@ process_address (int nop, rtx *before, rtx *after)
return true;
}
+/* Do address reloads until it is necessary. Use process_address_1 as
+ a helper function. Return true for any RTL changes. */
+static bool
+process_address (int nop, rtx *before, rtx *after)
+{
+ bool res = false;
+
+ while (process_address_1 (nop, before, after))
+ res = true;
+ return res;
+}
+
/* Emit insns to reload VALUE into a new register. VALUE is an
auto-increment or auto-decrement RTX whose operand is a register or
memory location; so reloading involves incrementing that location.
@@ -3270,7 +3287,7 @@ curr_insn_transform (void)
change_p = true;
lra_update_dup (curr_id, i);
}
-
+
if (change_p)
/* If we've changed the instruction then any alternative that
we chose previously may no longer be valid. */