This is the mail archive of the
mailing list for the GCC project.
Re: [patch] Move switch-conversion after profiling
On Fri, Apr 20, 2012 at 10:52 AM, Jan Hubicka <firstname.lastname@example.org> wrote:
>> On Thu, Apr 19, 2012 at 5:16 PM, Steven Bosscher <email@example.com> wrote:
>> > Hello,
>> > If we want to use profiling to expand switches in GIMPLE, we'll have
>> > to run switch-conversion after profiling.
>> > Bootstrapped and tested on x86_64-unknown-linux-gnu. OK?
>> That's too early still. ?Profile data is not read until pass_ipa_tree_profile.
> Good point ;)
>> Which means moving it to after all IPA transforms (and thus run at LTRANS
>> stage with LTO) would be better. ?May I suggest to move it after the
>> DCE pass that runs after the first VRP pass?
> The original motivation to do switch conversion early was to get function
> bodies smaller (i.e. when inlining the static var don't need duplication, the
> switch code does)
> This was motivated by real world examples, i.e. mesa that inlines function converting
> error codes into strings. At one point we estimated it to be of 0 size (because it
> has only switch that was ignored and string constants that are zero cost) and we
> ended up completely exploding by inlining it everywhere.
Well, I never really believed this theory ;)
> I think we should retain this and perhaps have always win conversions done early
> and real coversion (of switches to decision trees) done much later.
> Switch expansion hides what the code really does and some of the late optimizers
> will probably benefit from knowing that switch is really a switch.
> I would expect that somewhere before second VRP makes most sense.
No, I think before loop opts it makes most sense as you can end up
creating vectorizable code. After first VRP because such VRP can
remove dead cases.