This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 4/4] rs6000: Merge andsi3 and anddi3
- From: David Edelsohn <dje dot gcc at gmail dot com>
- To: Segher Boessenkool <segher at kernel dot crashing dot org>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 17 Aug 2014 17:32:06 -0400
- Subject: Re: [PATCH 4/4] rs6000: Merge andsi3 and anddi3
- Authentication-results: sourceware.org; auth=none
- References: <cover dot 1408131737 dot git dot segher at kernel dot crashing dot org> <dcd0540889a5e3ced2ee5bf7ec6bf30fbd8e06b3 dot 1408131737 dot git dot segher at kernel dot crashing dot org>
On Fri, Aug 15, 2014 at 8:50 PM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> "AND" is more complex. It was a huge tangled mess, where very often the
> order of patterns mattered.
>
> So I made most patterns mutually exclusive (via their condition), and also
> made the "S" constraint (for mask64_operand) require TARGET_POWERPC64.
>
> There is no reason the various immediate-operand instructions should be
> the same pattern. Splitting this up is a nice cleanup, and also allows
> not using the clobber andi./andis. have for any of the other patterns.
> That in turn allows some minor cleanups elsewhere, too.
>
>
> 2014-08-15 Segher Boessenkool <segher@kernel.crashing.org>
>
> gcc/
> * config/rs6000/constraints.md ("S"): Require TARGET_POWERPC64.
> * config/rs6000/htm.md (ttest): Remove clobber.
> * config/rs6000/predicates.md (any_mask_operand): New predicate.
> (and_operand): Reformat.
> (and_2rld_operand): New predicate.
> * config/rs6000/rs6000-protos.h (rs6000_split_logical): Remove last
> parameter.
> * config/rs6000/rs6000.c (rs6000_split_logical_inner): Remove last
> parameter. Handle AND directly.
> (rs6000_split_logical_di): Remove last parameter.
> (rs6000_split_logical): Remove last parameter. Remove obsolete
> comment.
> * config/rs6000/rs6000.md (BOOL_REGS_AND_CR0): Delete.
> (one_cmpl<mode>2): Adjust call of rs6000_split_logical.
> (ctz<mode>2, ffs<mode>2): Delete clobber. Reformat.
> (andsi3, andsi3_mc, andsi3_nomc, *andsi3_internal2_mc,
> *andsi3_internal3_mc, *andsi3_internal4, *andsi3_internal5_mc,
> and 5 anonymous splitters): Delete.
> (and<mode>3): New expander.
> (*and<mode>3, *and<mode>3_dot, *and<mode>3_dot2): New.
> (and<mode>3_imm, *and<mode>3_imm_dot, *and<mode>3_imm_dot2): New.
> (*and<mode>3_mask, *and<mode>3_mask_dot, *and<mode>3_mask_dot2): New.
> (ior<mode>, xor<mode>3): Adjust call of rs6000_split_logical.
> (floatdisf2_internal1): Remove clobbers.
> (anddi3, anddi3_mc, anddi3_nomc, anddi3_internal2_mc,
> *anddi3_internal3_mc, and 4 anonymous splitters): Delete.
> (*anddi3_2rld, *anddi3_2rld_dot, *anddi3_2rld_dot2): New.
> (and<mode>3 for BOOL_128): Remove clobber.
> (*and<mode>3_internal for BOOL_128): Remove clobber. Adjust call of
> rs6000_split_logical.
> (*bool<mode>3_internal for BOOL_128): Adjust call of
> rs6000_split_logical.
> (*boolc<mode>3_internal1 for BOOL_128,
> *boolc<mode>3_internal2 for BOOL_128,
> *boolcc<mode>3_internal1 for BOOL_128,
> *boolcc<mode>3_internal2 for BOOL_128,
> *eqv<mode>3_internal1 for BOOL_128,
> *eqv<mode>3_internal2 for BOOL_128,
> *one_cmpl<mode>3_internal for BOOL_128): Ditto.
> * config/rs6000/vector.md (*vec_reload_and_plus_<mptrsize): Remove
> clobber.
> (*vec_reload_and_reg_<mptrsize>): Delete.
Okay.
Thanks, David