[PATCH] D41863: [AArch64] Fix incorrect LD1 of 16-bit FP vectors in big endian
Oliver Stannard via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 16 07:26:58 PST 2018
olista01 added inline comments.
================
Comment at: lib/Target/AArch64/AArch64InstrInfo.td:5852
def : Pat<(v4f16 (bitconvert (v4i16 FPR64:$src))),
- (v4f16 (REV64v4i16 FPR64:$src))>;
+ (v4f16 FPR64:$src)>;
def : Pat<(v4f16 (bitconvert (v8i8 FPR64:$src))),
----------------
efriedma wrote:
> pbarrio wrote:
> > SjoerdMeijer wrote:
> > > Don't think I understand why this is now a special case. Why is this one different from the other patterns here?
> > Earlier in the file there is an explanation about why we need to insert REVs when we do bitcasts in big endian (~line 5600). At the end, the following comment suggests that identity conversions (e.g. same-size float-to-int conversions) do not need it:
> >
> > ```
> >
> > // Most bitconverts require some sort of conversion. The only exceptions are:
> > // a) Identity conversions - vNfX <-> vNiX
> > ```
> >
> > It makes sense to me that a type conversion in big endian between vectors with elements of the same size does not need a byte reversal. This reversal should have been done right before, otherwise the original vector (in this case, with type v4f16) would have also been incorrect.
> There should be a testcase specifically for this change, then. Maybe something like this, to force the conversion:
>
> ```
> %x = add <4 x i16> %i, 1
> %y = bitcast <4 x i16> %x to <4 x half>
> %z = fpext <4 x half> %y tp <4 x float>
> ```
>
> Please put this in a separate patch from the AArch64TargetLowering::addTypeForNEON changes. Also, please move the pattern out of the IsBE predicate.
(discussed in person with Pablo, noting here for the record)
We think some of the other patterns here are also wrong, especially the vNf16<->vNi16 ones, which obviously don't need REV instructions. We should fix all of them at once.
Repository:
rL LLVM
https://reviews.llvm.org/D41863
More information about the llvm-commits
mailing list