mbox series

[0/6] If conversion with multiple sets.

Message ID 20181114130752.5057-1-rdapp@linux.ibm.com
Headers show
Series If conversion with multiple sets. | expand

Message

Robin Dapp Nov. 14, 2018, 1:07 p.m. UTC
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