https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77826

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
Author: rguenth
Date: Thu Oct 13 12:15:38 2016
New Revision: 241108

URL: https://gcc.gnu.org/viewcvs?rev=241108&root=gcc&view=rev
Log:
2016-10-13  Richard Biener  <rguent...@suse.de>

        PR middle-end/77826
        * genmatch.c (struct capture): Add value_match member.
        (commutate): Preserve value_match.
        (lower_opt_convert): Likewise.
        (lower_cond): Likewise.
        (replace_id): Likewise.
        (struct dt_operand): Add value_match member.
        (decision_tree::cmp_node): Compare it.
        (decision_tree::insert_operand): Honor it when finding and
        when appending a DT_MATCH.
        (dt_operand::gen_match_op): Generate a type check after
        operand_equal_p if ! value_match for both GENERIC and GIMPLE.
        (parser::get_internal_capture_id): New helper.
        (parser::finish_match_operand): New function lowering @@<id>.
        (parser::parse_capture): Parse @@<id> as value-match.
        (parser::parse_expr): Use get_internal_capture_id.
        (parser::parse_simplify): Call finish_match_operand.
        (walk_captures): New helper.
        * match.pd (X - (X / Y) * Y -> X % Y): Use value-matching instead
        of operand_equal_p.
        ((X /[ex] A) * A -> X): Likewise.
        ((X | Y) ^ X -> Y & ~ X): Handle constants properly by using
        convert[12] and value-matching.
        ((A | B) & (A | C) ->  A | (B & C)): Likewise.
        ((X | Y) | Y -> X | Y): Likewise.
        ((X ^ Y) ^ Y -> X): Likewise.
        (A - (A & B) -> ~B & A): Likewise.
        ((T)(P + A) - (T)P -> (T) A): Likewise.
        ((T)P - (T)(P + A) -> -(T) A): Likewise.
        ((T)(P + A) - (T)(P + B) -> (T)A - (T)B): Likewise.
        * doc/match-and-simplify.texi: Amend capture section.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/doc/match-and-simplify.texi
    trunk/gcc/genmatch.c
    trunk/gcc/match.pd

Reply via email to