> > You can get the RTL for these patterns when expanding stores like > > a = (b < c); > > In this case, GCC tries to avoid a conditional branch and (I suppose you are > on GCC <4.5) instead of cmp<mode> and b<cond> you go through cmp<mode> and > s<cond>. cmp<mode> does nothing but stashing away its operands, while > s<cond> expands RTL for both the comparison and the above insn.
Thanks, and yes, I'm using GCC 4.4, But gcc didn't work in this way for me, I tried piece of code like: extern float a, b; extern int c; int main(void) { c = (a < b); return 0; } after tracing cc1, found gcc would also do it with set/compare/jump/set code at the end of function do_store_flag, i.e., unsing cmp<mode> and b<code> sequence. -- Best Regards.