https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107172
--- Comment #32 from H.J. Lu <hjl.tools at gmail dot com> --- (In reply to Segher Boessenkool from comment #30) > (In reply to H.J. Lu from comment #26) > > LTU/GEU are only used to check FLAGS_REG against constant 0. > > That is not what > (ltu (reg 17) (const_int 0)) > means though? > > Together with a previous > (set (reg 17) (compare A B)) > > it means the result of A <= B. That is correct. > There is no actual comparison with 0, that is just notation. True. But simplify-rtx.cc simplifies (ltu (reg 17) (const_int 0)) to false when reg 17 is set. > > simplify_const_relational_operation has > > > > /* We can't simplify MODE_CC values since we don't know what the > > actual comparison is. */ > > if (GET_MODE_CLASS (GET_MODE (op0)) == MODE_CC) > > return 0; > > And combine *does* know how to find the actual comparison, in many cases. > Some > other passes can as well, there is no magic involved, you just need to look > at > other insns as well (just one really, the CC setter). Use the actual comparison isn't issue. The issue is how (ltu (reg 17) (const_int 0)) should be simplified when reg 17 is known to be set.