aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2012-10-29 17:41:41 +0100
committerUros Bizjak <uros@gcc.gnu.org>2012-10-29 17:41:41 +0100
commite34e52073e7bd69a060412afa6d9b2e5a894b976 (patch)
treef9c9487ea965de0f15ffd5c06edd826ac2aea1b0 /gcc
parent163497f1a3f8225a05f9f3d6c7922e1e23c95fdf (diff)
downloadgcc-e34e52073e7bd69a060412afa6d9b2e5a894b976.zip
gcc-e34e52073e7bd69a060412afa6d9b2e5a894b976.tar.gz
gcc-e34e52073e7bd69a060412afa6d9b2e5a894b976.tar.bz2
i386.c (ix86_decompose_address): Use simplify_gen_subreg for all addresses, zero-extended with AND.
* config/i386/i386.c (ix86_decompose_address): Use simplify_gen_subreg for all addresses, zero-extended with AND. From-SVN: r192950
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.c20
2 files changed, 9 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cf534c6..b0a8354 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-29 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_decompose_address): Use simplify_gen_subreg
+ for all addresses, zero-extended with AND.
+
2012-10-29 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/55116
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 2931e62..e0994e7 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -11810,23 +11810,11 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
else if (GET_CODE (addr) == AND
&& const_32bit_mask (XEXP (addr, 1), DImode))
{
- addr = XEXP (addr, 0);
+ addr = simplify_gen_subreg (SImode, XEXP (addr, 0), DImode, 0);
+ if (addr == NULL_RTX)
+ return 0;
- /* Adjust SUBREGs. */
- if (GET_CODE (addr) == SUBREG
- && GET_MODE (SUBREG_REG (addr)) == SImode)
- {
- addr = SUBREG_REG (addr);
- if (CONST_INT_P (addr))
- return 0;
- }
- else if (GET_MODE (addr) == DImode)
- {
- addr = simplify_gen_subreg (SImode, addr, DImode, 0);
- if (addr == NULL_RTX)
- return 0;
- }
- else if (GET_MODE (addr) != VOIDmode)
+ if (CONST_INT_P (addr))
return 0;
}
}