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

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jan Hubicka <hubi...@gcc.gnu.org>:

https://gcc.gnu.org/g:3a61ca1b9256535e1bfb19b2d46cde21f3908a5d

commit r14-2369-g3a61ca1b9256535e1bfb19b2d46cde21f3908a5d
Author: Jan Hubicka <j...@suse.cz>
Date:   Thu Jul 6 18:56:22 2023 +0200

    Improve profile updates after loop-ch and cunroll

    Extend loop-ch and loop unrolling to fix profile in case the loop is
    known to not iterate at all (or iterate few times) while profile claims it
    iterates more.  While this is kind of symptomatic fix, it is best we can do
    incase profile was originally esitmated incorrectly.

    In the testcase the problematic loop is produced by vectorizer and I think
    vectorizer should know and account into its costs that vectorizer loop
and/or
    epilogue is not going to loop after the transformation.  So it would be
nice
    to fix it on that side, too.

    The patch avoids about half of profile mismatches caused by cunroll.

    Pass dump id and name            |static mismatcdynamic mismatch
                                     |in count     |in count
    107t cunrolli                    |      3    +3|        17251   +17251
    115t threadfull                  |      3      |        14376    -2875
    116t vrp                         |      5    +2|        30908   +16532
    117t dse                         |      5      |        30908
    118t dce                         |      3    -2|        17251   -13657
    127t ch                          |     13   +10|        17251
    131t dom                         |     39   +26|        17251
    133t isolate-paths               |     47    +8|        17251
    134t reassoc                     |     49    +2|        17251
    136t forwprop                    |     53    +4|       202501  +185250
    159t cddce                       |     61    +8|       216211   +13710
    161t ldist                       |     62    +1|       216211
    172t ifcvt                       |     66    +4|       373711  +157500
    173t vect                        |    143   +77|      9802097 +9428386
    176t cunroll                     |    221   +78|     15639591 +5837494
    183t loopdone                    |    218    -3|     15577640   -61951
    195t fre                         |    214    -4|     15577640
    197t dom                         |    213    -1|     16671606 +1093966
    199t threadfull                  |    215    +2|     16879581  +207975
    200t vrp                         |    217    +2|     17077750  +198169
    204t dce                         |    215    -2|     17004486   -73264
    206t sink                        |    213    -2|     17004486
    211t cddce                       |    219    +6|     17005926    +1440
    255t optimized                   |    217    -2|     17005926
    256r expand                      |    210    -7|     19571573 +2565647
    258r into_cfglayout              |    208    -2|     19571573
    275r loop2_unroll                |    212    +4|     22992432 +3420859
    291r ce2                         |    210    -2|     23011838
    312r pro_and_epilogue            |    230   +20|     23073776   +61938
    315r jump2                       |    236    +6|     27110534 +4036758
    323r bbro                        |    229    -7|     21826835 -5283699

    W/o the patch cunroll does:

    176t cunroll                     |    294  +151|126548439   +116746342

    and we end up with 291 mismatches at bbro.

    Bootstrapped/regtested x86_64-linux. Plan to commit it after the
scale_loop_frequency patch.

    gcc/ChangeLog:

            PR middle-end/25623
            * tree-ssa-loop-ch.cc (ch_base::copy_headers): Scale loop frequency
to maximal number
            of iterations determined.
            * tree-ssa-loop-ivcanon.cc (try_unroll_loop_completely): Likewise.

    gcc/testsuite/ChangeLog:

            PR middle-end/25623
            * gfortran.dg/pr25623-2.f90: New test.

Reply via email to