public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block
@ 2003-06-16  1:50 rabeles-gccbug@archaelogic.com
  2003-06-16  2:03 ` [Bug optimization/11202] " pinskia@physics.uc.edu
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: rabeles-gccbug@archaelogic.com @ 2003-06-16  1:50 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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

           Summary: [regression 3.4] incorrectly ordered rtl after
                    emit_libcall_block
           Product: gcc
           Version: 3.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: rabeles-gccbug@archaelogic.com
                CC: gcc-bugs@gcc.gnu.org
 GCC build triplet: powerpc-apple-darwin6.6
  GCC host triplet: powerpc-apple-darwin6.6
GCC target triplet: powerpc-apple-darwin6.6

For a function call having structs as arguments, rtl may be generated containing
call_insns to memcpy to copy the struct to the argument area of the caller's
stack frame, as well as insns for saving and restoring the argument area across
subsequent calls to memcpy. When -O3 is in effect, emit_libcall_block may be
invoked on this string of insns when the called function's ECF_LIBCALL_BLOCK is
set. emit_libcall_block may then inappropriately re-order some of the
argument-area-save insns before the memcpy call_insn that moves the argument
into the argument area.

Problem may be recreated using 
gcc/gcc/testsuite/gcc.c-torture/execute/20000412-3.c:

typedef struct {
  char y;
  char x[32];
} X;

int z (void)
{
  X xxx;
  xxx.x[0] =
  xxx.x[31] = '0';
  xxx.y = 0xf;
  return f (xxx, xxx);
}

int main (void)
{
  int val;

  val = z ();
  if (val != 0x60)
    abort ();
  exit (0);
}

int f(X x, X y)
{
  if (x.y != y.y)
    return 'F';

  return x.x[0] + y.x[0];
  return 0;
}

Here is an extract from the generated rtl showing the incorrectly ordered insns
(31, 33, 35, and 37) generated for the call to f() in z():

(011a0570:insn 19 18 20 (011a40c0:set (011a40b0:reg:SI 123)
        (011461b0:reg/f:SI 116 virtual-outgoing-args)) -1 (nil)
    (nil))

(011a05a0:insn 20 19 21 (011a41d0:set (011a41c0:reg:SI 124)
        (011a40b0:reg:SI 123)) -1 (nil)
    (nil))

(011a05d0:insn 21 20 22 (011a4200:set (011a41e0:reg:SI 125)
        (011a41f0:plus:SI (01146190:reg/f:SI 114 virtual-stack-vars)
            (01148250:const_int 8 [0x8]))) -1 (nil)
    (nil))

(011a0600:insn 22 21 28 (011a4220:set (011a4210:reg:SI 126)
        (01148318:const_int 33 [0x21])) -1 (nil)
    (nil))

(011a0780:insn 28 22 29 (011a4400:set (011a43e0:reg:SI 128)
        (011a43f0:plus:SI (011a40b0:reg:SI 123)
            (01148330:const_int 36 [0x24]))) -1 (nil)
    (nil))

(011a07b0:insn 29 28 30 (011a4430:set (011a4410:reg:SI 129)
        (011a4420:plus:SI (01146190:reg/f:SI 114 virtual-stack-vars)
            (01148250:const_int 8 [0x8]))) -1 (nil)
    (nil))

(011a07e0:insn 30 29 31 (011a4450:set (011a4440:reg:SI 130)
        (01148318:const_int 33 [0x21])) -1 (nil)
    (nil))

(011a0840:insn 31 30 33 (011a4580:set (011a4560:reg:SI 131)
        (011a4530:mem:SI (011461b0:reg/f:SI 116 virtual-outgoing-args) [0 S4
A32])) -1 (nil)
    (nil))

(011a08a0:insn 33 31 35 (011a4600:set (011a45f0:reg:SI 132)
        (011a45b0:mem:SI (011a45a0:plus:SI (011461b0:reg/f:SI 116
virtual-outgoing-args)
                (01148230:const_int 4 [0x4])) [0 S4 A32])) -1 (nil)
    (nil))

(011a0900:insn 35 33 37 (011a4680:set (011a4670:reg:SI 133)
        (011a4630:mem:SI (011a4620:plus:SI (011461b0:reg/f:SI 116
virtual-outgoing-args)
                (01148250:const_int 8 [0x8])) [0 S4 A32])) -1 (nil)
    (nil))

(011a0960:insn 37 35 23 (011a4700:set (011a46f0:reg:SI 134)
        (011a46b0:mem:SI (011a46a0:plus:SI (011461b0:reg/f:SI 116
virtual-outgoing-args)
                (01148270:const_int 12 [0xc])) [0 S4 A32])) -1 (nil)
    (nil))

(011a0630:insn 23 37 24 (011a42b0:set (011a4260:reg:SI 3 r3)
        (011a41c0:reg:SI 124)) -1 (nil)
    (011a71c0:insn_list:REG_LIBCALL 77 (nil)))

(011a0660:insn 24 23 25 (011a42d0:set (011a4270:reg:SI 4 r4)
        (011a41e0:reg:SI 125)) -1 (nil)
    (nil))

(011a0690:insn 25 24 26 (011a42f0:set (011a4280:reg:SI 5 r5)
        (011a4210:reg:SI 126)) -1 (nil)
    (nil))

(011a0720:call_insn 26 25 27 (0116bfb8:parallel [
            (011a4350:set (011a4290:reg:SI 3 r3)
                (011a4340:call (011a4330:mem:SI (011a4320:symbol_ref:SI
("&L_memcpy$stub")) [0 S4 A8])
                    (01148310:const_int 32 [0x20])))
            (0116bfa0:use (01148210:const_int 0 [0x0]))
            (0116bfb0:clobber (0116bfa8:scratch:SI))
        ]) -1 (nil)
    (011a4370:expr_list:REG_EH_REGION (01148208:const_int -1 [0xffffffff])
        (nil))
    (011a4300:expr_list (0116bf98:use (011a4280:reg:SI 5 r5))
        (011a42e0:expr_list (0116bf90:use (011a4270:reg:SI 4 r4))
            (011a42c0:expr_list (0116bf88:use (011a4260:reg:SI 3 r3))
                (nil)))))


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

* [Bug optimization/11202] [regression 3.4] incorrectly ordered rtl after emit_libcall_block
  2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
@ 2003-06-16  2:03 ` pinskia@physics.uc.edu
  2003-07-20  3:15 ` [Bug optimization/11202] [3.4 regression] " pinskia at physics dot uc dot edu
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia@physics.uc.edu @ 2003-06-16  2:03 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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


pinskia@physics.uc.edu changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1
   Last reconfirmed|0000-00-00 00:00:00         |2003-06-16 02:03:39
               date|                            |


------- Additional Comments From pinskia@physics.uc.edu  2003-06-16 02:03 -------
This has been failing since March 7 <http://gcc.gnu.org/ml/gcc-regression/2003-03/
msg00050.html>, there is a list of changes in this message that could be the cause of this 
regression.


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

* [Bug optimization/11202] [3.4 regression] incorrectly ordered rtl after emit_libcall_block
  2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
  2003-06-16  2:03 ` [Bug optimization/11202] " pinskia@physics.uc.edu
