This is the mail archive of the gcc@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]
Other format: [Raw text]

RE: genattrtab regression: infinite loop


The following self-contained md file generates an infinite loop in genattrtab:
(define_attr "fpsize" "short,long" (const_string "short"))

(define_attr "fplength" ""
  (if_then_else
          (eq_attr "fpsize" "long")
          (const_int 8)
  	  (const_int 4)))

(define_insn "br_pred"
  [(set (pc)
	(if_then_else
	 (match_operator 2 "easy_comparison"
	  [(match_operand:BI 0 "register_operand" "c")
	   (const_int 0)])
	 (label_ref (match_operand 1 "" ""))
	 (pc)))]
  ""
  "brtest"
  [(set (attr "fplength") (const_int 4))
   (set (attr "fpsize")
 (if_then_else (eq_attr "fplength" "4") (const_string "short")
             (const_string "long"))
             )
             ])


The infinite loop occurs in genattrtab.c:get_attr_order. The loop inside get_attr_order never exits. It seems to be a topological sort, and since fpsize depends on fplength and vice-versa, it keeps looping.
The strange thing is that when genattrtab looks at all the attributes and instructions, it accumulates all possible values for each attribute, so the list of attribute values for fpsize and fplength are indeed dependent on each other even though in the context of br_pred, they are not inter-dependent because we fixed the value of fplength at 4, so calculating the value of fpsize should be straightforward.

It feels like this could be improved. Do you agree?

Paulo Matos


> -----Original Message-----
> From: Richard Biener [mailto:richard.guenther@gmail.com]
> Sent: 11 February 2013 12:49
> To: Paulo Matos
> Cc: gcc@gcc.gnu.org
> Subject: Re: genattrtab regression: infinite loop
> 
> On Mon, Feb 11, 2013 at 1:36 PM, Paulo Matos <pmatos@broadcom.com> wrote:
> >> -----Original Message-----
> >> From: Richard Biener [mailto:richard.guenther@gmail.com]
> >> Sent: 11 February 2013 10:56
> >> To: Paulo Matos
> >> Cc: gcc@gcc.gnu.org
> >> Subject: Re: genattrtab regression: infinite loop
> >>
> >>
> >> Does it work with -fno-aggressive-loop-optimizations?
> >>
> >
> > That's new in 4.8, right? genattrtab.c is compiled with the host compiler
> which in my case is 4.7.2.
> 
> Yes.
> 
> > --
> > Paulo Matos


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