aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2011-03-18 00:29:15 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2011-03-17 17:29:15 -0700
commit76069764344e8637046fa002ad98108a24b00271 (patch)
treea1dc8c870afbaf05bcc3f2a156688bb3e52cf9c0 /gcc/combine.c
parent98aa09c6b1a226b0e12ab735d2a62cf29e915247 (diff)
downloadgcc-76069764344e8637046fa002ad98108a24b00271.zip
gcc-76069764344e8637046fa002ad98108a24b00271.tar.gz
gcc-76069764344e8637046fa002ad98108a24b00271.tar.bz2
Check zero/sign extended hard registers.
gcc/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * combine.c (cant_combine_insn_p): Check zero/sign extended hard registers. gcc/testsuite/ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com> PR middle-end/47725 * gcc.dg/torture/pr47725.c: New. From-SVN: r171124
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index f9d33b3..67aecf1 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2137,6 +2137,12 @@ cant_combine_insn_p (rtx insn)
return 0;
src = SET_SRC (set);
dest = SET_DEST (set);
+ if (GET_CODE (src) == ZERO_EXTEND
+ || GET_CODE (src) == SIGN_EXTEND)
+ src = XEXP (src, 0);
+ if (GET_CODE (dest) == ZERO_EXTEND
+ || GET_CODE (dest) == SIGN_EXTEND)
+ dest = XEXP (dest, 0);
if (GET_CODE (src) == SUBREG)
src = SUBREG_REG (src);
if (GET_CODE (dest) == SUBREG)