These Neon patterns for vrev32.16 appear to be missing, only the i16 patterns are present.
Details
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
These Neon patterns for vrev32.16 appear to be missing, only the i16 patterns are present.
Hmm, that's kind of what I was expecting: support for i16s, but nog f16s because that not only requires HasNeon but also HasFullFP16. Without HasFullFP16, are vectors of f16s legal?
Yep! That's what I meant. Neon+fullfp16, this fails to select. This test runs in that configuration now. The RHS check lines are missing because it crashes failing to select.
Without fullfp16 you are right that we would never see a f16 vector, so the patterns would never be used. We would promote the f16's to f32's before that point, I believe.
Okidoki, cheers, that makes perfect sense.
Does that mean we only need to add HasFullFP16 to the Predicates of the patterns?
I think not, because the instruction it is actually selecting is just a vrev32, available whenever Neon is present. They will just never be used when fullfp16 is not present. Same as the existing patterns on line 6800 (which I just formatted here).