+2008-10-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline:
+ 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-09-28 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/36575
{
/* 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>
+
+ Backport from mainline:
+ 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-09-28 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/conv_decimal.adb: New test.
--- /dev/null
+/* { 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;
+}
--- /dev/null
+/* { 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;
+}