On 10/19/2015 03:57 PM, Kyrill Tkachov wrote:
This second patch teaches simplify_binary_operation to return the
dereferenced
constants from the constant pool in the binary expression if other
simplifications failed.
This, combined with the 1/2 patch for aarch64
(https://gcc.gnu.org/ml/gcc-patches/2015-10/msg01744.html) allow for:
int
foo (float a)
{
return a * 32.0f;
}
to generate the code:
foo:
fcvtzs w0, s0, #5
ret
because combine now successfully tries to match:
(set (reg/i:SI 0 x0)
(fix:SI (mult:SF (reg:SF 32 v0 [ a ])
(const_double:SF 3.2e+1 [0x0.8p+6]))))
whereas before it would not try the to use the const_double directly
but rather its constant pool reference.
The only way I could see a problem with that if there are circumstances
where the memory variant would simplify further. That doesn't seem
highly likely, so...
* simplify-rtx.c (simplify_binary_operation): If either operand was
a constant pool reference use them if all other simplifications
failed.
Ok.
Bernd