This patch stops the trunc, rint, round, floor and ceil intrinsics from blocking tail predication.
Um, you might be fixing my bug here, but can you make it so that the floating point instructions only tail predicate when Subtarget->hasMVEEFloatOps() is true? Otherwise in integer only MVE we could start trying to and tail predicate where it will end up expanding the instruction (which probably isn't a huge deal, but we should try and get it correct).
Can you also add a test for nearbyint too, to show that it _doesn't_ get tail predicated (I think it gets expanded to a multiple scalar instructions.
I think you can remove all this and the code below. It complains about stuff then use -mattr=+mve.fp in the run line.
You will probably have to remove the !tbaa info too.
fma can go into the float block too.
You can use the same test code as floor, for example, but with floor replaced by nearbyint. This won't test that the vecotrizer does or doesn't tail predicate it, but will test that we expand to something non-tail predicated still.