public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections.
@ 2004-09-01 23:31 msharov at talentg dot com
  2004-09-02  5:02 ` [Bug rtl-optimization/17272] " pinskia at gcc dot gnu dot org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: msharov at talentg dot com @ 2004-09-01 23:31 UTC (permalink / raw)
  To: gcc-bugs

When two inline functions with assembly sections are concatenated, a
superfluous store is emitted between the two calls. Consider the attached
code, where inline functions padd and psub are called in succession from
main(). The optimizer correctly recognizes that the first argument is
the same for both calls and does not touch %dl once it is set. Then the
there is that store between calls even though the compiler should know
that both v1 and v2 are local and not volatile, and are not expected to
be kept up to date after every instruction. It should also know that the
value is overwritten again after only one instruction. Although the extra
store is not in itself harmful, removing it would improve performance.

============================================================
inline void padd (const char* p, char* r)
{
    asm ("addb %1, %0" : "=&r"(*r) : "r"(*p), "0"(*r));
}

inline void psub (const char* p, char* r)
{
    asm ("subb %1, %0" : "=&r"(*r) : "r"(*p), "0"(*r));
}

int main (void)
{
    char v1[8] = "v1";
    char v2[8] = "v2";
    padd (v1, v2);
    psub (v1, v2);
    return (v2[0]);
}
============================================================
-O3 -march=athlon-mp
============================================================
main:
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ebx
	subl	$4, %esp
	movl	.LC1, %eax
	movzbl	.LC0, %edx
	andl	$-16, %esp
	subl	$16, %esp
	movl	%eax, %ebx
#APP
	addb %dl, %bl
#NO_APP
	movb	%bl, %al	<<< Unneeded
#APP
	subb %dl, %bl
#NO_APP
	movb	%bl, %al        <<< Overwritten here
	movl	-4(%ebp), %ebx
	leave
	movsbl	%al,%eax
	ret
============================================================

-- 
           Summary: Extra store emitted when concatenating inline assembly
                    sections.
           Product: gcc
           Version: 3.4.1
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: inline-asm
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: msharov at talentg dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: athlon-gnu-linux
  GCC host triplet: athlon-gnu-linux
GCC target triplet: athlon-gnu-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17272


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

* [Bug rtl-optimization/17272] Extra store emitted when concatenating inline assembly sections.
  2004-09-01 23:31 [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections msharov at talentg dot com
@ 2004-09-02  5:02 ` pinskia at gcc dot gnu dot org
  2004-12-02  2:16 ` pinskia at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-09-02  5:02 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-09-02 05:02 -------
Confirmed, one of the issues is that we not doing SRA on the array which is the inline-asm.
This also happens on the mainline.
We do produce better code as we don't have one of the arrays in the code anymore.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
          Component|inline-asm                  |rtl-optimization
     Ever Confirmed|                            |1
           Keywords|                            |missed-optimization
   Last reconfirmed|0000-00-00 00:00:00         |2004-09-02 05:02:32
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17272


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

* [Bug rtl-optimization/17272] Extra store emitted when concatenating inline assembly sections.
  2004-09-01 23:31 [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections msharov at talentg dot com
  2004-09-02  5:02 ` [Bug rtl-optimization/17272] " pinskia at gcc dot gnu dot org
@ 2004-12-02  2:16 ` pinskia at gcc dot gnu dot org
  2005-03-03  2:54 ` pinskia at gcc dot gnu dot org
  2005-05-12 17:43 ` [Bug tree-optimization/17272] " pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-12-02  2:16 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|minor                       |enhancement
   Last reconfirmed|2004-09-02 05:02:32         |2004-12-02 02:16:02
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17272


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

* [Bug rtl-optimization/17272] Extra store emitted when concatenating inline assembly sections.
  2004-09-01 23:31 [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections msharov at talentg dot com
  2004-09-02  5:02 ` [Bug rtl-optimization/17272] " pinskia at gcc dot gnu dot org
  2004-12-02  2:16 ` pinskia at gcc dot gnu dot org
@ 2005-03-03  2:54 ` pinskia at gcc dot gnu dot org
  2005-05-12 17:43 ` [Bug tree-optimization/17272] " pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-03-03  2:54 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |pinskia at gcc dot gnu dot
                   |                            |org
   Last reconfirmed|2004-12-02 02:16:02         |2005-03-03 02:54:36
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17272


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

* [Bug tree-optimization/17272] Extra store emitted when concatenating inline assembly sections.
  2004-09-01 23:31 [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections msharov at talentg dot com
                   ` (2 preceding siblings ...)
  2005-03-03  2:54 ` pinskia at gcc dot gnu dot org
@ 2005-05-12 17:43 ` pinskia at gcc dot gnu dot org
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-05-12 17:43 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-05-12 17:43 -------
I mean on the setting side of the inline-asm.

Otherwise we have a ra issue.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|rtl-optimization            |tree-optimization
           Keywords|                            |ra
   Last reconfirmed|2005-03-03 02:54:36         |2005-05-12 17:43:15
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17272


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

end of thread, other threads:[~2005-05-12 17:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-09-01 23:31 [Bug inline-asm/17272] New: Extra store emitted when concatenating inline assembly sections msharov at talentg dot com
2004-09-02  5:02 ` [Bug rtl-optimization/17272] " pinskia at gcc dot gnu dot org
2004-12-02  2:16 ` pinskia at gcc dot gnu dot org
2005-03-03  2:54 ` pinskia at gcc dot gnu dot org
2005-05-12 17:43 ` [Bug tree-optimization/17272] " pinskia at gcc dot gnu dot org

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