public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division
@ 2021-11-03  3:42 simonb at vmware dot com
  2021-11-03  3:48 ` [Bug middle-end/103053] " pinskia at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: simonb at vmware dot com @ 2021-11-03  3:42 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 103053
           Summary: Unexpected ".global __divti3" emitted for unsigned 128
                    bit division
           Product: gcc
           Version: 10.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: simonb at vmware dot com
  Target Milestone: ---

Created attachment 51725
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51725&action=edit
Preprocessed reproducer for the bug

When compiling the attached reproducer which contains an unsigned 128 bit
divide with any of gcc 7.5.0, 9.3.0, 10.3.0 for x86_64 or gcc 9.3.0 for aarch64
with -O2 it emits a
        .globl  __divti3
even though there is no call to that function.

In the x86 asm output for the reproducer, there is:

        .size   bar, .-bar
        .globl  __udivti3
        .globl  __divti3                  <-- bogus .global emission
        .globl  foo
        ...
        call    __udivti3


This occurs on at least:
  gcc 7.5.0 target x86_64--netbsd
  gcc 9.3.0 target x86_64--linux-gnu
  gcc 10.3.0 targets aarch64--netbsd x86_64--netbsd

No ".global __divti3" is emitted with:
  gcc 6.4.0 target x86_64--linux-gnu

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug middle-end/103053] Unexpected ".global __divti3" emitted for unsigned 128 bit division
  2021-11-03  3:42 [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division simonb at vmware dot com
@ 2021-11-03  3:48 ` pinskia at gcc dot gnu.org
  2021-11-03  4:23 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-11-03  3:48 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
>        .globl  __divti3
> even though there is no call to that function.


Yes it does no harm to emit it though.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug middle-end/103053] Unexpected ".global __divti3" emitted for unsigned 128 bit division
  2021-11-03  3:42 [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division simonb at vmware dot com
  2021-11-03  3:48 ` [Bug middle-end/103053] " pinskia at gcc dot gnu.org
@ 2021-11-03  4:23 ` pinskia at gcc dot gnu.org
  2021-11-03  9:42 ` jakub at gcc dot gnu.org
  2021-11-03 10:26 ` simonb at vmware dot com
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-11-03  4:23 UTC (permalink / raw)
  To: gcc-bugs

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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Yes there is a reference in the object file but GCC assumes that if __udivti3
is there then __divti3 will be there as libgcc implements both.  Yes the linker
will pull in both but it will be minor code size increase.

If the problem is your program implements its own support library (libgcc),
then the bug is in your program and not in GCC really.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug middle-end/103053] Unexpected ".global __divti3" emitted for unsigned 128 bit division
  2021-11-03  3:42 [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division simonb at vmware dot com
  2021-11-03  3:48 ` [Bug middle-end/103053] " pinskia at gcc dot gnu.org
  2021-11-03  4:23 ` pinskia at gcc dot gnu.org
@ 2021-11-03  9:42 ` jakub at gcc dot gnu.org
  2021-11-03 10:26 ` simonb at vmware dot com
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-11-03  9:42 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In this particular case it is cause by my
r7-6851-gb607e75e25261ac2c81d71fe1a4dcf5fcd166603
where we try to emit the division as both signed and unsigned if value range
shows both will work the same, and pick the cheaper one.
The underlying problem is different, we call assemble_external_libcall
prematurely from emit_library_call_value_1, to avoid such spurious .globl
directives we'd need to somehow mark the CALL_INSN and emit those only late
during RTL optimizations, either during final if those directives can be
intermixed with instructions, or close before final otherwise (in some late
always done pass that walks the whole IL).
Because otherwise we can emit it even for library calls we just tried and chose
not to emit, or for code that we even expand, but later during RTL
optimizations optimize away.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug middle-end/103053] Unexpected ".global __divti3" emitted for unsigned 128 bit division
  2021-11-03  3:42 [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division simonb at vmware dot com
                   ` (2 preceding siblings ...)
  2021-11-03  9:42 ` jakub at gcc dot gnu.org
@ 2021-11-03 10:26 ` simonb at vmware dot com
  3 siblings, 0 replies; 5+ messages in thread
From: simonb at vmware dot com @ 2021-11-03 10:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Simon Burge <simonb at vmware dot com> ---
Thanks for the explanation Jakub.

As was inferred from Andrew's comment
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103053#c2 we are using a trimmed
down support library for this particular application.  We'll do as suggested
and add __divti3 to our support library.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-11-03 10:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-03  3:42 [Bug c/103053] New: Unexpected ".global __divti3" emitted for unsigned 128 bit division simonb at vmware dot com
2021-11-03  3:48 ` [Bug middle-end/103053] " pinskia at gcc dot gnu.org
2021-11-03  4:23 ` pinskia at gcc dot gnu.org
2021-11-03  9:42 ` jakub at gcc dot gnu.org
2021-11-03 10:26 ` simonb at vmware dot com

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).