@ 2003-07-20  3:15 ` pinskia at physics dot uc dot edu
  2003-08-12 21:23 ` pinskia at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at physics dot uc dot edu @ 2003-07-20  3:15 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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


pinskia at physics dot uc dot edu changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |WAITING


------- Additional Comments From pinskia at physics dot uc dot edu  2003-07-20 03:15 -------
This testcase never fails, do you know if affects other testcases?


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

* [Bug optimization/11202] [3.4 regression] incorrectly ordered rtl after emit_libcall_block
  2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
  2003-06-16  2:03 ` [Bug optimization/11202] " pinskia@physics.uc.edu
  2003-07-20  3:15 ` [Bug optimization/11202] [3.4 regression] " pinskia at physics dot uc dot edu
@ 2003-08-12 21:23 ` pinskia at gcc dot gnu dot org
  2003-09-14  2:08 ` pinskia at gcc dot gnu dot org
  2003-10-14 16:13 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-08-12 21:23 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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


pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |RESOLVED
         Resolution|                            |FIXED


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-08-12 21:23 -------
I should have marked this one as fixed but I had asked for another testcase but the 
testcase in the testsuite is good enough to know when this fails.


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

* [Bug optimization/11202] [3.4 regression] incorrectly ordered rtl after emit_libcall_block
  2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
                   ` (2 preceding siblings ...)
  2003-08-12 21:23 ` pinskia at gcc dot gnu dot org
@ 2003-09-14  2:08 ` pinskia at gcc dot gnu dot org
  2003-10-14 16:13 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-09-14  2:08 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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


pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |critical
             Status|RESOLVED                    |REOPENED
         Resolution|FIXED                       |


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-09-14 00:48 -------
Bugs back somehow. :(.


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

* [Bug optimization/11202] [3.4 regression] incorrectly ordered rtl after emit_libcall_block
  2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
                   ` (3 preceding siblings ...)
  2003-09-14  2:08 ` pinskia at gcc dot gnu dot org
@ 2003-10-14 16:13 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-10-14 16:13 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

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


pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|                            |FIXED


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-10-14 16:13 -------
Fixed really by:
2003-10-13  Geoffrey Keating  <geoffk@apple.com>

	* expr.c (block_move_libcall_safe_for_call_parm): Clean up,
	and add case for machines where outgoing register parameters
	get stack space.


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

end of thread, other threads:[~2003-10-14 16:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-16  1:50 [Bug optimization/11202] New: [regression 3.4] incorrectly ordered rtl after emit_libcall_block rabeles-gccbug@archaelogic.com
2003-06-16  2:03 ` [Bug optimization/11202] " pinskia@physics.uc.edu
2003-07-20  3:15 ` [Bug optimization/11202] [3.4 regression] " pinskia at physics dot uc dot edu
2003-08-12 21:23 ` pinskia at gcc dot gnu dot org
2003-09-14  2:08 ` pinskia at gcc dot gnu dot org
2003-10-14 16:13 ` 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).