re PR rtl-optimization/42691 (problematic REG_EQUAL note added to SUBREG)
2010-01-15 Jing Yu <jingyu@google.com> PR rtl-optimization/42691 * combine.c (try_combine): Set changed_i3_dest to 1 when I2 and I3 set a pseudo to a constant and are merged, and adjust comments. 2010-01-15 Jing Yu <jingyu@google.com> PR rtl-optimization/42691 * gcc.c-torture/execute/pr42691.c: New. From-SVN: r155944
This commit is contained in:
parent
a1b5171bd8
commit
1018d41ac2
@ -1,3 +1,9 @@
|
||||
2010-01-15 Jing Yu <jingyu@google.com>
|
||||
|
||||
PR rtl-optimization/42691
|
||||
* combine.c (try_combine): Set changed_i3_dest to 1 when I2 and I3 set
|
||||
a pseudo to a constant and are merged, and adjust comments.
|
||||
|
||||
2010-01-15 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/i386/sse.md (avx_vperm2f128<mode>3): Fix typo.
|
||||
|
@ -2663,10 +2663,16 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
|
||||
i2dest = SET_DEST (temp);
|
||||
i2dest_killed = dead_or_set_p (i2, i2dest);
|
||||
|
||||
/* Replace the source in I2 with the new constant and make the
|
||||
resulting insn the new pattern for I3. Then skip to where we
|
||||
validate the pattern. Everything was set up above. */
|
||||
SUBST (SET_SRC (temp),
|
||||
immed_double_const (olo, ohi, GET_MODE (SET_DEST (temp))));
|
||||
|
||||
newpat = PATTERN (i2);
|
||||
|
||||
/* The dest of I3 has been replaced with the dest of I2. */
|
||||
changed_i3_dest = 1;
|
||||
goto validate_replacement;
|
||||
}
|
||||
}
|
||||
@ -3038,8 +3044,6 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
|
||||
}
|
||||
}
|
||||
|
||||
/* We come here when we are replacing a destination in I2 with the
|
||||
destination of I3. */
|
||||
validate_replacement:
|
||||
|
||||
/* Note which hard regs this insn has as inputs. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-01-15 Jing Yu <jingyu@google.com>
|
||||
|
||||
PR rtl-optimization/42691
|
||||
* gcc.c-torture/execute/pr42691.c: New.
|
||||
|
||||
2010-01-15 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/42739
|
||||
|
40
gcc/testsuite/gcc.c-torture/execute/pr42691.c
Normal file
40
gcc/testsuite/gcc.c-torture/execute/pr42691.c
Normal file
@ -0,0 +1,40 @@
|
||||
extern void abort (void);
|
||||
|
||||
union _D_rep
|
||||
{
|
||||
unsigned short rep[4];
|
||||
double val;
|
||||
};
|
||||
|
||||
int add(double* key, double* table)
|
||||
{
|
||||
unsigned i = 0;
|
||||
double* deletedEntry = 0;
|
||||
while (1) {
|
||||
double* entry = table + i;
|
||||
|
||||
if (*entry == *key)
|
||||
break;
|
||||
|
||||
union _D_rep _D_inf = {{ 0, 0, 0, 0x7ff0 }};
|
||||
if (*entry != _D_inf.val)
|
||||
abort ();
|
||||
|
||||
union _D_rep _D_inf2 = {{ 0, 0, 0, 0x7ff0 }};
|
||||
if (!_D_inf2.val)
|
||||
deletedEntry = entry;
|
||||
|
||||
i++;
|
||||
}
|
||||
*deletedEntry = 0.0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
union _D_rep infinit = {{ 0, 0, 0, 0x7ff0 }};
|
||||
double table[2] = { infinit.val, 23 };
|
||||
double key = 23;
|
||||
int ret = add (&key, table);
|
||||
return ret;
|
||||
}
|
Loading…
Reference in New Issue
Block a user