* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
@ 2010-09-18 18:10 ` danglin at gcc dot gnu dot org
2010-09-18 18:25 ` rguenth at gcc dot gnu dot org
` (4 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: danglin at gcc dot gnu dot org @ 2010-09-18 18:10 UTC (permalink / raw)
To: gcc-bugs
--
danglin at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
Component|testsuite |tree-optimization
Last reconfirmed|2010-05-02 15:26:05 |2010-09-18 18:10:02
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
2010-09-18 18:10 ` [Bug tree-optimization/43959] [4.6 Regression] " danglin at gcc dot gnu dot org
@ 2010-09-18 18:25 ` rguenth at gcc dot gnu dot org
2010-09-18 18:59 ` dave at hiauly1 dot hia dot nrc dot ca
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2010-09-18 18:25 UTC (permalink / raw)
To: gcc-bugs
------- Comment #14 from rguenth at gcc dot gnu dot org 2010-09-18 18:25 -------
You have way more non-SSA variables - possibly due to callee-copy of args
(again).
I suppose some optimizations end up being disabled for some reason by that,
but likely nobody will be interested to fixup missed optimizations for
this target :/
So - if you are interested (heh ...) I'd start comparing dumps to i?86 dumps
and see where they start to diverge badly. Also try and see why you end up
with
complex double cd.1;
complex long double cld.0;
not in SSA form:
REALPART_EXPR <cld.0> = cld$real_19;
IMAGPART_EXPR <cld.0> = cld$imag_20;
REALPART_EXPR <cd.1> = cd$real_10;
IMAGPART_EXPR <cd.1> = cd$imag_11;
REALPART_EXPR <cd.1> = Inf;
on i?86 I never even start having partial definitions of these on the lhs ...
(but I also do not have the callee-copy, so you might check if SRA makes
those partial defs from them by trying with -fno-tree-sra).
If you're not interested I suggest to XFAIL the testcase for the failing
platforms.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rguenth at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
2010-09-18 18:10 ` [Bug tree-optimization/43959] [4.6 Regression] " danglin at gcc dot gnu dot org
2010-09-18 18:25 ` rguenth at gcc dot gnu dot org
@ 2010-09-18 18:59 ` dave at hiauly1 dot hia dot nrc dot ca
2010-09-18 22:14 ` dave at hiauly1 dot hia dot nrc dot ca
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: dave at hiauly1 dot hia dot nrc dot ca @ 2010-09-18 18:59 UTC (permalink / raw)
To: gcc-bugs
------- Comment #15 from dave at hiauly1 dot hia dot nrc dot ca 2010-09-18 18:59 -------
Subject: Re: [4.6 Regression] FAIL:
gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
On Sat, 18 Sep 2010, rguenth at gcc dot gnu dot org wrote:
>
>
> ------- Comment #14 from rguenth at gcc dot gnu dot org 2010-09-18 18:25 -------
> You have way more non-SSA variables - possibly due to callee-copy of args
> (again).
>
> I suppose some optimizations end up being disabled for some reason by that,
> but likely nobody will be interested to fixup missed optimizations for
> this target :/
>
> So - if you are interested (heh ...) I'd start comparing dumps to i?86 dumps
> and see where they start to diverge badly. Also try and see why you end up
> with
I already did compare dumps with i?86. cplxlower is where major differences
started to appear, although there are some differences before that.
> complex double cd.1;
> complex long double cld.0;
>
> not in SSA form:
>
> REALPART_EXPR <cld.0> = cld$real_19;
> IMAGPART_EXPR <cld.0> = cld$imag_20;
> REALPART_EXPR <cd.1> = cd$real_10;
> IMAGPART_EXPR <cd.1> = cd$imag_11;
> REALPART_EXPR <cd.1> = Inf;
The problem has something to do with precision. The problem doesn't occur
for complex float. For example, this code doesn't appear for float:
CR.11_40 = REALPART_EXPR <D.1935_9>;
CI.12_41 = IMAGPART_EXPR <D.1935_9>;
D.1966_42 = CR.11_40 > 1.79769313486231570814527423731704356798070567526e+308;
D.1967_43 = !D.1966_42;
D.1968_44 = CI.12_41 != 0.0;
D.1969_45 = D.1967_43 || D.1968_44;
if (D.1969_45 == 1)
goto <bb 6>;
else
goto <bb 5>;
> on i?86 I never even start having partial definitions of these on the lhs ...
> (but I also do not have the callee-copy, so you might check if SRA makes
> those partial defs from them by trying with -fno-tree-sra).
Thanks for the suggestion. I'll give it a try.
> If you're not interested I suggest to XFAIL the testcase for the failing
> platforms.
It's really a question of time. I only have some evenings and weekends
to investigate GCC bugs.
Dave
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
` (2 preceding siblings ...)
2010-09-18 18:59 ` dave at hiauly1 dot hia dot nrc dot ca
@ 2010-09-18 22:14 ` dave at hiauly1 dot hia dot nrc dot ca
2010-09-19 11:10 ` rguenth at gcc dot gnu dot org
2010-09-19 14:53 ` dave at hiauly1 dot hia dot nrc dot ca
5 siblings, 0 replies; 10+ messages in thread
From: dave at hiauly1 dot hia dot nrc dot ca @ 2010-09-18 22:14 UTC (permalink / raw)
To: gcc-bugs
------- Comment #16 from dave at hiauly1 dot hia dot nrc dot ca 2010-09-18 22:14 -------
Subject: Re: [4.6 Regression] FAIL:
gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
On Sat, 18 Sep 2010, rguenth at gcc dot gnu dot org wrote:
> ------- Comment #14 from rguenth at gcc dot gnu dot org 2010-09-18 18:25 -------
> You have way more non-SSA variables - possibly due to callee-copy of args
> (again).
I think you are correct about this being a callee-copy problem. Complex
float is passed by value, so a copy is not made. In the 087t.dce2 pass,
the float code is simplified to
if (x_32(D) != 0)
goto <bb 4>;
else
goto <bb 3>;
<bb 3>:
<bb 4>:
Invalid sum of incoming frequencies 10000, should be 5000
# cf$imag_13 = PHI <4.0e+0(2), 5.0e+0(3)>
cf_36 = COMPLEX_EXPR < Inf, cf$imag_13>; D.2130_37 = __builtin_cprojf
(cf_36);
D.2133_152 = IMAGPART_EXPR <D.2130_37>;
D.2134_41 = __builtin_copysignf (1.0e+0, D.2133_152);
if (D.2134_41 != 1.0e+0)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
Invalid sum of incoming frequencies 2500, should be 6450
link_error (160);
whereas for double we still have
<bb 6>:
Invalid sum of incoming frequencies 8950, should be 10000
REALPART_EXPR <cd.1> = Inf;
if (x_32(D) != 0)
goto <bb 8>;
else
goto <bb 7>;
<bb 7>:
<bb 8>:
# iftmp.4_14 = PHI <4.0e+0(6), 5.0e+0(7)>
D.2321_122 = REALPART_EXPR <cd.1>;
cd.5_44 = COMPLEX_EXPR <D.2321_122, iftmp.4_14>;
D.2142_45 = __builtin_cproj (cd.5_44); [return slot optimization]
CR.26_84 = REALPART_EXPR <D.2142_45>;
D.2145_85 = IMAGPART_EXPR <D.2142_45>;
D.2325_75 = CR.26_84 >
1.79769313486231570814527423731704356798070567526e+308;
D.2326_76 = !D.2325_75;
D.2327_67 = D.2145_85 != 0.0;
D.2328_60 = D.2327_67 || D.2326_76;
if (D.2328_60 == 1)
goto <bb 10>;
else
goto <bb 9>;
<bb 9>:
D.2146_49 = (float) D.2145_85;
D.2147_50 = __builtin_copysignf (1.0e+0, D.2146_49);
if (D.2147_50 != 1.0e+0)
goto <bb 10>;
else
goto <bb 11>;
<bb 10>:
link_error (160);
In the previous 086t.reassoc1 pass, we still had the non SSA stuff:
<bb 2>:
cld$real_188 = REALPART_EXPR <cld_25(D)>;
cld$imag_189 = IMAGPART_EXPR <cld_25(D)>;
cd$real_177 = REALPART_EXPR <cd_26(D)>;
cd$imag_178 = IMAGPART_EXPR <cd_26(D)>;
cf$real_167 = REALPART_EXPR <cf_29(D)>;
cf$imag_158 = IMAGPART_EXPR <cf_29(D)>;
REALPART_EXPR <cld.0> = cld$real_188;
IMAGPART_EXPR <cld.0> = cld$imag_189;
REALPART_EXPR <cd.1> = cd$real_177;
IMAGPART_EXPR <cd.1> = cd$imag_178;
if (x_32(D) != 0)
goto <bb 4>;
else
goto <bb 3>;
-fno-tree-sra didn't help.
080t.cplxlower makes these partial defintions:
REALPART_EXPR <cld.0> = cld$real_188;
IMAGPART_EXPR <cld.0> = cld$imag_189;
REALPART_EXPR <cd.1> = cd$real_177;
IMAGPART_EXPR <cd.1> = cd$imag_178;
# grep real_188 builtin-cproj-1.c.*
builtin-cproj-1.c.080t.cplxlower: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.080t.cplxlower: REALPART_EXPR <cld.0> = cld$real_188;
builtin-cproj-1.c.082t.copyrename3: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.082t.copyrename3: REALPART_EXPR <cld.0> = cld$real_188;
builtin-cproj-1.c.083t.dom1: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.083t.dom1: REALPART_EXPR <cld.0> = cld$real_188;
builtin-cproj-1.c.084t.phicprop1: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.084t.phicprop1: REALPART_EXPR <cld.0> = cld$real_188;
builtin-cproj-1.c.085t.dse1: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.085t.dse1: REALPART_EXPR <cld.0> = cld$real_188;
builtin-cproj-1.c.086t.reassoc1: cld$real_188 = REALPART_EXPR <cld_25(D)>;
builtin-cproj-1.c.086t.reassoc1: REALPART_EXPR <cld.0> = cld$real_188;
004t.gimple makes
REALPART_EXPR <cd.1> = Inf;
# grep "REALPART_EXPR <cd.1>" builtin-cproj-1.c.*
builtin-cproj-1.c.004t.gimple: REALPART_EXPR <cd.1> = Inf;
builtin-cproj-1.c.004t.gimple: REALPART_EXPR <cd.1> = -Inf;
builtin-cproj-1.c.004t.gimple: REALPART_EXPR <cd.1> = Inf;
builtin-cproj-1.c.004t.gimple: REALPART_EXPR <cd.1> = -Inf;
builtin-cproj-1.c.009t.omplower: REALPART_EXPR <cd.1> = Inf;
builtin-cproj-1.c.009t.omplower: REALPART_EXPR <cd.1> = -Inf;
builtin-cproj-1.c.009t.omplower: REALPART_EXPR <cd.1> = Inf;
builtin-cproj-1.c.009t.omplower: REALPART_EXPR <cd.1> = -Inf;
...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
` (3 preceding siblings ...)
2010-09-18 22:14 ` dave at hiauly1 dot hia dot nrc dot ca
@ 2010-09-19 11:10 ` rguenth at gcc dot gnu dot org
2010-09-19 14:53 ` dave at hiauly1 dot hia dot nrc dot ca
5 siblings, 0 replies; 10+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2010-09-19 11:10 UTC (permalink / raw)
To: gcc-bugs
------- Comment #17 from rguenth at gcc dot gnu dot org 2010-09-19 11:10 -------
Ah. The following fixes it for me on a cross. Can you bootstrap & regtest and
install it? It's pre-approved if it works for you.
Thanks.
Index: gcc/function.c
===================================================================
--- gcc/function.c (revision 164396)
+++ gcc/function.c (working copy)
@@ -3578,7 +3578,7 @@ gimplify_parameters (void)
&& compare_tree_int (DECL_SIZE_UNIT (parm),
STACK_CHECK_MAX_VAR_SIZE) > 0))
{
- local = create_tmp_var (type, get_name (parm));
+ local = create_tmp_reg (type, get_name (parm));
DECL_IGNORED_P (local) = 0;
/* If PARM was addressable, move that flag over
to the local copy, as its address will be taken,
@@ -3592,7 +3592,7 @@ gimplify_parameters (void)
tree ptr_type, addr;
ptr_type = build_pointer_type (type);
- addr = create_tmp_var (ptr_type, get_name (parm));
+ addr = create_tmp_reg (ptr_type, get_name (parm));
DECL_IGNORED_P (addr) = 0;
local = build_fold_indirect_ref (addr);
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread
* [Bug tree-optimization/43959] [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1 (test for excess errors)
2010-05-02 0:23 [Bug middle-end/43959] New: " danglin at gcc dot gnu dot org
` (4 preceding siblings ...)
2010-09-19 11:10 ` rguenth at gcc dot gnu dot org
@ 2010-09-19 14:53 ` dave at hiauly1 dot hia dot nrc dot ca
5 siblings, 0 replies; 10+ messages in thread
From: dave at hiauly1 dot hia dot nrc dot ca @ 2010-09-19 14:53 UTC (permalink / raw)
To: gcc-bugs
------- Comment #18 from dave at hiauly1 dot hia dot nrc dot ca 2010-09-19 14:53 -------
Subject: Re: [4.6 Regression] FAIL: gcc.dg/torture/builtin-cproj-1.c -O1
(test for excess errors)
> Ah. The following fixes it for me on a cross. Can you bootstrap & regtest and
> install it? It's pre-approved if it works for you.
Will test and install if successful.
Dave
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43959
^ permalink raw reply [flat|nested] 10+ messages in thread