This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 4/4] rs6000: Merge andsi3 and anddi3


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]