Patchwork Disable loop2_invariant for -Os

login
register
mail settings
Submitter Zhenqiang Chen
Date June 28, 2012, 8:33 a.m.
Message ID <000001cd5508$a55ce3c0$f016ab40$@chen@arm.com>
Download mbox | patch
Permalink /patch/167818/
State New
Headers show

Comments

Zhenqiang Chen - June 28, 2012, 8:33 a.m.
>> diff --git a/gcc/loop-init.c b/gcc/loop-init.c index 03f8f61..5d8cf73
>> 100644
>> --- a/gcc/loop-init.c
>> +++ b/gcc/loop-init.c
>> @@ -273,6 +273,12 @@ struct rtl_opt_pass pass_rtl_loop_done =
>>  static bool
>>  gate_rtl_move_loop_invariants (void)
>>  {
>> +  /* In general, invariant motion can not reduce code size. But it
>> + will
>> +     change the liverange of the invariant, which increases the
>> + register
>> +     pressure and might lead to more spilling.  */
>> +  if (optimize_function_for_size_p (cfun))
>> +    return false;
>> +
>
>Can you do this per loop instead?  Using optimize_loop_nest_for_size_p?

Update it according to the comments.

Thanks!
-Zhenqiang

ChangeLog:
2012-06-28  Zhenqiang Chen <zhenqiang.chen@arm.com>

	* loop-invariant.c (move_loop_invariants): Skip
	move_single_loop_invariants when optimizing loop for size

Patch

diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index f8405dd..b0e84a7 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -1931,7 +1931,8 @@  move_loop_invariants (void)
       curr_loop = loop;
       /* move_single_loop_invariants for very large loops
 	 is time consuming and might need a lot of memory.  */
-      if (loop->num_nodes <= (unsigned) LOOP_INVARIANT_MAX_BBS_IN_LOOP)
+      if (loop->num_nodes <= (unsigned) LOOP_INVARIANT_MAX_BBS_IN_LOOP
+	  && ! optimize_loop_nest_for_size_p (loop))
 	move_single_loop_invariants (loop);
     }