[Patch] PR56064: Fold VIEW_CONVERT_EXPR with FIXED_CST, Take #2
Georg-Johann Lay
avr@gjlay.de
Tue Jan 29 20:00:00 GMT 2013
Richard Biener wrote:
> Georg-Johann Lay wrote:
>> This is tentative patch as discussed in
>>
>> http://gcc.gnu.org/ml/gcc/2013-01/msg00187.html
>>
>> fold-const.c gets 2 new function native_encode_fixed and
>> native_interpret_fixed. Code common with the integer case is factored out and
>> moved to the new constructor-like function double_int::from_buffer.
>>
>> The code bootstraps fine on x86-linux-gnu and I have test coverage from
>> avr-unknown-none.
>>
>> Ok to apply?
>
> Ok.
>
> Thanks,
> Richard.
Let me drop this, I don't like the name "const_fixed_from_double_int". It's
bad and I think "fixed_from_double_int" is better. Other constructor-like
functions for FIXED_VALUE_TYPE use fixed_from_* whereas const_fixed_* returns a
CONST_FIXED rtx.
This is less confusing and fits better the naming convention.
The new patch also adds const_fixed_from_double_int that actually returns a
CONST_FIXED rtx. It's unused, but I would use it in the avr back.
Okay with that rename? (Or, at your option, without const_fixed_from_double_int).
Johann
PR tree-optimization/56064
* fixed-value.c (fixed_from_double_int): New function.
* fixed-value.h (fixed_from_double_int): New prototype.
(const_fixed_from_double_int): New static inline function.
* fold-const.c (native_interpret_fixed): New static function.
(native_interpret_expr) <FIXED_POINT_TYPE>: Use it.
(can_native_interpret_type_p) <FIXED_POINT_TYPE>: Return true.
(native_encode_fixed): New static function.
(native_encode_expr) <FIXED_CST>: Use it.
(native_interpret_int): Move double_int worker code to...
* double-int.c (double_int::from_buffer): ...this new static method.
* double-int.h (double_int::from_buffer): Prototype it.
testsuite/
PR tree-optimization/56064
* gcc.dg/fixed-point/view-convert.c: New test.
>
>> There are less intrusive solutions that only handle the int <-> fixed cases,
>> for example fold-const.c:fold_view_convert_expr() could test for these cases
>> and use double_int directly without serializing / deserializing through a
>> memory buffer.
>>
>> Johann
>>
>>
>> PR tree-optimization/56064
>> * fixed-value.c (const_fixed_from_double_int): New function.
>> * fixed-value.h (const_fixed_from_double_int): New prototype.
>> * fold-const.c (native_interpret_fixed): New static function.
>> (native_interpret_expr) <FIXED_POINT_TYPE>: Use it.
>> (can_native_interpret_type_p) <FIXED_POINT_TYPE>: Return true.
>> (native_encode_fixed): New static function.
>> (native_encode_expr) <FIXED_CST>: Use it.
>> (native_interpret_int): Move double_int worker code to...
>> * double-int.c (double_int::from_buffer): ...this new static method.
>> * double-int.h (double_int::from_buffer): Prototype it.
>>
>> testsuite/
>> PR tree-optimization/56064
>> * gcc.dg/fixed-point/view-convert.c: New test.
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: viewconv-fixed-2.diff
Type: text/x-patch
Size: 11464 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20130129/b777d3a6/attachment.bin>
More information about the Gcc-patches
mailing list