[RFC] - Regression exposed by recent change to compress_float_constant

Dale Johannesen dalej@apple.com
Thu Aug 11 18:00:00 GMT 2005


Fariborz is having trouble with his mailer and has asked me to forward 
his response.

On Aug 10, 2005, at 2:35 PM, Dale Johannesen wrote:
> On Aug 10, 2005, at 12:43 PM, Fariborz Jahanian wrote:
>> Following patch has exposed an optimization shortcoming:
>>
>> 2005-07-12  Dale Johannesen  <dalej@apple.com>
>>
>>         * expr.c (compress_float_constant):  Add cost check.
>>         * config/rs6000.c (rs6000_rtx_cost):  Adjust FLOAT_EXTEND 
>> cost.
>>
>> This patch results in generating worse code for the following test 
>> case:
>>
>> 1) Test case:
>>
>> struct S {
>>         float d1, d2, d3;
>
>
> I believe you mean double not float; the RTL snippets you give 
> indicate this.

Yes, it is double. Copied the wrong test.

>> (insn 12 7 13 0 (set (reg:SF 59)
>>         (mem/u/i:SF (symbol_ref/u:SI ("*LC0") [flags 0x2]) [0 S4 
>> A32])) -1 (nil)
>>     (nil))
>>
>> (insn 13 12 14 0 (set (mem/s/j:DF (reg/f:SI 58 [ D.1929 ]) [0 
>> <result>.d1+0 S8 A32])
>>         (float_extend:DF (reg:SF 59))) -1 (nil)
>>     (nil))
>>
>
> However, if you try your example with float as given, you see it does 
> not do a 
> direct store of constant 0 with or without the compress_float patch.  
> IMO the
> compress_float patch does not really have anything to do with this 
> problem;

Yes. Title says Regression 'exposed' by .... But as my email pointed 
out, float_extend is substituted in cse. So, this is another case of 
change in rtl pattern breaks an optimization down the road. I don't 
know if this is a regression or exposition of a lurking bug.

> before this patch the double case was working well by accident, my 
> patch
> exposed a problem farther downstream, which was always there for the 
> float
> case.

Yes. I mentioned that in my email.

- fariborz

> When I put that patch in, rth remarked:
>
> While I certainly wouldn't expect fold_rtx to find out about this
> all by itself, I'd have thought that there would have been a
> REG_EQUIV or REG_EQUAL note that indicates that the end result is
> the constant (const_double:DF 1.0), and use that in any simplification.
>
> Indeed there is no such note, and I suspect adding it somewhere 
> (expand?) would fix this.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 2333 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc/attachments/20050811/42b9d4e3/attachment.bin>


More information about the Gcc mailing list