This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

run out of registers


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]