Commit aee857a2 by H.J. Lu Committed by H.J. Lu

re PR middle-end/37731 (long long may not work correctly on 32bit host)

gcc/

2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/37731
	* expmed.c (expand_mult): Properly check DImode constant in
	CONST_DOUBLE.

gcc/testsuite/

2008-10-07  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/37731
	* gcc.dg/torture/pr37731-1.c: New.
	* gcc.dg/torture/pr37731-2.c: Likewise.

From-SVN: r140947
parent c7c79a09
2008-10-07 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/37731
* expmed.c (expand_mult): Properly check DImode constant in
CONST_DOUBLE.
2008-10-07 Jakub Jelinek <jakub@redhat.com>
PR debug/37738
......
......@@ -3075,7 +3075,8 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
{
/* If we are multiplying in DImode, it may still be a win
to try to work with shifts and adds. */
if (CONST_DOUBLE_HIGH (op1) == 0)
if (CONST_DOUBLE_HIGH (op1) == 0
&& CONST_DOUBLE_LOW (op1) > 0)
coeff = CONST_DOUBLE_LOW (op1);
else if (CONST_DOUBLE_LOW (op1) == 0
&& EXACT_POWER_OF_2_OR_ZERO_P (CONST_DOUBLE_HIGH (op1)))
......
2008-10-07 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/37731
* gcc.dg/torture/pr37731-1.c: New.
* gcc.dg/torture/pr37731-2.c: Likewise.
2008-10-07 Jakub Jelinek <jakub@redhat.com>
PR debug/37738
......
/* { dg-do run } */
extern void abort ();
unsigned long long xh = 1;
int
main ()
{
unsigned long long yh = 0xffffffffull;
unsigned long long z = xh * yh;
if (z != yh)
abort ();
return 0;
}
/* { dg-do run } */
extern void abort ();
long long xh = 1;
int
main ()
{
long long yh = 0xffffffffll;
long long z = xh * yh;
if (z != yh)
abort ();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment