summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorraksit <raksit@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-11 04:20:32 +0000
committerraksit <raksit@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-11 04:20:32 +0000
commit5bed1dca2160c7761b2274c33088cece233d5ac8 (patch)
treec20963f4cf9d25ceb53cacc6ed4dbca6306ab622 /gcc/combine.c
parent8fbaeb05fd21c2467b03a3c5ea96e8b6678f1f8e (diff)
downloadgcc-5bed1dca2160c7761b2274c33088cece233d5ac8.tar.gz
gcc/ChangeLog
PR rtl-optimization/27971 * combine.c (find_split_point): introduced a new split for certain types of mem rtx. gcc/testsuite/ChangeLog PR rtl-optimization/27971 * gcc.target/i386/pr27971.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131460 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index b3d064d3f11..43623a4fbc4 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -3967,6 +3967,15 @@ find_split_point (rtx *loc, rtx insn)
&& OBJECT_P (SUBREG_REG (XEXP (XEXP (x, 0), 0)))))
return &XEXP (XEXP (x, 0), 0);
}
+
+ /* If we have a PLUS whose first operand is complex, try computing it
+ separately by making a split there. */
+ if (GET_CODE (XEXP (x, 0)) == PLUS
+ && ! memory_address_p (GET_MODE (x), XEXP (x, 0))
+ && ! OBJECT_P (XEXP (XEXP (x, 0), 0))
+ && ! (GET_CODE (XEXP (XEXP (x, 0), 0)) == SUBREG
+ && OBJECT_P (SUBREG_REG (XEXP (XEXP (x, 0), 0)))))
+ return &XEXP (XEXP (x, 0), 0);
break;
case SET: