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: What does "define_bypass" mean?


mike@bbs.sign.idv.tw wrote:

Hello,
I am try to use dfa to describe my experimental cpu.
When reading about "define_bypss",I simply cannot figure
out what it means. The description in the gcc internal manual is not very clear.


Please help. Thanks.


Latency time given in define_insn_reservation defines the data delay for the following true dependence pairs

the insn corresponidng to define_insn_reservation -> any other insn

If a pair in the set of pairs mentioned above has a different latency time, you can redefine it in the define_bypass.

E.g. if your have the following two constructions

 (define_insn_reservation "load"  3 ....)
 (define_bypass 2 "load" "store")

It means that the latency time for
  "load" -> any insn but "store" is equal to 3
  "load" -> "store" is equal to 2

There are more complicated cases when you need to change the default latency time for pair of insns on a given resource. In this case you need to use a guard function in define_bypass. For example, you should use to the guard function when you need to inform the gcc insns scheduler that latency time between an insn and store when the insn result is used as store address (but not as the stored data) is bigger than the default value. You could find such usage of define_bypass in .md files.

Vlad


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