Schedule pass for a subtarget?

[resending to correct llvm-dev address]


I’d like to start enabling the loop data prefetch pass for Cyclone (an ARM64 subtarget). AFAICT, you can’t really add passes specifically to a subtarget but only to a target. This makes sense because in the new world, you could have different subtargets per function. I just want to make sure my understanding is correct.

My plan is to add the pass for the target and then exit the pass early based on a TTI hook (getPrefetchDistance is not set).

Currently, PowerPC gets around this problem by checking the vendor part of the triple to decide whether the pass should be added. Obviously there is no guarantee that there is a one-to-one mapping between vendor and subtarget.

Please let me know if there is more preferred way of doing this.


This is fine. There are other passes in aarch64 you can use as examples.

Thanks, Eric. After talking to Tim, we found one somewhat similar example, the Thumb2SizeReduction pass in ARM. ARM schedules this pass unconditionally and then the pass bails if the subtarget only supports Thumb1, etc.


Yep. That’s also a good example :slight_smile: