https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120479
--- Comment #1 from Jeffrey A. Law <law at gcc dot gnu.org> --- Paolo, good to hear from you :-) I don't think that's directly possible. ; c from line (1) in a7; r+1 in t1 seqz t1,t1 and t3,a7,t1 ; t3 = (t1 == 0) ? 0 : a7 sltu a5,a2,a5 ; r<a1 in a5 or a5,a5,t3 That and actually computes t3 = (t1 == 0) ? 0 : a7 & 0x1; We can see this in the RTL too: Trying 60 -> 62: 60: r190:SI=r191:SI==0 REG_DEAD r191:SI 62: r192:SI=r146:SI&r190:SI REG_DEAD r190:SI REG_DEAD r146:SI Failed to match this instruction: (set (reg:SI 192) (and:SI (eq:SI (reg:SI 191) (const_int 0 [0])) (reg:SI 146 [ _12 ]))) Am I missing something here?