On 31/07/13 14:31, Kyrylo Tkachov wrote:
Hi all,
Resurrecting this thread...

On 01/07/13 12:05, Kyrylo Tkachov wrote:
Hi Richard,

This hurts code size.
Therefore I've disabled the new peephole2 for
optimize_insn_for_size_p
so that
the original peephole before r200197 is used when optimising for
size.

I've also added a test to confirm that the new peephole2 for the non-
CC
setting variants is being used when optimising for speed, since the
large code
should be more efficient because the scheduler won't have to deal
with
condition-code setting.

Ok for trunk?

Thanks,
Kyrill

gcc/
2013-06-21  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

        * config/arm/arm.md (peepholes for eq (reg1) (reg2/imm)):
        Use the flag setting variants when optimising for size.


gcc/testsuite/
2013-06-21  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

        * gcc.target/arm/pr46975-2.c: New test.


Not ok.

This re-introduces the bug that Meador was trying to fix.

You need to ensure that the condition code register is dead before
applying this peephole.

Thanks for the review.

How about this? I'm reusing Meadors' peephole2 and guard the
application by
checking the CC reg for deadness with peep2_regno_dead_p.

Kyrill

gcc/
2013-07-01  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>
              Meador Inge  <mead...@codesourcery.com>

        * config/arm/arm.md (peepholes for eq (reg1) (reg2/imm)):
        Use the flag setting variants when optimising for size.


gcc/testsuite/
2013-07-01  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>
              Meador Inge  <mead...@codesourcery.com>

        * gcc.target/arm/pr46975-2.c: New test.


+;; Rd = (eq (reg1) (reg2/imm)) // optimize for size on Thumb2
+;;     subs  T1, Reg1, reg2
+;;     negs Rd, T1
+;;     adcs  Rd, Rd, T1

Only the second operation has to be flag setting.  A later pass will
convert the first and third instructions to flag clobbering if that's
the right thing to do on the target (which it currently always is, but
may not always remain so).

So I tried removing the flag setting from the peephole for the sub and adc
instructions, and nothing ends up converting them to flag-setting instructions
and we end up with:
sub
negs
adc
which is suboptimal for size. Is combine supposed to do decide whether to use
flag-setting variants?


thumb2_reorg should be picking both up. It already has code for sub, but currently doesn't handle adc. You need to investigate the former and perhaps write some code for the latter.

R.

Thanks,
Kyrill





Reply via email to