That's fine. It seems that other targets don't have such issue. Our target is too special and it is still a private port. I can just use optimize < 1 here. Thanks,
Bingfeng > -----Original Message----- > From: Vladimir Makarov [mailto:vmaka...@redhat.com] > Sent: 23 March 2009 19:40 > To: Bingfeng Mei > Cc: gcc@gcc.gnu.org > Subject: Re: Typo or intended? > > Bingfeng Mei wrote: > > Hello, > > I just updated our porting to include last 2-3 weeks of GCC > developments. I noticed a large number of test failures at > -O1 that use a user-defined data type (based on a special > register file of our processor). All variables of such type > are now spilled to memory which we don't allow at -O1 because > it is too expensive. After investigation, I found that it is > the following new code causes the trouble. I don't quite > understand the function of the new code, but I don't see > what's special for -O1 in terms of register allocation in > comparison with higher optimizing levels. If I change it to > (optimize < 1), everthing is fine as before. I start to > wonder whether (optimize <= 1) is a typo or intended. Thanks > in advance. > > > > > Sorry for the delay with the answer. I was on vacation last week. > > As Andrew Haley guess, it was intended. I thought that improving > debugging for -O1 is also important (more important than > optimization). > Although GCC manual says > > With `-O', the compiler tries to reduce code size and execution > time, without performing any optimizations that take a great deal > of compilation time. > > it also says > > `-O' also turns on `-fomit-frame-pointer' on machines where doing > so does not interfere with debugging. > > Therefore I've decided to do analogous thing for the patch. > May be I am > wrong. We could do this only for -O0 if people really want > this which I > am not sure about. > > Cheers, > > Bingfeng Mei > > Broadcom UK > > > > if ((! flag_caller_saves && ALLOCNO_CALLS_CROSSED_NUM > (a) != 0) > > /* For debugging purposes don't put user defined variables in > > callee-clobbered registers. */ > > || (optimize <= 1 > <--------- why include -O1? > > && (attrs = REG_ATTRS (regno_reg_rtx > [ALLOCNO_REGNO (a)])) != NULL > > && (decl = attrs->decl) != NULL > > && VAR_OR_FUNCTION_DECL_P (decl) > > && ! DECL_ARTIFICIAL (decl))) > > { > > IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), > > call_used_reg_set); > > IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), > > call_used_reg_set); > > } > > else if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) > > { > > IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), > > no_caller_save_reg_set); > > IOR_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a), > > temp_hard_reg_set); > > IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), > > no_caller_save_reg_set); > > IOR_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a), > > temp_hard_reg_set); > > } > > > > >