This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/49030] ICE in get_arm_condition_code, at config/arm/arm.c:17180
- From: "mikpe at it dot uu.se" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 12 Jun 2011 15:24:25 +0000
- Subject: [Bug target/49030] ICE in get_arm_condition_code, at config/arm/arm.c:17180
- Auto-submitted: auto-generated
- References: <bug-49030-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49030
--- Comment #7 from Mikael Pettersson <mikpe at it dot uu.se> 2011-06-12 15:23:40 UTC ---
Created attachment 24503
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24503
more reduced test case, ICEs at -O1 for armv5te and armv6
Using this slightly more reduced test case I've found that gcc transforms
(set (reg:CC_NCV ...) (compare:CC_NCV (reg:DI ...) (const_int 1 ...)))
(if_then_else (ge (reg:CC_NCV ...) ...) ...)
to
(set (reg:CC_NCV ...) (compare:CC_NCV (reg:DI ...) (const_int 0 ...)))
(if_then_else (gt (reg:CC_NCV ...) ...)
because ifcvt calls noce_get_condition which calls canonicalize_condition, and
the latter has a general rule to transform (GE x const) to (GT x const-1).
So the careful code in e.g. cbranchdi4 to not generate unimplemented
comparisons is neutralized by generic code.
Do DImode comparisons really have to be asymmetric? I.e., could CC_NCV be
removed? I see that LT is apparently supported so why can't GT be too?