Yes, that is what was my first guess. That is the reason we avoid using force_reg in reload pass (by using !no_new_pseudos).
Uday Khedker. ---------------------------------------------------------------------- Dr. Uday Khedker Associate Professor Department of Computer Science & Engg. IIT Bombay, Powai, Mumbai 400 076, India. email : u...@cse.iitb.ac.in homepage: http://www.cse.iitb.ac.in/~uday phone : Office - 91 (22) 2576 7717 Res. - 91 (22) 2576 8717, 91 (22) 2572 0288 ---------------------------------------------------------------------- > (define_expand "movsi" [(set (match_operand:SI 0 "nonimmediate_operand" > "") (match_operand:SI 1 "general_operand" "") )] "" { > if(GET_CODE(operands[0])==MEM && GET_CODE(operands[1])!=REG) { > if(!no_new_pseudos) { > operands[1]=force_reg(SImode,operands[1]); } } > printf("Here1\n"); emit_move_insn (operands[0], operands[1]); > printf("Here2\n"); DONE; }) > I have confirmed it will cause the recursion. The emit_move_insn willcall > emit_move_insn again. So if the operands are valid in machineassemble, I > need to use gen*-move function, such as gen_load,gen_store, or just let > the define_expand to generate RTL. Like thefollowing, It won't cause > recursion call: > (define_expand "movsi" [(set (match_operand:SI 0 "nonimmediate_operand" > "") (match_operand:SI 1 "general_operand" "") )] "" { > if(GET_CODE(operands[0])==MEM && GET_CODE(operands[1])!=REG) { > if(!no_new_pseudos) { > operands[1]=force_reg(SImode,operands[1]); } > printf("Here1\n"); emit_move_insn (operands[0], operands[1]); > printf("Here2\n"); DONE; } else > printf("Here3\n"); }) > I should read more code in backend to avoid making such problems. ^_^. > Sorry for interruptting you.Thank you very much. > Tian Xiaonan > > > > > > 2008/12/18 Uday P. Khedker <u...@cse.iitb.ac.in>:> Yes, please keep me > updated.>>> Hi Dr. Uday Khedker: I just found a something. I added > 'emit_move_insn'>> function into theoriginal file in spim5.md which was > downloaded from your>> website,everything seems fine. But I added into the > file which I>> havemodified, the cc1 will crash. I wll find the resean. > Sorry, I>> thinkit's my fault. and I will send the reason to you later.>> > Thank you.>> Best wishes.>>>> > Tian Xiaonan2008/12/18 Uday P.>> Khedker <u...@cse.iitb.ac.in>>> Hi>> > Tian,>> I have an explanation for>> it but let me first verify and>> make > sure> that the details are>> correct. Will get back to you in a>> day or > two.>> Uday Khedker.>>> > ---------------------------------------------------------------------->>> > Dr. Uday Khedker> Associate>> Professor> Department of Computer>> Science > & Engg.> IIT Bombay,>> Powai, Mumbai 400 076, India.>>> email : > u...@cse.iitb.ac.in>>> homepage:>> http://www.cse.iitb.ac.in/~uday>>> > phone : Office - 91 (22) 2576>> 7717> Res. - 91 (22)>> 2576 > 8717, 91 (22) 2572 0288>>> > ---------------------------------------------------------------------->>>>> > > Hello, Dr. Uday Khedker:> > I>> just found that emit_move_insn>> > function can't be used in> >>> define_expand pattern in the spim>> > gcc4.0.2 platform. It will cause>> the> > Segmentation Fault.>> Something > like recursion>> happened.> > I changed the>> define_expand "movsi" > from:> >> >>> (define_expand "movsi"> >>> [(set (match_operand:SI 0>> > "nonimmediate_operand" "")> >>> (match_operand:SI 1>> > "general_operand" "")> > )]>>> > ""> > {> >>> > if(GET_CODE(operands[0])==MEM &&>> GET_CODE(operands[1])!=REG)> >>> {> > >>> if(!no_new_pseudos)> >>> {> >>> > operands[1]=force_reg(SImode,operands[1]);>>> > }> > }> > >>> }> > )> >> > to :> >> >>> (define_expand "movsi"> >>> [(set > (match_operand:SI 0>> "nonimmediate_operand" "")> >>> > (match_operand:SI 1>> "general_operand" "")> > )]>>> > ""> > > {> >>> if(GET_CODE(operands[0])==MEM &&>> GET_CODE(operands[1])!=REG)> > >>> {> >>> if(!no_new_pseudos)> >>> {> >>> > operands[1]=force_reg(SImode,operands[1]);>>> > }> > }> > >>> printf("Here1\n");> >>> emit_move_insn (operands[0],>> > operands[1]);> >>> printf("Here2\n");> >>> DONE;> > }> > )> >> > > The>> string 'Here2' nerver come out.>> Before Segmentation fault>> > occurred,> > cc1 prints lots of>> the 'Here1'. So I guess the>> function > emit_move_insn> > caused>> the recursion. But I checked the>> mips md > files. Mips also used the>>> > emit_move_insn function in>> define_expand > "movsi" pattern. So>> I guess> > whether I missed>> something in md file. > Can you give>> me any advices?> >> > Thank you>> very much.> >> > Best > Wishes.> >>>>> Tian Xiaonan> >> >> >>> --- On Tue, 12/9/08, > Uday P.>> Khedker <u...@cse.iitb.ac.in>>> wrote:> >> >> From: Uday P.>> > Khedker <u...@cse.iitb.ac.in>> >>>> Subject: Re: redundancy code> >>>> To: > tianxiaonan2...@yahoo.com.cn>>> >> Date: Tuesday, December 9,>> 2008, > 12:25 PM> >> Hi Tian,> >>>>> >> The goal of our machine>> descriptions has > been to identify>>> >> the> >> minimal and hence>> essential parts of > machine>> descriptions> >> in> >> order to>> generate correct code. > Improving>> the code quality> >> has> >> not>> been addressed in these>> > descriptions. In due course of> >>>> time,> >> we should be able to>> > devise methodology for developing>>> >> machine> >> descriptions that>> > address optimizations also.> >>>>> >> If you are interested in>> pursuing > this idea, I will be> >>>> happy to> >> interact with you.>>> >>> >> With > best regards,> >>> >>>> Uday Khedker.> >>>> > ---------------------------------------------------------------------->>> > >> Dr. Uday Khedker> >> Associate>> Professor> >> Department of>> Computer > Science & Engg.> >> IIT>> Bombay, Powai, Mumbai 400 076,>> India.> >> > email :>> u...@cse.iitb.ac.in> >> homepage:>> > http://www.cse.iitb.ac.in/~uday>>> >> phone : Office - 91 (22) 2576>> > 7717> >> Res. - 91>> (22) 2576 8717, 91 (22) 2572 0288>>> >>>> > ---------------------------------------------------------------------->>> > >>> >>> >> > Hello,> >> > I>> used the spim5 gcc 4.0.2 to study>> gcc > port. but I> >> found there>> are> >> > lots of the 'move' insns>> > redundancy code. For> >> example,>> the C code like> >> > this:> >> >>> > i=1;> >> > i = i + 5;> >> > the>> Spim compiler will generate the>> code > like the> >> following(PS:RX>> is the> >> > register) .> >> > li>> R0, > #1> >> > SW R0, 0(MEM)> >>>> > LW R0, 0(MEM)> >> > Addi R0,>> R0, > #5> >> > SW R0, 0(MEM)> >>>> >> >> > Obviously, there are two>> insn > redundancy. What> >> confused>> me is how it> >> > generated. Is>> problem > in the 'define_insn mov'>>> >> pattern or the> >> >>> define_peephole > insn?> >> >> >> >>> spim5 porting backend code> >> >>>> >>>> > here:http://www.cse.iitb.ac.in/~uday/gcc-workshop/downloads/IITB-Incremental-Machine-Descriptions/>>> > >> > Thank you.> >> >> >> Tian>> Xiaonan> >> >> >> >> >> >> >> >>>> >> >> > >>>> ___________________________________________________________>>> >> >> > >>>> ºÃÍæºØ¿¨µÈÄã·¢£¬ÓÊÏäºØ¿¨È«ÐÂÉÏÏߣ¡>>> >> >>> > http://card.mail.cn.yahoo.com/> >>>> >> >> >> >> >>>>>> >