diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2011-02-15 16:50:43 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2011-02-15 08:50:43 -0800 |
commit | 8a73faf108721a76f55441f6d2a3937fff901b36 (patch) | |
tree | 1172a9db448674616652cebc12b2634a4132c073 | |
parent | 48feba283c479e010fb6e719b8cf25ac80b1c3e0 (diff) | |
download | gcc-8a73faf108721a76f55441f6d2a3937fff901b36.zip gcc-8a73faf108721a76f55441f6d2a3937fff901b36.tar.gz gcc-8a73faf108721a76f55441f6d2a3937fff901b36.tar.bz2 |
Check zero/sign extended hard registers.
gcc/
2011-02-15 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-02-15 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/47725
* gcc.dg/torture/pr47725.c: New.
From-SVN: r170179
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/combine.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr47725.c | 16 |
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c360d46..8f4f569d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-02-15 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/47725 + * combine.c (cant_combine_insn_p): Check zero/sign extended + hard registers. + 2011-02-15 Richard Guenther <rguenther@suse.de> PR tree-optimization/47743 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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e60f6db..f9cb378 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-02-15 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/47725 + * gcc.dg/torture/pr47725.c: New. + 2011-02-15 Richard Guenther <rguenther@suse.de> PR tree-optimization/47743 diff --git a/gcc/testsuite/gcc.dg/torture/pr47725.c b/gcc/testsuite/gcc.dg/torture/pr47725.c new file mode 100644 index 0000000..03d5d36 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr47725.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +struct _Unwind_Context +{ + void *reg[17]; + void *ra; +}; +extern void bar (struct _Unwind_Context *); +void +__frame_state_for (void *pc_target) +{ + struct _Unwind_Context context; + __builtin_memset (&context, 0, sizeof (struct _Unwind_Context)); + context.ra = pc_target; + bar (&context); +} |