On Wed, Aug 20, 2014 at 10:21:41AM +0100, Richard Biener wrote: > I think this is overly complicated and instead SRA should only > use the parameters. Targets can adjust their default (like they > do for other parameters). > > The default should be MOVE_RATIO which should be applied > where the common code adjusts parameters (see existing > examples for not overriding user specified ones).
Hi, My attempts to simplify this patch didn't work out so well... If I move the target hook to the driver, I can't use MOVE_RATIO to find a deafult value. MOVE_RATIO for some targets is wired to a function in the back-end, or otherwise references symbols we don't want to pull in to libcommon/libcommon-target. My next approach was to hookize just this one use of MOVE_RATIO - again, this was a failure as libcommon-target doesn't have enough access to the CPU tuning tables used by backends (nor should it). That took me to my current approach. Hookize each of the three unique uses of MOVE_RATIO, allowing us to eliminate it entirely. This still doesn't let us simplify the patch I sent in August, but it does neaten up the users of MOVE_RATIO allowing us to separate out concerns. This gives targets and micro-architectures much more fine-grained control over the tuning parameters for inlining, SRA and move_by_pieces, which were all previously wrapped in MOVE_RATIO. I've bootstrapped and tested the series on x86_64, ARM and AArch64 with no issues. The patches coming are: [Patch 1/4] Hookize MOVE_BY_PIECES_P, remove most uses of MOVE_RATIO Which moves everything consulting MOVE_RATIO to decide whether the move_by_pieces infrastructure will be used to a new hook TARGET_MOVE_BY_PIECES_PROFITABLE_P. [Patch 2/4] Hack out a use of MOVE_RATIO in tree-inline.c Which adds the target hook TARGET_ESTIMATE_BLOCK_COPY_NINSNS, used to estimate the number of instructions a target will require to move a block. This is used by inlining to estimate the cost of various parameters. [Patchv2 3/4] Control SRA and IPA-SRA by a param rather than MOVE_RATIO Which is a similar patch to that I sent in August, adding new parameters and a new target hook to control when SRA should be used. [Patch AArch64 4/4] Wire up New target hooks Which wires all of this up for AArch64. Thanks, James