The condition-code re-use issue is the point, where, IMO, the link to the subreg-lowering 2.) shows up. After, e.g., breaking down a HI mode "sub" operation into two QI mode "sub" and "sub-with-carry"s at expand, I consider it to be extremely difficult to make the mid-end smart enough to identify that a the end of the QI "sub-with-carry" the condition code is set according to the corresponding HImode substract operation.

As a last resort, ou can always use peephole2's to remove unnecessary subtracts on the HImode values.

(parallel [
 (use (operands[0]))
 (set (operands[0]) (minus:HI (operands[1]) (operands[2]))
(note "please delete the entire embracing parallel instruction before register life-time analysis by a new pass: It pretends to use operands 1 and 2 while in fact this instruction does nothing except from giving hints to GCSE.")
])

This seems define_insn_and_split, but it is a lot more complex than what you probably can do...

IIRC, s390 does use add with carry and subtract with borrow instructions effectively (alc and slb in IBM360^W s390-ese). Search the archives on google or gmane.

- combine -re-run

No way, combine is too expensive... Its simplification engine is fine, but a lot of things ought to be redone from scratch so that it becomes a serious instruction selection pass.

Paolo

Reply via email to