[PATCH] Add a Scalarize pass
rsandifo at linux.vnet.ibm.com
Wed Nov 13 05:54:25 PST 2013
Renato Golin <renato.golin at linaro.org> writes:
>> We're always going
>> to scalarise eventually, whether it's at the IR level or at the CodeGen
>> level, and doing it at the IR level is preferable because it exposes more
>> optimisation opportunities.
> This is a good point, but still strikes me as a front-end option. There are
> many front-end options that are enabled by default on certain targets.
Do you mean front ends enable the options by default for specific targets,
or that LLVM presents the options to front ends but sets their defaults
based on the target? If the latter, that'd certainly be fine with me.
If the former, then it seems like we'd have to duplicate knowledge about
the (lack of) vector capabilities of a target in LLVM and in any front
end that might need to handle vectorised input.
Since scalarisation happens anyway, I think this is more about knowing the
best order for doing things rather than deciding whether something is done
> Although the pass is added to the PassManagerBuilder by default, it
>> do anything unless the target wants it to.
> It should be a matter of features, not targets. Anyway, is there any other
> pass that has this kind of target-specific behaviour?
Like you say, isn't the vectoriser itself one of them? We have passes
that convert scalar operations to vector operations based on target
properties, and this patch is adding a pass that converts vector
operations to scalar operations based on target properties.
More information about the llvm-commits