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

--- Comment #17 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>:

https://gcc.gnu.org/g:6901d56fea2132389e9a7ae60b4d9731e6e3c65a

commit r16-190-g6901d56fea2132389e9a7ae60b4d9731e6e3c65a
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Mar 4 10:34:39 2025 +0100

    tree-optimization/119103 - missed overwidening detection for shift

    When vectorizing a shift of u16 data by an amount that's known to
    be less than 16 we currently fail to emit a vector u16 shift.  The
    first reason is that the promotion of the shift amount is hoisted
    only by PRE and that cannot preserve range info, the second reason
    is that pattern detection doesn't use range info when computing
    the precision required for an operation.

    The following addresses the first issue by making LIM hoist all
    expressions for the pass that runs right before PRE and the
    second issue by querying ranges for the shift amount.

            PR tree-optimization/119103
            * tree-ssa-loop-im.cc (in_loop_pipeline): Globalize.
            (compute_invariantness): Override costing when we run
            right before PRE and PRE is enabled.
            (pass_lim::execute): Adjust.
            * tree-vect-patterns.cc (vect_determine_precisions_from_users):
            For variable shift amounts use range information.

            * gcc.target/i386/pr119103.c: New testcase.
  • [Bug tree-optimization/119103] ... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to