This is the mail archive of the gcc-patches@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]

Re: 2nd try for patch for automaton based pipeline hazard recognizer (part #1)


Vladimir Makarov <vmakarov@redhat.com> writes:

  > Dan Nicolaescu wrote:
  > > 
  > > [snip]
  > > 
  > > I have a comment on the constructs used to describe the pipeline, it
  > > uses regular expressions in a string.
  > > 
  > > That is a little bit not-orthogonal with the rest of the .md file, as
  > > regexps are an infix notation and the rest of .md language is a prefix
  > > language.
  > > 
  > > IMO something like:
  > > 
  > > (define_insn_reservation "mult" 4 (eq_attr "cpu" "mult")
  > >                          (sequence "i1_pipeline"  (nothing 3)
  > >                                    (or "port_0"  "port1")))
  > 
  > Hi, Dan.
  > 
  > Sequence requires list of rtl expressions.  That means you should write 
  > 
  > (sequence (const_string "i1_pipeline")  (nothing 3)
  >
  > > is a little bit more understandable and probably easier to parse
  > > than:
  > > 
  > > (define_insn_reservation "mult" 4 (eq_attr "cpu" "mult")
  > >                          "i1_pipeline, nothing*3, (port_0 | port1)")
  > > 
  > > (stolen from your example)
  > > 
  > > Of course this could turn into a religious discussion...
  > > Just wondering what everybody thinks...
  > 
  >   RTL has some constructions which could be used to describe the
  > reservations (sequence, parallel etc.). If we are using rtl
  > constructions to describe the reservation, it will be too verbose. 
  > Typical example is using (const_string "a") instead of "a".  A 200 lines
  > description (of one VLIW processor) would be 400-600 lines in such
  > case.  Also this description would be not readable.  Actually, the first
  > design used such approach and was rejected.
  >
  >   If we don't use existing RTL constructions, we need to create new ones
  > slightly different to the existing constructions which is also not
  > good.  So I'd choose brevity and simplicity to orthogonality in this
  > case.  That is not only my opinion.


You could create a few new constructs: (pipe_sequence ... )
                                  or (pseq ... )
               
You just need 3-4 of them. (You introduce new constructs with the
regexp syntax anyway, so I don't think this is a problem).

One big advantage of having a lispish syntax is that you get easy
indentation, easy editing and syntax coloring in emacs (or other
editors that understand lisp). This, and being more readable helps
maintainability. 
Just think how hard it is to edit and indent the C code in the md
file.

If you think it's worthwhile experimenting with this, if you email me
a regexp pipeline description, I could rewrite it to use a prefix
syntax and post the result so we can compare them.

--dan


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