re PR c/5304 (gcc-20011231 generates incorrect divmod code for chars)

PR c/5304:
	* expmed.c (expand_mult_highpart): Use immed_double_const for wide_op1
	unconditionally.

	* gcc.c-torture/execute/20020201-1.c: New test.

From-SVN: r49416
This commit is contained in:
Jakub Jelinek 2002-02-02 00:43:19 +01:00 committed by Jakub Jelinek
parent 02c5a3bd59
commit d3c5265862
4 changed files with 53 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2002-02-02 Jakub Jelinek <jakub@redhat.com>
PR c/5304:
* expmed.c (expand_mult_highpart): Use immed_double_const for wide_op1
unconditionally.
2002-02-01 Janis Johnson <janis187@us.ibm.com>
* cfganal.c: Include tm_p.h.

View File

@ -2760,9 +2760,6 @@ expand_mult_highpart (mode, op0, cnst1, target, unsignedp, max_cost)
op1 = GEN_INT (trunc_int_for_mode (cnst1, mode));
if (GET_MODE_BITSIZE (wider_mode) <= HOST_BITS_PER_INT)
wide_op1 = op1;
else
wide_op1
= immed_double_const (cnst1,
(unsignedp

View File

@ -1,3 +1,7 @@
2002-02-02 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/20020201-1.c: New test.
2002-02-01 Janis Johnson <janis187@us.ibm.com>
PR target/5469

View File

@ -0,0 +1,37 @@
/* Test whether division by constant works properly. */
extern void abort (void);
extern void exit (int);
unsigned char cx = 7;
unsigned short sx = 14;
unsigned int ix = 21;
unsigned long lx = 28;
unsigned long long Lx = 35;
int
main ()
{
unsigned char cy;
unsigned short sy;
unsigned int iy;
unsigned long ly;
unsigned long long Ly;
cy = cx / 6; if (cy != 1) abort ();
cy = cx % 6; if (cy != 1) abort ();
sy = sx / 6; if (sy != 2) abort ();
sy = sx % 6; if (sy != 2) abort ();
iy = ix / 6; if (iy != 3) abort ();
iy = ix % 6; if (iy != 3) abort ();
ly = lx / 6; if (ly != 4) abort ();
ly = lx % 6; if (ly != 4) abort ();
Ly = Lx / 6; if (Ly != 5) abort ();
Ly = Lx % 6; if (Ly != 5) abort ();
exit(0);
}