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