[Patch 0/6] Improve Neon intrinsics a bit

Ramana Radhakrishnan ramana.radhakrishnan@linaro.org
Mon Jul 30 11:43:00 GMT 2012


Hi,
     I've been working on a small project to improve neon intrinsic
and  I kept getting bothered by random failures in gcc.target/arm/neon
and I got sufficiently irritated that I decided to clean that bit up
and then found myself in a maze of rabbit holes. I've always been
somewhat bothered by the Neon intrinsics tests and took the
opportunity to actually do some proper cleanup work in that space.
It's not as good as having proper execute tests but this is certainly
better than the tests that are in place today.

Patch 1 fixes up the vaba and vabal patterns to use a canonical RTL
form with the first operand to the plus being the more complex one.
Patch 2 is a bug fix that fixes up the splitters so that they take
into account the right register for the right mode . For instance a
register not fit for a TImode value shouldn't be put in one even if
the larger mode allows a different register . This is possible for
OImode values or indeed HFA style values being passed around as
parameters and is potentially an issue for folks building hard-float
systems with neon and using some of the large structures.
Patch 3 fixes up the costs so that lower-subreg doesn't go bonkers
with splitting large values before it is visible . More in the actual
patch description. It is possibly the most contentious of the lot and
could do with some review. I think there is still quite a lot more to
be done around costs for some of the vector operations.
Patch 4 - Improves the testsuite for the Neon intrinsics.  There are
still testisms for a number of these but it boils down to the regexps
needing to be corrected for a number of these tests. I thought before
I spend more time on ML wrangling , I should get this out for some
review. Again a contentious one and probably could do with some
discussion.
Patch 5 - Bug fix that fixes up a set of ICEs because we were always
generating vec_duplicate of DImode values into other DImode values.
Possibly needs backporting to older versions.
Patch 6-  Similar to #5 but here we prevent a (set (vec_select:DI ())
(reg:DI))  type operation.  I will commit this regardless. Possibly
needs backporting to older release branches.


regards,
Ramana



More information about the Gcc-patches mailing list