Compiling the code in the main.i attachment with -march=i686 -O2 the code
generated for the "first_map_occurred" is bigger for 4.1 compared to 4.0
The sdiff between 4.0 and 4.1:
xorl %eax, %eax | xorl %ecx, %ecx
movl %eax, waiting_for_initial_map | movl %ecx, waiting_for_initial_map
Trying to minimize the testcase changes the code generated for 4.1
It is a bit worse.
typedef struct {
int max_col;
int max_row;
} TScreen;
typedef struct _XtermWidgetRec {
TScreen screen;
} XtermWidgetRec, *XtermWidget;
static int cp_pipe[2];
static int pc_pipe[2];
typedef enum {
PTY_BAD,
PTY_FATALERROR,
PTY_GOOD,
PTY_NEW,
PTY_NOMORE,
UTMP_ADDED,
UTMP_TTYSLOT,
PTY_EXEC
} status_t;
typedef struct {
status_t status;
int error;
int fatal_error;
int tty_slot;
int rows;
int cols;
char buffer[1024];
} handshake_t;
extern XtermWidget term;
extern int waiting_for_initial_map;
__extension__ typedef int __ssize_t;
typedef __ssize_t ssize_t;
typedef unsigned int size_t;
extern ssize_t write (int __fd, __const void *__buf, size_t __n) ;
extern int close (int __fd);
void
first_map_occurred(void)
{
handshake_t handshake;
TScreen *screen = &term->screen;
handshake.status = PTY_EXEC;
handshake.rows = screen->max_row;
handshake.cols = screen->max_col;
write(pc_pipe[1], (char *) &handshake, sizeof(handshake));
close(cp_pipe[0]);
close(pc_pipe[1]);
waiting_for_initial_map = 0;
}
This is one of the reasons for the code size regression in PR23153.
--
Summary: code size regression on x86
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dann at godzilla dot ics dot uci dot edu
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23523