public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "slyfox at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/106617] New: [13 Regression] gcc is very slow at ternary expressions,
Date: Sun, 14 Aug 2022 21:52:08 +0000	[thread overview]
Message-ID: <bug-106617-4@http.gcc.gnu.org/bugzilla/> (raw)

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

            Bug ID: 106617
           Summary: [13 Regression] gcc is very slow at ternary
                    expressions,
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slyfox at gcc dot gnu.org
  Target Milestone: ---

Created attachment 53454
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53454&action=edit
fc_exch.c.c.orig.gz

Initially I observed slowness on ia64 trying to compile linux-4.19 using this
week's gcc snapshot. x86_64 also seems to be affected.

Original (ia64-specific) example is attached as fc_exch.c.c.orig.gz. It shows
the origin of this construct.

I reduced the example with 4s timeout and got the following reproducer:

// $ cat fc_exch.c.c
int nr_cpu_ids;
void fc_setup_exch_mgr() {
  (((((((1UL << (((0, 0)
                            ? ((1)
                                   ? (((nr_cpu_ids)) ? 0
                                      : ((nr_cpu_ids)) & (21) ? 21
                                      : ((nr_cpu_ids)) ? 20
                                      : ((nr_cpu_ids)) & (19) ? 19
                                      : ((nr_cpu_ids)) ? 18
                                      : ((nr_cpu_ids)) & (17) ? 17
                                      : ((nr_cpu_ids)) ? 16
                                      : ((nr_cpu_ids)) & (15) ? 15
                                      : ((nr_cpu_ids)) ? 14
                                      : ((nr_cpu_ids)) & (13) ? 13
                                      : ((nr_cpu_ids)) ? 12
                                      : ((nr_cpu_ids)) & (11) ? 11
                                      : ((nr_cpu_ids)) ? 10
                                      : ((nr_cpu_ids)) & (9)  ? 9
                                      : ((nr_cpu_ids))  ? 8
                                      : ((nr_cpu_ids)) & (7)  ? 7
                                      : ((nr_cpu_ids))  ? 6
                                      : ((nr_cpu_ids)) & (5)  ? 5
                                      : ((nr_cpu_ids))  ? 4
                                      : ((nr_cpu_ids)) & (3)
                                          ? 3
                                          : ((nr_cpu_ids)-1) & 1)
                                   : 1)
                            : 0) +
                       1))))) &
                 (1ULL << 2)
             ? 2
             : 1))
           );
}


$ time gcc-13.0.0 -Wno-address-of-packed-member -c fc_exch.c.c -o bug.o -O1

real    0m4,821s
user    0m4,726s
sys     0m0,077s

Almost 5s!

$ time gcc-12.1.0 -Wno-address-of-packed-member -c fc_exch.c.c -o bug.o -O1

real    0m0,019s
user    0m0,013s
sys     0m0,006s

$ gcc -v
Using built-in specs.
COLLECT_GCC=/<<NIX>>/gcc-13.0.0/bin/gcc
COLLECT_LTO_WRAPPER=/<<NIX>>/gcc-13.0.0/libexec/gcc/x86_64-unknown-linux-gnu/13.0.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with:
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 13.0.0 20220807 (experimental) (GCC)

On this example perf shows the following output:

     8.63%  cc1      cc1                   [.] operand_compare::operand_equal_p
     4.39%  cc1      cc1                   [.]
operand_compare::verify_hash_value
     4.29%  cc1      cc1                   [.] wide_int_to_tree_1
     3.67%  cc1      cc1                   [.] fold_binary_loc
     3.17%  cc1      cc1                   [.] generic_simplify_NE_EXPR
     2.67%  cc1      cc1                   [.] tree_strip_nop_conversions
     2.64%  cc1      cc1                   [.] generic_simplify_EQ_EXPR
     2.47%  cc1      cc1                   [.] tree_operand_check
     2.39%  cc1      cc1                   [.] get_inner_reference
     2.37%  cc1      cc1                   [.] integer_zerop
     2.25%  cc1      cc1                   [.] wide_int_binop
     2.11%  cc1      cc1                   [.] tree_nop_convert
     1.84%  cc1      cc1                   [.] int_const_binop
     1.81%  cc1      cc1                   [.] int_cst_hasher::hash
     1.78%  cc1      cc1                   [.] ggc_internal_alloc
     1.70%  cc1      cc1                   [.] element_precision
     1.44%  cc1      cc1                   [.] wi::fits_to_tree_p<poly_int<1u,
generic_wide_int<wide_int_ref_storage<false, true> > > >
     1.36%  cc1      cc1                   [.] contains_struct_check
     1.08%  cc1      cc1                   [.] build2
     1.05%  cc1      cc1                   [.] hash_table<int_cst_hasher,
false, xcallocator>::find_slot_with_hash
     1.04%  cc1      cc1                   [.] generic_simplify
     1.03%  cc1      cc1                   [.] cache_wide_int_in_type_cache
     0.97%  cc1      cc1                   [.] get_int_cst_ext_nunits
     0.91%  cc1      cc1                   [.] bitmask_inv_cst_vector_p
     0.87%  cc1      cc1                   [.] tree_strip_sign_nop_conversions
     0.86%  cc1      libc.so.6             [.] __memset_avx2_unaligned_erms

             reply	other threads:[~2022-08-14 21:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-14 21:52 slyfox at gcc dot gnu.org [this message]
2022-08-14 21:55 ` [Bug tree-optimization/106617] " pinskia at gcc dot gnu.org
2022-08-14 22:02 ` slyfox at gcc dot gnu.org
2022-08-14 22:08 ` slyfox at gcc dot gnu.org
2022-08-14 22:09 ` pinskia at gcc dot gnu.org
2022-08-15  7:01 ` slyfox at gcc dot gnu.org
2022-08-15  7:22 ` slyfox at gcc dot gnu.org
2022-08-15  7:39 ` pinskia at gcc dot gnu.org
2022-08-15  8:55 ` rguenth at gcc dot gnu.org
2022-08-15  9:06 ` rguenth at gcc dot gnu.org
2022-08-16  6:47 ` [Bug tree-optimization/106617] [13 Regression] gcc is very slow at ternary expressions since r13-322-g7f04b0d786e13ff5 marxin at gcc dot gnu.org
2022-08-16  7:17 ` rguenth at gcc dot gnu.org
2022-08-16 14:48 ` pinskia at gcc dot gnu.org
2022-08-16 15:10 ` pivanov at hotmail dot com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-106617-4@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).