This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/19609] [4.0 Regression] real and imaginary part interchanged when flags_complex_divide_method=1
- From: "pcarlini at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 25 Jan 2005 10:49:51 -0000
- Subject: [Bug middle-end/19609] [4.0 Regression] real and imaginary part interchanged when flags_complex_divide_method=1
- References: <20050124195729.19609.Thomas.Koenig@online.de>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From pcarlini at suse dot de 2005-01-25 10:49 -------
Hi, everything looks fine here (20050124 on x86-linux), double checked the
formulas, bootstrapped c, c++, tested a few other divisions besides the
testcase (now ok), and cannot reproduce the last dump of Thomas. The below
is mine, seems ok (e.g., the goto at the end of block L0 is present):
;; Function main (main)
main ()
{
float D.2643;
float D.2642;
float D.2641;
float D.2640;
float D.2639;
float D.2638;
float D.2637;
float D.2636;
float D.2635;
float D.2634;
float D.2633;
float D.2632;
float D.2631;
float D.2630;
float D.2629;
float D.2628;
float D.2627;
float D.2626;
float D.2625;
float D.2624;
float D.2621;
float D.2620;
float D.2619;
float D.2618;
float D.2617;
float D.2616;
complex float c;
complex float b;
complex float a;
complex float D.2611;
<bb 0>:
D.2616 = REALPART_EXPR <a>;
D.2617 = IMAGPART_EXPR <a>;
D.2618 = REALPART_EXPR <b>;
D.2619 = IMAGPART_EXPR <b>;
D.2620 = ABS_EXPR <D.2618>;
D.2621 = ABS_EXPR <D.2619>;
if (D.2620 < D.2621) goto <L0>; else goto <L1>;
<L0>:;
D.2626 = D.2618 / D.2619;
D.2627 = D.2618 * D.2626;
D.2628 = D.2627 + D.2619;
D.2629 = D.2616 * D.2626;
D.2630 = D.2629 + D.2617;
D.2631 = D.2617 * D.2626;
D.2632 = D.2631 - D.2616;
D.2633 = D.2630 / D.2628;
D.2634 = D.2632 / D.2628;
D.2624 = D.2633;
D.2625 = D.2634;
goto <bb 1>;
<L1>:;
D.2635 = D.2619 / D.2618;
D.2636 = D.2619 * D.2635;
D.2637 = D.2636 + D.2618;
D.2638 = D.2617 * D.2635;
D.2639 = D.2638 + D.2616;
D.2640 = D.2616 * D.2635;
D.2641 = D.2617 - D.2640;
D.2642 = D.2639 / D.2637;
D.2643 = D.2641 / D.2637;
D.2624 = D.2642;
D.2625 = D.2643;
<bb 1>:
D.2611 = COMPLEX_EXPR <D.2624, D.2625>;
c = D.2611;
return;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19609