Hi all, On arm we don't have a dedicated instruction that corresponds to a CTZ rtx but we synthesise it with an RBIT instruction followed by a CLZ. This is currently done at expand time. However, I'd like to push that step until after reload and keep the CTZ rtx as a single whole in the early RTL optimisers. This better expresses the semantics of the operation as a whole, since the RBIT operation is represented as an UNSPEC anyway and so will not see the benefits of combine, and a CTZ-specific optimisation that is implemented in patch 3/3 of this series won't be triggered if the expression is broken up into an UNSPEC and a CLZ. Therefore this patch changes the expander to expand to a CTZ rtx and split it after reload into an RBIT + CLZ to allow sched2 to schedule them apart if it deems necessary. This patch enables the optimisation in patch 3/3 where the appropriate test is added. Bootstrapped and tested on arm-none-linux-gnueabihf. Ok for trunk? Thanks, Kyrill 2016-05-26 Kyrylo Tkachov PR middle-end/37780 * config/arm/arm.md (ctzsi2): Convert to define_insn_and_split.