loop.c (basic_induction_var): Don't call convert_modes if mode classes are different.
* loop.c (basic_induction_var): Don't call convert_modes if mode classes are different. * gcc.c-torture/compile/20020309-2.c: New test. From-SVN: r50720
This commit is contained in:
parent
bb3e839802
commit
1622c07909
|
@ -1,3 +1,8 @@
|
|||
2002-03-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* loop.c (basic_induction_var): Don't call convert_modes if mode
|
||||
classes are different.
|
||||
|
||||
2002-03-12 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR optimization/5901
|
||||
|
|
|
@ -6214,10 +6214,11 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location)
|
|||
case CONST:
|
||||
/* convert_modes aborts if we try to convert to or from CCmode, so just
|
||||
exclude that case. It is very unlikely that a condition code value
|
||||
would be a useful iterator anyways. */
|
||||
would be a useful iterator anyways. convert_modes aborts if we try to
|
||||
convert a float mode to non-float or vice versa too. */
|
||||
if (loop->level == 1
|
||||
&& GET_MODE_CLASS (mode) != MODE_CC
|
||||
&& GET_MODE_CLASS (GET_MODE (dest_reg)) != MODE_CC)
|
||||
&& GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (dest_reg))
|
||||
&& GET_MODE_CLASS (mode) != MODE_CC)
|
||||
{
|
||||
/* Possible bug here? Perhaps we don't know the mode of X. */
|
||||
*inc_val = convert_modes (GET_MODE (dest_reg), mode, x, 0);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2002-03-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/20020309-2.c: New test.
|
||||
|
||||
2002-03-12 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* g++.dg/other/access1.C: New test.
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* This testcase ICEd on IA-32 at -O2, because loop was calling convert_modes
|
||||
between a MODE_FLOAT and MODE_INT class modes. */
|
||||
|
||||
typedef union
|
||||
{
|
||||
double d;
|
||||
long long ll;
|
||||
} A;
|
||||
|
||||
void
|
||||
foo (A x, A **y, A z)
|
||||
{
|
||||
for (; *y; y++)
|
||||
if (x.ll == 262 && (*y)->d == z.d)
|
||||
break;
|
||||
}
|
Loading…
Reference in New Issue