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 07/10] rs6000: The big carry insns addition


On Mon, Dec 8, 2014 at 9:18 AM, Segher Boessenkool
<segher@kernel.crashing.org> wrote:
> Now that everything is in place for letting GCC use the carry-using and
> carry-producing machine insns as separate RTL insns, switch over all
> remaining patterns that clobber CA without telling the compiler.  This
> are the multiple-precision add/sub/neg patterns, and the various eq/ne/
> ltu/gtu/leu/geu patterns.
>
> The eq/ne patterns are special.  The optimal machine code for those isn't
> regular (like e.g. the ltu patterns are), and we want to implement a plain
> eq as "cntlz[wd];sr[wd]i"; but that means that if we split those patterns
> at expand time, combine will happily put them back together again.  So
> expand them as eq/ne, and split later.
>
>
> 2014-12-08  Segher Boessenkool  <segher@kernel.crashing.org>
>
> gcc/
>         PR target/64180
>         * config/rs6000/predicates.md (unsigned_comparison_operator): New.
>         (signed_comparison_operator): New.
>         * config/rs6000/rs6000-protos.h (rs6000_emit_eqne): Declare.
>         * config/rs6000/rs6000.c (rs6000_emit_eqne): New function.
>         (rs6000_emit_sCOND): Remove ISEL test (move it to the expander).
>         * config/rs6000/rs6000.md (add<mode>3 for SDI): Expand DImode
>         add to addc,adde directly, if !TARGET_POWERPC64.
>         (sub<mode>3 for SDI): Expand DImode sub to subfc,subfe directly,
>         if !TARGET_POWERPC64.
>         (neg<mode>2): Delete expander.
>         (*neg<mode>2): Rename to "neg<mode>2".
>         (addti3, subti3): Delete.
>         (addti3, subti3): New expanders.
>         (*adddi3_noppc64, *subdi3_noppc64, *negdi2_noppc64): Delete.
>         (cstore<mode>4_unsigned): New expander.
>         (cstore<mode>4): Allow GPR as output (not just SI).  Rewrite.
>         (cstore<mode>4 for FP): Remove superfluous quotes.
>         (*eq<mode>, *eq<mode>_compare, *plus_eqsi and splitter,
>         *compare_plus_eqsi and splitter, *plus_eqsi_compare and splitter,
>         *neg_eq0<mode>, *neg_eq<mode>, *ne0_<mode>, plus_ne0_<mode>,
>         compare_plus_ne0_<mode> and splitter, *compare_plus_ne0_<mode>_1 and
>         splitter, *plus_ne0_<mode>_compare and splitter, *leu<mode>,
>         *leu<mode>_compare and splitter, *plus_leu<mode>, *neg_leu<mode>,
>         *and_neg_leu<mode>, *ltu<mode>, *ltu<mode>_compare, *plus_ltu<mode>,
>         *plus_ltu<mode>_1, *plus_ltu<mode>compare, *neg_ltu<mode>, *geu<mode>,
>         *geu<mode>_compare and splitter, *plus_geu<mode>, *neg_geu<mode>,
>         *and_neg_geu<mode>, *plus_gt0<mode>, *gtu<mode>, *gtu<mode>_compare,
>         *plus_gtu<mode>, *plus_gtu<mode>_1, *plus_gtu<mode>_compare,
>         *neg_gtu<mode>, 12 anonymous insns, and 12 anonymous splitters):
>         Delete.
>         (eq<mode>3, ne<mode>3): New.
>         (*neg_eq_<mode>, *neg_ne_<mode>): New.
>         (*plus_eq_<mode>, *plus_ne_<mode>): New.
>         (*minus_eq_<mode>, *minus_ne_<mode>): New.

Okay.

Thanks, David


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