[PATCH] implement 3 aarch64 neon instrunctions (umov smov ins) in llvm
Tim Northover
t.p.northover at gmail.com
Fri Sep 13 00:44:21 PDT 2013
Hi Kevin,
> I see many developers use llvm-reviews.chandlerc.com for review, so I upload my patch there.
Good idea, I quite like the software when you get used to it. One
thing: it's best to put llvm-commits in the CC list, otherwise most
people will have no idea the patch is there.
A few more comments:
> setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v8i8, Custom);
I'm hoping these won't be necessary any more (in fact they're the main
reason I decided to implement the RegisterOperand change when I did) .
Now that VPR64 and VPR128 are more sanely related, you should be able
to write patterns for this instead of the custom lowering.
> BuildMI(MBB, I, DL, get(AArch64::INSsw), DestReg)
> .addReg(DestReg)
I still think the separate NEON instructions are a mistake. Last time
you asked for solid evidence, and I obviously couldn't say much. I've
run a set of tight loops exercising the product { NEON, Scalar, Mixed}
x { FMOV, INS }.
As expected, mixing NEON and scalar instructions made essentially no
difference but using INS instead of FMOV slowed the program down
(massively, until I decided to be kind and break the artificial
register-dependency introduced, then only slightly).
> multiclass Neon_SMOV_pattern2 <RegisterOperand OpVPR, ValueType OpTy,
> Operand OpImm, Instruction SMOVI> {
>def : Pat<(i64 (sext
There's no need for a multiclass with just one member. You can use a
class instead.
Cheers.
Tim.
More information about the llvm-commits
mailing list