------- Comment #13 from ubizjak at gmail dot com 2007-08-19 18:03 ------- (In reply to comment #12)
> if (sum == 0) sum = 1; > > Additionally, the resulting asm seems to be a bit stupid: > > testl %edx, %edx > movl $1, %eax > cmove %eax, %edx > > should be just > > testl %edx, %edx > sete %dl Not, because sete sets dl to 0 (zero) when condition is not met. The c code above doesn't change sum when sum != 0. Regarding the problem, described in comment #11: Perhaps we can add CCCZmode as a common mode to otherwise orthogonal CCCmode and CCZmode. Playing with i386_cc_modes_compatible() and ix86_match_cc_mode() we can perhaps teach combine to CSE and merge two comparisons. To achieve this, I think we should use (enhanced) ix86_match_cc_mode() in just added RTL patterns. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30315