[PATCH] Rewrite arm_neon.h generation from scratch

Tim Northover t.p.northover at gmail.com
Wed Jun 11 03:28:19 PDT 2014


Hi James,

On 11 June 2014 10:08, James Molloy <James.Molloy at arm.com> wrote:
> Ping? :)

I also think this is a wonderful change! Even committed now, it would
be a vast improvement on the existing code. I just spotted a couple of
possibilities:

+  /// NeededEarly - set if any other intrinsic depends on this intrinsic.
+  bool NeededEarly;

Was this an early version of the Dependencies thing? It seems unused.

> def OP_XTN      : Op<(call "vcombine", $p0, (call "vmovn", $p1))>;

(And others). Was it a conscious decision to use a "vcombine" call
over "(shuffle X, Y, (add mask0, mask1))"? I can see arguments both
ways.

Depending on how cunning we want to be, we could use something like:

    class ConcatOp<dag LHS, dag RHS> : Op<(shuffle LHS, RHS, (add
mask0, mask1))>;

Then write (with appropriate "node" handling in Intrinsic::emitDag):

    def node;
    def OP_XTN : ConcatOp<(node $p0), (call "vmovn", $p1)>;

It only really works because the vcombine is at the outside,
unfortunately. I'd love to be able to apply it to the many vget_high
calls too but can't think of a clean way without reinventing something
like DAGISel's PatFrag.

Cheers.

Tim.



More information about the cfe-commits mailing list