This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
run out of registers
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: run out of registers
- From: OYAMA Yoshihiro <oyama at is dot s dot u-tokyo dot ac dot jp>
- Date: 23 Mar 1999 19:23:56 +0900
Hello,
I am Yoshihiro Oyama, a PhD student in University of Tokyo.
I found that the following program does not compile.
I am afraid I reserved too many physical registers.
I attached *raw* preprocessed output to this mail
because it is very small.
Regards,
---
======== system ========
Solaris 2.6, Sun Ultra Enterprise 10000 (166 MHz x 14)
======== commandline monitor ========
harp[100][7:17pm]~/Schematic/c/egcsbug% make
gcc -O2 -Wall -v --save-temps -ffixed-%l0 -ffixed-%l1 -ffixed-%l2 -ffixed-%l3 -ffixed-%l4 -ffixed-%l5 -ffixed-%l6 -ffixed-%l7 -ffixed-%i0 -ffixed-%i1 -ffixed-%i2 -ffixed-%i3 -ffixed-%i4 -ffixed-%i5 -ffixed-%g2 -ffixed-%g3 -ffixed-%g4 -c foo.c -o foo.o
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)
/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.91.66/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=91 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4) -D__OPTIMIZE__ -Wall -D__sparc_v9__ -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) foo.c foo.i
GNU CPP version egcs-2.91.66 19990314 (egcs-1.1.2 release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/local/sparc-sun-solaris2.6/include
/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.91.66/include
/usr/include
End of search list.
/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/egcs-2.91.66/cc1 foo.i -quiet -dumpbase foo.c -O2 -Wall -version -ffixed-%l0 -ffixed-%l1 -ffixed-%l2 -ffixed-%l3 -ffixed-%l4 -ffixed-%l5 -ffixed-%l6 -ffixed-%l7 -ffixed-%i0 -ffixed-%i1 -ffixed-%i2 -ffixed-%i3 -ffixed-%i4 -ffixed-%i5 -ffixed-%g2 -ffixed-%g3 -ffixed-%g4 -o foo.s
GNU C version egcs-2.91.66 19990314 (egcs-1.1.2 release) (sparc-sun-solaris2.6) compiled by GNU C version egcs-2.91.66 19990314 (egcs-1.1.2 release).
foo.c: In function `print_result':
foo.c:21: fixed or forbidden register 11 (%o3) was spilled for class GENERAL_REGS.
This may be due to a compiler bug or to impossible asm
statements or clauses.
gmake: *** [foo.o] Error 1
harp[101][7:19pm]~/Schematic/c/egcsbug%
======== Makefile ========
CC = gcc
CFLAGS = -O2 -Wall -v --save-temps \
-ffixed-%l0 -ffixed-%l1 -ffixed-%l2 -ffixed-%l3 \
-ffixed-%l4 -ffixed-%l5 -ffixed-%l6 -ffixed-%l7 \
-ffixed-%i0 -ffixed-%i1 -ffixed-%i2 -ffixed-%i3 \
-ffixed-%i4 -ffixed-%i5 \
-ffixed-%g2 -ffixed-%g3 -ffixed-%g4
OBJS = foo.o
all: $(OBJS)
gcc $(OBJS)
clean:
rm -f *.o
======== foo.c ========
#include <stdio.h>
#include <stdlib.h>
int get_event0(int);
int get_event1(int);
long event0[10], event1[10], diff[10];
long sum_event0, sum_event1, sum_diff;
static void print_result(void)
{
int self = 0;
event0[self] = get_event0(self);
event1[self] = get_event1(self);
diff[self] = labs(event0[self] - event1[self]);
printf("PE %2d: ev0 = %10lu, ev1 = %10lu, |ev1 - ev0| = %10lu\n",
self, event0[self], event1[self], diff[self]);
sum_event0 += event0[self];
sum_event1 += event1[self];
sum_diff += diff[self];
}
======== foo.i ========
# 1 "foo.c"
# 1 "/usr/include/stdio.h" 1 3
#pragma ident "@(#)stdio.h 1.49 97/05/09 SMI"
# 1 "/usr/include/sys/feature_tests.h" 1 3
#pragma ident "@(#)feature_tests.h 1.13 97/06/26 SMI"
# 17 "/usr/include/stdio.h" 2 3
# 1 "/usr/include/sys/va_list.h" 1 3
#pragma ident "@(#)va_list.h 1.6 96/01/26 SMI"
# 41 "/usr/include/sys/va_list.h" 3
typedef void *__va_list;
# 18 "/usr/include/stdio.h" 2 3
typedef unsigned int size_t;
typedef long long __longlong_t;
typedef long off_t;
typedef __longlong_t off64_t;
typedef long fpos_t;
typedef __longlong_t fpos64_t;
# 122 "/usr/include/stdio.h" 3
typedef struct
{
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
unsigned char _flag;
unsigned char _file;
} FILE;
extern FILE __iob[20 ];
extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];
# 222 "/usr/include/stdio.h" 3
extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, FILE *);
extern void setbuf(FILE *, char *);
extern void setbuffer(FILE *, char *, size_t);
extern int setlinebuf(FILE *);
extern int setvbuf(FILE *, char *, int, size_t);
extern int fprintf(FILE *, const char *, ...);
extern int fscanf(FILE *, const char *, ...);
extern int printf(const char *, ...);
extern int scanf(const char *, ...);
extern int snprintf(char *, size_t, const char *, ...);
extern int sprintf(char *, const char *, ...);
extern int sscanf(const char *, const char *, ...);
extern int vfprintf(FILE *, const char *, __va_list);
extern int vprintf(const char *, __va_list);
extern int vsnprintf(char *, size_t, const char *, __va_list);
extern int vsprintf(char *, const char *, __va_list);
extern int fgetc(FILE *);
extern char *fgets(char *, int, FILE *);
extern int fputc(int, FILE *);
extern int fputs(const char *, FILE *);
extern int getc(FILE *);
extern int getchar(void);
extern char *gets(char *);
extern int putc(int, FILE *);
extern int putchar(int);
extern int puts(const char *);
extern int ungetc(int, FILE *);
extern size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);
extern int __filbuf(FILE *);
extern int __flsbuf(int, FILE *);
extern FILE *fdopen(int, const char *);
extern char *ctermid(char *);
extern int fileno(FILE *);
# 319 "/usr/include/stdio.h" 3
extern FILE *popen(const char *, const char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern int getopt(int, char *const *, const char *);
extern int getsubopt(char **, char *const *, char **);
extern char *optarg;
extern int optind, opterr, optopt;
extern int getw(FILE *);
extern int putw(int, FILE *);
extern int pclose(FILE *);
extern int fseeko(FILE *, off_t, int);
extern off_t ftello(FILE *);
extern FILE *fopen64(const char *, const char *);
extern FILE *freopen64(const char *, const char *, FILE *);
extern FILE *tmpfile64(void);
extern int fgetpos64(FILE *, fpos64_t *);
extern int fsetpos64(FILE *, const fpos64_t *);
extern int fseeko64(FILE *, off64_t, int);
extern off64_t ftello64(FILE *);
# 467 "/usr/include/stdio.h" 3
# 515 "/usr/include/stdio.h" 3
# 1 "foo.c" 2
# 1 "/usr/include/stdlib.h" 1 3
#pragma ident "@(#)stdlib.h 1.40 97/06/30 SMI"
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef long uid_t;
typedef long wchar_t;
# 86 "/usr/include/stdlib.h" 3
extern unsigned char __ctype[];
extern double atof(const char *);
extern int atoi(const char *);
extern long int atol(const char *);
extern double strtod(const char *, char **);
extern long int strtol(const char *, char **, int);
extern unsigned long int strtoul(const char *, char **, int);
extern int rand(void);
extern void srand(unsigned int);
extern void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);
extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern void _exithandle(void);
extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));
extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(const char *, size_t);
extern int wctomb(char *, wchar_t);
extern size_t mbstowcs(wchar_t *, const char *, size_t);
extern size_t wcstombs(char *, const wchar_t *, size_t);
extern double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);
extern void swab(const char *, char *, int);
extern int mkstemp(char *);
extern int mkstemp64(char *);
extern long a64l(const char *);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *gcvt(double, int, char *);
extern int getsubopt(char **, char *const *, char **);
extern int grantpt(int);
extern char *initstate(unsigned, char *, size_t);
extern char *l64a(long);
extern char *mktemp(char *);
extern char *ptsname(int);
extern long random(void);
extern char *realpath(const char *, char *);
extern char *setstate(const char *);
extern void srandom(unsigned);
extern int ttyslot(void);
extern int unlockpt(int);
extern void *valloc(size_t);
extern int dup2(int, int);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern const char *getexecname(void);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern char *getpassphrase(const char *);
extern int getpw(uid_t, char *);
extern int isatty(int);
extern void *memalign(size_t, size_t);
extern char *ttyname(int);
extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);
# 349 "/usr/include/stdlib.h" 3
# 2 "foo.c" 2
int get_event0(int);
int get_event1(int);
long event0[10], event1[10], diff[10];
long sum_event0, sum_event1, sum_diff;
static void print_result(void)
{
int self = 0;
event0[self] = get_event0(self);
event1[self] = get_event1(self);
diff[self] = labs(event0[self] - event1[self]);
printf("PE %2d: ev0 = %10lu, ev1 = %10lu, |ev1 - ev0| = %10lu\n",
self, event0[self], event1[self], diff[self]);
sum_event0 += event0[self];
sum_event1 += event1[self];
sum_diff += diff[self];
}
--------
Yoshihiro Oyama
Department of Information Science
Faculty of Science
University of Tokyo
E-mail: oyama@is.s.u-tokyo.ac.jp
Key fingerprint = 77 1F 23 91 9B BC 5D FD FF 93 D2 CF 08 17 61 BF