[PATCHSET][ARM64] Implement big endian NEON

Tim Northover t.p.northover at gmail.com
Fri May 2 08:46:51 PDT 2014


Hi James,

>From 0001:

+      uint32_t OpSize = Flags.isByVal() ? Flags.getByValSize()*8 :
+                                          VA.getLocVT().getSizeInBits();
+      OpSize = (OpSize + 7) / 8;
+
+      // FIXME: This works on big-endian for composite byvals, which
are the common
+      // case. It should also work for fundamental types too.
+      uint32_t BEAlign = 0;
+      if (OpSize < 8 && !Subtarget->isLittleEndian() && !Flags.isByVal())

Since OpSize is only ever used when !isByVal, this could probably be
simplified, possibly to "if (!Subtarget->isLittleEndian() &&
!Flags.isByVal() && VA.getLocVT().getSizeInBits() < 64" (well,
strictly, <= 56, but I'm unconvinced that there's an actual difference
or that 56 is more correct if there *is*).

>From 0003:

+def : Pat<(v1i64 (bitconvert GPR64:$Xn)), (COPY_TO_REGCLASS
GPR64:$Xn, FPR64)>; // b)

Is that comment (etc) meaningful?

+def : Pat<(f128 (bitconvert (v4i32 FPR128:$src))), (f128 (EXTv16i8
(REV64v4i32 FPR128:$src), (REV64v4i32 FPR128:$src), (i32 8)))>;

I think the long .td lines should probably be split now.

I'd also suggest squashing 0003, 0004 & 0005 into a single commit.

Other than that, it's looking good I think.

Cheers.

Tim.



More information about the llvm-commits mailing list