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?