re PR rtl-optimization/53160 (likely wrong code bug)
PR rtl-optimization/53160 * ree.c (combine_reaching_defs): Handle the case where cand->insn has been modified by ree pass already. * gcc.c-torture/execute/pr53160.c: New test. From-SVN: r187035
This commit is contained in:
parent
481c45f690
commit
6aae324cce
|
@ -1,3 +1,9 @@
|
||||||
|
2012-05-02 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/53160
|
||||||
|
* ree.c (combine_reaching_defs): Handle the case where cand->insn
|
||||||
|
has been modified by ree pass already.
|
||||||
|
|
||||||
2012-05-01 Ian Lance Taylor <iant@google.com>
|
2012-05-01 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
PR c/37303
|
PR c/37303
|
||||||
|
|
18
gcc/ree.c
18
gcc/ree.c
|
@ -667,6 +667,24 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state)
|
||||||
if (!outcome)
|
if (!outcome)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* If cand->insn has been already modified, update cand->mode to a wider
|
||||||
|
mode if possible, or punt. */
|
||||||
|
if (state->modified[INSN_UID (cand->insn)].kind != EXT_MODIFIED_NONE)
|
||||||
|
{
|
||||||
|
enum machine_mode mode;
|
||||||
|
rtx set;
|
||||||
|
|
||||||
|
if (state->modified[INSN_UID (cand->insn)].kind
|
||||||
|
!= (cand->code == ZERO_EXTEND
|
||||||
|
? EXT_MODIFIED_ZEXT : EXT_MODIFIED_SEXT)
|
||||||
|
|| state->modified[INSN_UID (cand->insn)].mode != cand->mode
|
||||||
|
|| (set = single_set (cand->insn)) == NULL_RTX)
|
||||||
|
return false;
|
||||||
|
mode = GET_MODE (SET_DEST (set));
|
||||||
|
gcc_assert (GET_MODE_SIZE (mode) >= GET_MODE_SIZE (cand->mode));
|
||||||
|
cand->mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
merge_successful = true;
|
merge_successful = true;
|
||||||
|
|
||||||
/* Go through the defs vector and try to merge all the definitions
|
/* Go through the defs vector and try to merge all the definitions
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-05-02 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/53160
|
||||||
|
* gcc.c-torture/execute/pr53160.c: New test.
|
||||||
|
|
||||||
2012-05-01 Ian Lance Taylor <iant@google.com>
|
2012-05-01 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
PR c/37303
|
PR c/37303
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* PR rtl-optimization/53160 */
|
||||||
|
|
||||||
|
extern void abort (void);
|
||||||
|
|
||||||
|
int a, c = 1, d, e, g;
|
||||||
|
volatile int b;
|
||||||
|
volatile char f;
|
||||||
|
long h;
|
||||||
|
short i;
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (void)
|
||||||
|
{
|
||||||
|
for (e = 0; e; ++e)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if (g)
|
||||||
|
(void) b;
|
||||||
|
foo ();
|
||||||
|
for (d = 0; d >= 0; d--)
|
||||||
|
{
|
||||||
|
short j = f;
|
||||||
|
int k = 0;
|
||||||
|
i = j ? j : j << k;
|
||||||
|
}
|
||||||
|
h = c == 0 ? 0 : i;
|
||||||
|
a = h;
|
||||||
|
if (a != 0)
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue