Hi, the follow patch set was created in an attempt to allow multiple sets to be if converted. I was not able to make it work out of the box since I found the cost estimation for the newly created sequence to always be much higher than the sequence before. This is due to noce_convert_multiple_sets creating temporaries that will only get optimized away (if at all) after the cost estimation. Therefore, I decided to expose the number of created conditional moves to the backend in the hope that all temporaries get eliminated eventually. The backend may still use the cost estimation but currently, the original_cost is not even set up properly when the noce_conversion_profitable_p is called.
The series also allows noce_convert_multiple_sets to use immediate operands without moving them into a register. Moreover it tries to only create temporaries when needed so in the future, a cost estimation may be easier. Regards Robin -- ifcvt: Store the number of created cmovs. ifcvt: Allow constants operands in noce_convert_multiple_sets. ifcvt: Use enum instead of transform_name string. S/390: Implement noce_conversion_profitable_p. ifcvt: Only created temporaries as needed. S/390: Add test for noce_convert_multiple_sets. gcc/config/s390/s390.c | 17 ++ gcc/ifcvt.c | 148 ++++++++++++++---- gcc/ifcvt.h | 71 ++++++++- .../gcc.target/s390/ifcvt-two-insns-int.c | 26 +++ 4 files changed, 226 insertions(+), 36 deletions(-) create mode 100644 gcc/testsuite/gcc.target/s390/ifcvt-two-insns-int.c -- 2.17.0