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/> >>>> >> >> >> >> >>>>>>
>

Reply via email to