simplify-rtx.c (simplify_binary_operation): If gen_lowpart_common fails, use gen_lowpart_SUBREG.
* simplify-rtx.c (simplify_binary_operation) [DIV]: If gen_lowpart_common fails, use gen_lowpart_SUBREG. * gcc.c-torture/compile/20020103-1.c: New test. From-SVN: r48514
This commit is contained in:
parent
61d951df7b
commit
cb1ac742b7
@ -1,4 +1,10 @@
|
|||||||
|
2002-01-03 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* simplify-rtx.c (simplify_binary_operation) [DIV]: If
|
||||||
|
gen_lowpart_common fails, use gen_lowpart_SUBREG.
|
||||||
|
|
||||||
2002-01-03 Turly O'Connor <turly@apple.com>
|
2002-01-03 Turly O'Connor <turly@apple.com>
|
||||||
|
|
||||||
* darwin.c (machopic_output_possible_stub_label): Don't generate
|
* darwin.c (machopic_output_possible_stub_label): Don't generate
|
||||||
stub routines for pseudo-stubs which we've just defined.
|
stub routines for pseudo-stubs which we've just defined.
|
||||||
|
|
||||||
|
@ -1413,8 +1413,15 @@ simplify_binary_operation (code, mode, op0, op1)
|
|||||||
case DIV:
|
case DIV:
|
||||||
if (trueop1 == CONST1_RTX (mode))
|
if (trueop1 == CONST1_RTX (mode))
|
||||||
{
|
{
|
||||||
|
/* On some platforms DIV uses narrower mode than its
|
||||||
|
operands. */
|
||||||
rtx x = gen_lowpart_common (mode, op0);
|
rtx x = gen_lowpart_common (mode, op0);
|
||||||
return x ? x : op0;
|
if (x)
|
||||||
|
return x;
|
||||||
|
else if (mode != GET_MODE (op0) && GET_MODE (op0) != VOIDmode)
|
||||||
|
return gen_lowpart_SUBREG (mode, op0);
|
||||||
|
else
|
||||||
|
return op0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In IEEE floating point, 0/x is not always 0. */
|
/* In IEEE floating point, 0/x is not always 0. */
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
* g++.dg/other/debug2.C: New test.
|
* g++.dg/other/debug2.C: New test.
|
||||||
|
|
||||||
|
* gcc.c-torture/compile/20020103-1.c: New test.
|
||||||
|
|
||||||
2002-01-02 Jakub Jelinek <jakub@redhat.com>
|
2002-01-02 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* gcc.dg/gnu89-init-1.c: Added new tests.
|
* gcc.dg/gnu89-init-1.c: Added new tests.
|
||||||
|
22
gcc/testsuite/gcc.c-torture/compile/20020103-1.c
Normal file
22
gcc/testsuite/gcc.c-torture/compile/20020103-1.c
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/* This testcase failed on Alpha at -O2 when simplifying conditional
|
||||||
|
expressions. */
|
||||||
|
|
||||||
|
int foo (void);
|
||||||
|
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
int a, b, c, d;
|
||||||
|
};
|
||||||
|
|
||||||
|
void bar (struct A *x)
|
||||||
|
{
|
||||||
|
int e, f;
|
||||||
|
|
||||||
|
e = foo ();
|
||||||
|
e = e / x->b;
|
||||||
|
if (e < 1)
|
||||||
|
e = 1;
|
||||||
|
f = (x->a + x->c) / e;
|
||||||
|
if (f < x->d)
|
||||||
|
x->d -= (1 << 16) / 8;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user