[AArch64] Fix vcvt_high_f64_f32 and vcvt_figh_f32_f64 intrinsics.
Alan Lawrence
alan.lawrence@arm.com
Thu Sep 10 11:21:00 GMT 2015
On 09/09/15 11:31, Alan Lawrence wrote:
> Hmmm, hang on. I'm not quite sure what the actual issue/bug is here, but is this
> the same issue as my patch 12 "with BE RTL fix"?
> (https://gcc.gnu.org/ml/gcc-patches/2015-08/msg01482.html, explanation last at
> https://gcc.gnu.org/ml/gcc-patches/2015-07/msg02365.html) I pushed this as
> r227551 last night and since this reparameterizes the patterns I don't think
> your patch will apply to current HEAD.
>
> If my patch is wrong...well, that may be, I haven't understood the issue yet.
In particular, we should expect the vec_unpacks standard pattern to have
different behaviour (from a tree POV), as this is what I find searching for
VEC_UNPACK in tree-vect-stmts.c:
bool
supportable_widening_operation
{
...
switch (code)
{
...
CASE_CONVERT:
c1 = VEC_UNPACK_LO_EXPR;
c2 = VEC_UNPACK_HI_EXPR;
break;
case FLOAT_EXPR:
c1 = VEC_UNPACK_FLOAT_LO_EXPR;
c2 = VEC_UNPACK_FLOAT_HI_EXPR;
break;
case FIX_TRUNC_EXPR:
/* ??? Not yet implemented due to missing VEC_UNPACK_FIX_TRUNC_HI_EXPR/
VEC_UNPACK_FIX_TRUNC_LO_EXPR tree codes and optabs used for
computing the operation. */
return false;
default:
gcc_unreachable ();
}
if (BYTES_BIG_ENDIAN && c1 != VEC_WIDEN_MULT_EVEN_EXPR)
std::swap (c1, c2);
Yes, IIUC this goes against the principle of tree being the same regardless of
underlying endianness.
--Alan
More information about the Gcc-patches
mailing list