This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/49069] ICE in gen_cstoredi4, at config/arm/arm.md:7554
- From: "steven at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 01 Mar 2012 18:00:55 +0000
- Subject: [Bug tree-optimization/49069] ICE in gen_cstoredi4, at config/arm/arm.md:7554
- Auto-submitted: auto-generated
- References: <bug-49069-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49069
Steven Bosscher <steven at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |steven at gcc dot gnu.org
Component|target |tree-optimization
Known to work| |4.7.0
Known to fail|4.7.0 |4.6.3
--- Comment #5 from Steven Bosscher <steven at gcc dot gnu.org> 2012-03-01 18:00:55 UTC ---
(In reply to comment #4)
> The real question is why is a cstore operation being called with constants for
> the two operands in the comparison. If it knows the constants, then it knows
> the result of the comparison and can collapse the entire result.
That is because "GCC: (GNU) 4.6.3" fails to fold a comparison in GIMPLE:
$ cat ice.i.143t.optimized
;; Function func1 (func1)
func1 ()
{
<bb 2>:
return;
}
;; Function foo (foo)
foo ()
{
int D.1291;
long long unsigned int D.1290;
<bb 2>:
array1[0] = 0;
D.1290_6 = 0;
D.1291_7 = D.1290_6 == 1;
bar (D.1291_7); [tail call]
return;
}
TER propagates D.1290_6 into the comparison:
Replacing Expressions
D.1290_6 replace with --> D.1290_6 = 0;
D.1291_7 replace with --> D.1291_7 = D.1290_6 == 1;
The ICE goes away with "-fno-tree-ter". This is not a target bug IMHO, but a
tree-optimization bug.